From 585f03bf45df4ac7ed61d22c9dbe10d8e453199d Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Wed, 5 Jun 2024 15:06:15 -0400
Subject: Flashcards changes

---
 src/client/views/nodes/ComparisonBox.tsx | 88 ++++++++++++++++++++++----------
 1 file changed, 60 insertions(+), 28 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index adb380f12..c0c173d9a 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -10,6 +10,7 @@ import { DocData } from '../../../fields/DocSymbols';
 import { RichTextField } from '../../../fields/RichTextField';
 import { DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
 import { GPTCallType, gptAPICall } from '../../apis/gpt/GPT';
+import '../pdf/GPTPopup/GPTPopup.scss';
 import { DocUtils } from '../../documents/DocUtils';
 import { DocumentType } from '../../documents/DocumentTypes';
 import { Docs } from '../../documents/Documents';
@@ -23,6 +24,7 @@ import './ComparisonBox.scss';
 import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FormattedTextBox } from './formattedText/FormattedTextBox';
+import ReactLoading from 'react-loading';
 
 @observer
 export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
@@ -33,17 +35,18 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     constructor(props: FieldViewProps) {
         super(props);
         makeObservable(this);
+        // this._isAnyChildContentActive = true;
     }
 
-    @observable inputValue = '';
-    @observable outputValue = '';
-    @observable loading = false;
-    @observable errorMessage = '';
-    @observable outputMessage = '';
+    @observable private _inputValue = '';
+    @observable private _outputValue = '';
+    @observable private _loading = false;
+    @observable private _errorMessage = '';
+    @observable private _outputMessage = '';
 
     @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
-        this.inputValue = e.target.value;
-        console.log(this.inputValue);
+        this._inputValue = e.target.value;
+        console.log(this._inputValue);
     };
 
     @observable _animating = '';
@@ -118,6 +121,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
     };
 
+    // private onClick(e: React.PointerEvent<HTMLDivElement>) {
+    //     setupMoveUpEvents(
+    //         this, e, this.onPointerMOve, emptyFunction(), () => {this._isAnyChildContentActive = true;}, emptyFunction(), emptyFunction()
+    //     )
+    // }
+
     @action
     private onPointerMove = ({ movementX }: PointerEvent) => {
         const width = movementX * this.ScreenToLocalBoxXf().Scale + (this.clipWidth / 100) * this._props.PanelWidth();
@@ -157,7 +166,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     };
     remDoc = (doc: Doc, which: string) => {
         if (this.dataDoc[which] === doc) {
-            // this.dataDoc[which] = 'empty';
+            this.dataDoc[which] = 'empty';
             this.dataDoc[which] = undefined;
             return true;
         }
@@ -251,6 +260,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             console.log(this.layoutDoc[`_${this._props.fieldKey}_revealOp`]);
                             if (!this.layoutDoc[`_${this._props.fieldKey}_revealOp`] || this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'flip') {
                                 this.flipFlashcard();
+
                                 console.log('Print Front of cards: ' + (RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text ?? ''));
                                 console.log('Print Back of cards: ' + (RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text ?? ''));
                             }
@@ -260,7 +270,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         background: usepath === 'alternate' ? 'white' : 'black',
                         color: usepath === 'alternate' ? 'black' : 'white',
                     }}>
-                    <FontAwesomeIcon icon="turn-up" size="sm" />
+                    <div key="alternate" className="formattedTextBox-flip">
+                        <FontAwesomeIcon icon="turn-up" size="1x" />
+                    </div>
                 </div>
             </Tooltip>
         );
@@ -269,8 +281,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @action handleRenderGPTClick = () => {
         // Call the GPT model and get the output
         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = 'alternate';
-        this.outputValue = '';
-        if (this.inputValue) this.askGPT();
+        this._outputValue = '';
+        if (this._inputValue) this.askGPT();
     };
 
     @action handleRenderClick = () => {
@@ -278,6 +290,15 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = undefined;
     };
 
+    animateRes = (resIndex: number, newText: string) => {
+        if (resIndex < newText.length) {
+            // const marks = this._editorView?.state.storedMarks ?? [];
+            this._outputValue += newText[resIndex];
+            // this._editorView?.dispatch(this._editorView?.state.tr.insertText(newText[resIndex]).setStoredMarks(this._outputValue));
+            setTimeout(() => this.animateRes(resIndex + 1, newText), 20);
+        }
+    };
+
     /**
      * Calls the GPT model to create QuizCards. Evaluates how similar the user's response is to the alternate
      * side of the flashcard.
@@ -285,19 +306,21 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     askGPT = async (): Promise<string | undefined> => {
         const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
         const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
-        const queryText = questionText + ' UserAnswer: ' + this.inputValue + '. ' + rubricText;
-
+        const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
+        this._loading = true;
         try {
             const res = await gptAPICall(queryText, GPTCallType.QUIZ);
             if (!res) {
                 console.error('GPT call failed');
                 return;
             }
-            this.outputValue = res;
+            this.animateRes(0, '\n\n' + res);
+            // this._outputValue = res;
             console.log(res);
         } catch (err) {
             console.error('GPT call failed');
         }
+        this._loading = false;
     };
     layoutWidth = () => NumCast(this.layoutDoc.width, 200);
     layoutHeight = () => NumCast(this.layoutDoc.height, 200);
@@ -306,11 +329,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         const clearButton = (which: string) => (
             <Tooltip title={<div className="dash-tooltip">remove</div>}>
                 <div
+                    // style={{ position: 'relative', top: '0px', left: '10px' }}
                     ref={this._closeRef}
                     className={`clear-button ${which}`}
                     onPointerDown={e => this.closeDown(e, which)} // prevent triggering slider movement in registerSliding
                 >
-                    <FontAwesomeIcon className={`clear-button ${which}`} icon="times" size="sm" />
+                    <FontAwesomeIcon className={`clear-button ${which}`} icon="times" size="xs" />
                 </div>
             </Tooltip>
         );
@@ -340,8 +364,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         hideLinkButton
                         pointerEvents={this._isAnyChildContentActive ? undefined : returnNone}
                     />
-                    {layoutString ? null : clearButton(whichSlot)}
-                </> // placeholder image if doc is missing
+                    <div style={{ position: 'absolute', top: '-5px', left: '2px' }}>{layoutString ? null : clearButton(whichSlot)}</div>
+                </> // placeholder image if doc is missingleft: `${NumCast(this.layoutDoc.width, 200) - 33}px`
             ) : (
                 <div className="placeholder">
                     <FontAwesomeIcon className="upload-icon" icon="cloud-upload-alt" size="lg" />
@@ -377,25 +401,31 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
             // render the QuizCards
             if (DocCast(this.Document.embedContainer) && DocCast(this.Document.embedContainer).filterOp === 'quiz') {
+                const text = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
                 return (
                     <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} style={{ display: 'flex', flexDirection: 'column' }}>
-                        <p style={{ color: 'white', padding: 10 }}>{StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text)}</p>
-                        {/* {StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text)} */}
+                        <p style={{ color: 'white', padding: 10 }}>{text}</p>
+                        <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', padding: 10 }}>Return to all flashcards and add text to both sides. </p>
                         <div className="input-box">
                             <textarea
-                                value={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this.outputValue : this.inputValue}
+                                value={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._outputValue : this._inputValue}
                                 onChange={this.handleInputChange}
-                                readOnly={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate'}
-                            />
+                                readOnly={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate'}></textarea>
+
+                            {this._loading ? (
+                                <div className="loading-spinner" style={{ position: 'absolute' }}>
+                                    <ReactLoading type="spin" height={30} width={30} color={'blue'} />
+                                </div>
+                            ) : null}
                         </div>
-                        <div className="submit-button" style={{ display: this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 'none' : 'flex' }}>
-                            <button type="button" onClick={this.handleRenderGPTClick}>
+                        <div className="submit-button" style={{ overflow: 'hidden', display: this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 'none' : 'flex' }}>
+                            <button type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px' }}>
                                 Submit
                             </button>
                         </div>
-                        <div className="submit-button" style={{ display: this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 'flex' : 'none' }}>
-                            <button type="button" onClick={this.handleRenderClick}>
-                                Edit Your Response
+                        <div className="submit-button" style={{ overflow: 'hidden', marginBottom: '2px', display: this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 'flex' : 'none' }}>
+                            <button type="button" onClick={this.handleRenderClick} style={{ borderRadius: '2px' }}>
+                                Try Again
                             </button>
                         </div>
                     </div>
@@ -412,7 +442,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     }}
                     onMouseLeave={() => {
                         this.hoverFlip(undefined);
-                    }}>
+                    }}
+                    // onPointerUp={() => (this._isAnyChildContentActive = true)}
+                >
                     {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
                     {this.overlayAlternateIcon}
                 </div>
-- 
cgit v1.2.3-70-g09d2


From c76505f56a83625e3993427838aaee0c54c5fb81 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Thu, 6 Jun 2024 09:53:12 -0400
Subject: Fixes to chatcard and quizcard

---
 src/client/apis/gpt/GPT.ts                         |  2 +-
 .../views/collections/CollectionCarouselView.tsx   |  7 ++--
 src/client/views/nodes/ComparisonBox.tsx           | 43 ++++++++++++++++++----
 src/client/views/nodes/DocumentView.tsx            | 19 +---------
 4 files changed, 40 insertions(+), 31 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index 05007960d..b036349dc 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -51,7 +51,7 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
         model: 'gpt-4-turbo',
         maxTokens: 1024,
         temp: 0,
-        prompt: 'List unique differences between the content of the UserAnswer and Rubric. Before each difference, label it and provide any additional information the UserAnswer missed and explain it in second person without separating it into UserAnswer and Rubric content and additional information. If there are no differences, say correct',
+        prompt: 'List unique differences between the content of the UserAnswer and Rubric. Before each difference, label it and provide any additional information the UserAnswer missed and explain it in second person without separating it into UserAnswer and Rubric content and additional information. If the Rubric is incorrect, explain why. If there are no differences, say correct. If it is empty, say there is nothing for me to evaluate.',
     },
 };
 
diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index 2893de762..53d14e6e0 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -35,6 +35,7 @@ export class CollectionCarouselView extends CollectionSubView() {
     private _dropDisposer?: DragManager.DragDropDisposer;
     @observable private _message = 'Drag a document';
     get practiceField() { return this.fieldKey + "_practice"; } // prettier-ignore
+    get sideField() { return "_" + this.fieldKey + "_usePath"; } // prettier-ignore
     get starField()     { return this.fieldKey + "_star"; } // prettier-ignore
 
     constructor(props: any) {
@@ -131,9 +132,6 @@ export class CollectionCarouselView extends CollectionSubView() {
         curDoc.layout[this.practiceField] = val;
         this.advance(e);
     };
-    clearContent = () => {
-        this.carouselItems?.map(doc => (doc.layout[this.practiceField] = undefined));
-    };
     captionStyleProvider = (doc: Doc | undefined, captionProps: Opt<FieldViewProps>, property: string): any => {
         // first look for properties on the document in the carousel, then fallback to properties on the container
         const childValue = doc?.['caption_' + property] ? this._props.styleProvider?.(doc, captionProps, property) : undefined;
@@ -146,7 +144,8 @@ export class CollectionCarouselView extends CollectionSubView() {
     setFilterMode = (mode: cardMode) => {
         this.layoutDoc.filterOp = mode;
         if (mode == cardMode.STAR) this.move(1);
-        this.clearContent();
+        if (mode == cardMode.QUIZ) this.carouselItems?.map(doc => (doc.layout[this.sideField] = undefined));
+        this.carouselItems?.map(doc => (doc.layout[this.practiceField] = undefined));
     };
     specificMenu = (): void => {
         const cm = ContextMenu.Instance;
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index c0c173d9a..6d4af2f3e 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -25,6 +25,8 @@ import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FormattedTextBox } from './formattedText/FormattedTextBox';
 import ReactLoading from 'react-loading';
+import { ContextMenu } from '../ContextMenu';
+import { ContextMenuProps } from '../ContextMenuItem';
 
 @observer
 export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
@@ -282,7 +284,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         // Call the GPT model and get the output
         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = 'alternate';
         this._outputValue = '';
-        if (this._inputValue) this.askGPT();
+        if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
     };
 
     @action handleRenderClick = () => {
@@ -290,12 +292,22 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = undefined;
     };
 
-    animateRes = (resIndex: number, newText: string) => {
+    animateRes = (resIndex: number, newText: string, callType: GPTCallType) => {
         if (resIndex < newText.length) {
             // const marks = this._editorView?.state.storedMarks ?? [];
-            this._outputValue += newText[resIndex];
+            switch (callType) {
+                case GPTCallType.CHATCARD:
+                    DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text += newText[resIndex];
+                    break;
+                case GPTCallType.QUIZ:
+                    this._outputValue += newText[resIndex];
+                    break;
+                default:
+                    return;
+            }
+
             // this._editorView?.dispatch(this._editorView?.state.tr.insertText(newText[resIndex]).setStoredMarks(this._outputValue));
-            setTimeout(() => this.animateRes(resIndex + 1, newText), 20);
+            setTimeout(() => this.animateRes(resIndex + 1, newText, callType), 20);
         }
     };
 
@@ -303,18 +315,22 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * Calls the GPT model to create QuizCards. Evaluates how similar the user's response is to the alternate
      * side of the flashcard.
      */
-    askGPT = async (): Promise<string | undefined> => {
+    askGPT = async (callType: GPTCallType): Promise<string | undefined> => {
         const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
         const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
         const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
         this._loading = true;
+        if (callType == GPTCallType.CHATCARD) {
+            DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = '';
+            this.flipFlashcard();
+        }
         try {
-            const res = await gptAPICall(queryText, GPTCallType.QUIZ);
+            const res = await gptAPICall(callType == GPTCallType.QUIZ ? queryText : questionText, callType);
             if (!res) {
                 console.error('GPT call failed');
                 return;
             }
-            this.animateRes(0, '\n\n' + res);
+            this.animateRes(0, res, callType);
             // this._outputValue = res;
             console.log(res);
         } catch (err) {
@@ -325,6 +341,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     layoutWidth = () => NumCast(this.layoutDoc.width, 200);
     layoutHeight = () => NumCast(this.layoutDoc.height, 200);
 
+    specificMenu = (): void => {
+        const cm = ContextMenu.Instance;
+        cm.addItem({ description: 'Create an Answer on the Back', event: () => this.askGPT(GPTCallType.CHATCARD), icon: 'pencil' });
+    };
+
     render() {
         const clearButton = (which: string) => (
             <Tooltip title={<div className="dash-tooltip">remove</div>}>
@@ -425,7 +446,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         </div>
                         <div className="submit-button" style={{ overflow: 'hidden', marginBottom: '2px', display: this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 'flex' : 'none' }}>
                             <button type="button" onClick={this.handleRenderClick} style={{ borderRadius: '2px' }}>
-                                Try Again
+                                Redo the Question
                             </button>
                         </div>
                     </div>
@@ -436,6 +457,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             return (
                 <div
                     className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
+                    onContextMenu={this.specificMenu}
                     style={{ display: 'flex', flexDirection: 'column' }}
                     onMouseEnter={() => {
                         this.hoverFlip('alternate');
@@ -446,6 +468,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     // onPointerUp={() => (this._isAnyChildContentActive = true)}
                 >
                     {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
+                    {this._loading ? (
+                        <div className="loading-spinner" style={{ position: 'absolute' }}>
+                            <ReactLoading type="spin" height={30} width={30} color={'blue'} />
+                        </div>
+                    ) : null}
                     {this.overlayAlternateIcon}
                 </div>
             );
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index 8bf7b094f..a25249eac 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -111,6 +111,7 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
     private _downTime: number = 0;
     private _lastTap: number = 0;
     private _doubleTap = false;
+    private _loading = false;
     private _mainCont = React.createRef<HTMLDivElement>();
     private _titleRef = React.createRef<EditableView>();
     private _dropDisposer?: DragManager.DragDropDisposer;
@@ -501,21 +502,6 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
         input.click();
     };
 
-    askGPT = async (): Promise<string | undefined> => {
-        const queryText = RTFCast(DocCast(this.dataDoc[this.props.fieldKey + '_1']).text)?.Text;
-        try {
-            const res = await gptAPICall('Question: ' + StrCast(queryText), GPTCallType.CHATCARD);
-            if (!res) {
-                console.error('GPT call failed');
-                return;
-            }
-            DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
-            console.log(res);
-        } catch (err) {
-            console.error('GPT call failed');
-        }
-    };
-
     onContextMenu = (e?: React.MouseEvent, pageX?: number, pageY?: number) => {
         if (e && this.layoutDoc.layout_hideContextMenu && Doc.noviceMode) {
             e.preventDefault();
@@ -574,9 +560,6 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
                 appearanceItems.splice(0, 0, { description: 'Open in Lightbox', event: () => DocumentView.SetLightboxDoc(this.Document), icon: 'external-link-alt' });
             }
             appearanceItems.push({ description: 'Pin', event: () => this._props.pinToPres(this.Document, {}), icon: 'eye' });
-            if (this.Document._layout_isFlashcard) {
-                appearanceItems.push({ description: 'Create an answer on the back', event: () => this.askGPT(), icon: 'id-card' });
-            }
 
             !Doc.noviceMode && templateDoc && appearanceItems.push({ description: 'Open Template   ', event: () => this._props.addDocTab(templateDoc, OpenWhere.addRight), icon: 'eye' });
             !appearance && appearanceItems.length && cm.addItem({ description: 'Appearance...', subitems: appearanceItems, icon: 'compass' });
-- 
cgit v1.2.3-70-g09d2


From 7594f649890d27d558be35c9d40a0aa8211aec67 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Thu, 6 Jun 2024 22:20:24 -0400
Subject: Flashcard changes - menu added

---
 src/client/views/nodes/ComparisonBox.scss          | 20 +----
 src/client/views/nodes/ComparisonBox.tsx           | 99 +++++++++++++++++-----
 src/client/views/nodes/DocumentView.tsx            |  3 +-
 src/client/views/nodes/FieldView.tsx               |  1 +
 .../nodes/formattedText/FormattedTextBox.scss      |  6 +-
 .../views/nodes/formattedText/FormattedTextBox.tsx |  1 +
 6 files changed, 87 insertions(+), 43 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.scss b/src/client/views/nodes/ComparisonBox.scss
index f3dc0f68c..dc107b576 100644
--- a/src/client/views/nodes/ComparisonBox.scss
+++ b/src/client/views/nodes/ComparisonBox.scss
@@ -47,6 +47,7 @@
         width: '91%';
         height: '80%';
         z-index: '-1';
+        overscroll-behavior: contain;
     }
 
     .clip-div {
@@ -241,24 +242,5 @@
                 }
             }
         }
-
-        // .loading-circle {
-        //     position: relative;
-        //     width: 50px;
-        //     height: 50px;
-        //     border-radius: 50%;
-        //     border: 3px solid #ccc;
-        //     border-top-color: #333;
-        //     animation: spin 1s infinite linear;
-        // }
-
-        // @keyframes spin {
-        //     0% {
-        //         transform: rotate(0deg);
-        //     }
-        //     100% {
-        //         transform: rotate(360deg);
-        //     }
-        // }
     }
 }
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 6d4af2f3e..f844892c5 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -1,9 +1,9 @@
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { Tooltip } from '@mui/material';
-import { action, computed, makeObservable, observable } from 'mobx';
+import { action, computed, makeObservable, observable, reaction } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
-import { returnFalse, returnNone, setupMoveUpEvents } from '../../../ClientUtils';
+import { returnFalse, returnNone, returnTrue, setupMoveUpEvents } from '../../../ClientUtils';
 import { emptyFunction } from '../../../Utils';
 import { Doc, Opt } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
@@ -27,6 +27,7 @@ import { FormattedTextBox } from './formattedText/FormattedTextBox';
 import ReactLoading from 'react-loading';
 import { ContextMenu } from '../ContextMenu';
 import { ContextMenuProps } from '../ContextMenuItem';
+import { tickStep } from 'd3';
 
 @observer
 export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
@@ -37,7 +38,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     constructor(props: FieldViewProps) {
         super(props);
         makeObservable(this);
-        // this._isAnyChildContentActive = true;
     }
 
     @observable private _inputValue = '';
@@ -63,12 +63,19 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @computed get clipHeight() {
         return NumCast(this.layoutDoc[this.clipHeightKey], 200);
     }
+    get revealOp() {
+        return this.layoutDoc[`_${this._props.fieldKey}_revealOp`];
+    }
     get clipHeightKey() {
         return '_' + this._props.fieldKey + '_clipHeight';
     }
 
     componentDidMount() {
         this._props.setContentViewBox?.(this);
+        reaction(
+            () => this._props.isSelected(),
+            selected => !selected && (this.childActive = false)
+        );
     }
     protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
         this._disposers[disposerId]?.();
@@ -98,7 +105,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 emptyFunction,
                 action((moveEv, doubleTap) => {
                     if (doubleTap) {
-                        this._isAnyChildContentActive = true;
+                        this.childActive = true;
                         if (!this.dataDoc[this.fieldKey + '_1'] && !this.dataDoc[this.fieldKey]) this.dataDoc[this.fieldKey + '_1'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
                         if (!this.dataDoc[this.fieldKey + '_2'] && !this.dataDoc[this.fieldKey + '_alternate']) this.dataDoc[this.fieldKey + '_2'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
                     }
@@ -106,7 +113,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 false,
                 undefined,
                 action(() => {
-                    if (this._isAnyChildContentActive) return;
+                    if (this.childActive) return;
                     this._animating = 'all 200ms';
                     // on click, animate slider movement to the targetWidth
                     this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
@@ -247,7 +254,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     hoverFlip = (side: string | undefined) => {
         if (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'hover') this.layoutDoc[`_${this._props.fieldKey}_usePath`] = side;
     };
-
     /**
      * Creates the button used to flip the flashcards.
      */
@@ -259,7 +265,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     className="formattedTextBox-alternateButton"
                     onPointerDown={e =>
                         setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => {
-                            console.log(this.layoutDoc[`_${this._props.fieldKey}_revealOp`]);
                             if (!this.layoutDoc[`_${this._props.fieldKey}_revealOp`] || this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'flip') {
                                 this.flipFlashcard();
 
@@ -271,6 +276,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     style={{
                         background: usepath === 'alternate' ? 'white' : 'black',
                         color: usepath === 'alternate' ? 'black' : 'white',
+                        display: 'inline-block',
                     }}>
                     <div key="alternate" className="formattedTextBox-flip">
                         <FontAwesomeIcon icon="turn-up" size="1x" />
@@ -280,6 +286,37 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         );
     }
 
+    @computed get flashcardMenu() {
+        return (
+            <div>
+                <Tooltip
+                    title={
+                        this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? (
+                            <div className="dash-tooltip">Flip to front side to use GPT</div>
+                        ) : (
+                            <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard</div>
+                        )
+                    }>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '55px', cursor: 'pointer' }} onPointerDown={e => (!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? this.askGPT(GPTCallType.CHATCARD) : null)}>
+                        <FontAwesomeIcon icon="lightbulb" size="xl" />
+                    </div>
+                </Tooltip>
+                <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
+                    <div
+                        style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }}
+                        onClick={e => (this.revealOp === 'hover' ? (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip') : (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover'))}>
+                        <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="layer-group" size="xl" />
+                    </div>
+                </Tooltip>
+                {this.overlayAlternateIcon}
+            </div>
+        );
+    }
+
+    @action activateContent = () => {
+        this.childActive = true;
+    };
+
     @action handleRenderGPTClick = () => {
         // Call the GPT model and get the output
         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = 'alternate';
@@ -320,8 +357,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
         const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
         this._loading = true;
+        const doc = DocCast(this.dataDoc[this.props.fieldKey + '_0']);
         if (callType == GPTCallType.CHATCARD) {
-            DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = '';
+            if (StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '') {
+                this._loading = false;
+                return;
+            }
             this.flipFlashcard();
         }
         try {
@@ -330,7 +371,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 console.error('GPT call failed');
                 return;
             }
-            this.animateRes(0, res, callType);
+            // this.animateRes(0, res, callType);
+            if (callType == GPTCallType.CHATCARD) {
+                DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
+                // this.flipFlashcard();
+            }
+            if (callType == GPTCallType.QUIZ) this._outputValue = res;
+            // DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
             // this._outputValue = res;
             console.log(res);
         } catch (err) {
@@ -341,10 +388,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     layoutWidth = () => NumCast(this.layoutDoc.width, 200);
     layoutHeight = () => NumCast(this.layoutDoc.height, 200);
 
-    specificMenu = (): void => {
-        const cm = ContextMenu.Instance;
-        cm.addItem({ description: 'Create an Answer on the Back', event: () => this.askGPT(GPTCallType.CHATCARD), icon: 'pencil' });
-    };
+    // specificMenu = (): void => {
+    //     const cm = ContextMenu.Instance;
+    //     cm.addItem({ description: 'Create an Answer on the Back', event: () => this.askGPT(GPTCallType.CHATCARD), icon: 'pencil' });
+    // };
+    @observable childActive = false;
 
     render() {
         const clearButton = (which: string) => (
@@ -378,12 +426,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         removeDocument={whichSlot.endsWith('1') ? this.remDoc1 : this.remDoc2}
                         NativeWidth={this.layoutWidth}
                         NativeHeight={this.layoutHeight}
-                        isContentActive={emptyFunction}
+                        isContentActive={() => this.childActive}
                         isDocumentActive={returnFalse}
+                        dontSelect={returnTrue}
                         whenChildContentsActiveChanged={this.whenChildContentsActiveChanged}
-                        styleProvider={this._isAnyChildContentActive ? this._props.styleProvider : this.docStyleProvider}
+                        styleProvider={this.childActive ? this._props.styleProvider : this.docStyleProvider}
                         hideLinkButton
-                        pointerEvents={this._isAnyChildContentActive ? undefined : returnNone}
+                        pointerEvents={this.childActive ? undefined : returnNone}
                     />
                     <div style={{ position: 'absolute', top: '-5px', left: '2px' }}>{layoutString ? null : clearButton(whichSlot)}</div>
                 </> // placeholder image if doc is missingleft: `${NumCast(this.layoutDoc.width, 200) - 33}px`
@@ -394,7 +443,15 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             );
         };
         const displayBox = (which: string, index: number, cover: number) => (
-            <div className={`${index === 0 ? 'before' : 'after'}Box-cont`} key={which} style={{ width: this._props.PanelWidth() }} onPointerDown={e => this.registerSliding(e, cover)} ref={ele => this.createDropTarget(ele, which, index)}>
+            <div
+                className={`${index === 0 ? 'before' : 'after'}Box-cont`}
+                key={which}
+                style={{ width: this._props.PanelWidth() }}
+                onPointerDown={e => {
+                    this.registerSliding(e, cover);
+                    this.activateContent();
+                }}
+                ref={ele => this.createDropTarget(ele, which, index)}>
                 {displayDoc(which)}
             </div>
         );
@@ -431,6 +488,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             <textarea
                                 value={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._outputValue : this._inputValue}
                                 onChange={this.handleInputChange}
+                                onScroll={e => e.stopPropagation()}
                                 readOnly={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate'}></textarea>
 
                             {this._loading ? (
@@ -457,7 +515,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             return (
                 <div
                     className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
-                    onContextMenu={this.specificMenu}
+                    // onContextMenu={this.specificMenu}
                     style={{ display: 'flex', flexDirection: 'column' }}
                     onMouseEnter={() => {
                         this.hoverFlip('alternate');
@@ -473,7 +531,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             <ReactLoading type="spin" height={30} width={30} color={'blue'} />
                         </div>
                     ) : null}
-                    {this.overlayAlternateIcon}
+                    {this.flashcardMenu}
+                    {/* {this.overlayAlternateIcon} */}
                 </div>
             );
         }
@@ -491,7 +550,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         left: `calc(${this.clipWidth + '%'} - 0.5px)`,
                         cursor: this.clipWidth < 5 ? 'e-resize' : this.clipWidth / 100 > (this._props.PanelWidth() - 5) / this._props.PanelWidth() ? 'w-resize' : undefined,
                     }}
-                    onPointerDown={e => !this._isAnyChildContentActive && this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
+                    onPointerDown={e => !this.childActive && this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
                 >
                     <div className="slide-handle" />
                 </div>
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index a25249eac..2f3357791 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -503,6 +503,7 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
     };
 
     onContextMenu = (e?: React.MouseEvent, pageX?: number, pageY?: number) => {
+        if (this._props.dontSelect?.()) return;
         if (e && this.layoutDoc.layout_hideContextMenu && Doc.noviceMode) {
             e.preventDefault();
             e.stopPropagation();
@@ -1378,7 +1379,7 @@ export class DocumentView extends DocComponent<DocumentViewProps>() {
     screenToLocalScale = () => this._props.ScreenToLocalTransform().Scale;
     isSelected = () => this.IsSelected;
     select = (extendSelection: boolean, focusSelection?: boolean) => {
-        DocumentView.SelectView(this, extendSelection);
+        if (!this._props.dontSelect?.()) DocumentView.SelectView(this, extendSelection);
         if (focusSelection) {
             DocumentView.showDocument(this.Document, {
                 willZoomCentered: true,
diff --git a/src/client/views/nodes/FieldView.tsx b/src/client/views/nodes/FieldView.tsx
index 818d26956..138f00492 100644
--- a/src/client/views/nodes/FieldView.tsx
+++ b/src/client/views/nodes/FieldView.tsx
@@ -50,6 +50,7 @@ export interface FieldViewSharedProps {
     PanelHeight: () => number;
     isDocumentActive?: () => boolean | undefined; // whether a document should handle pointer events
     isContentActive: () => boolean | undefined; // whether document contents should handle pointer events
+    dontSelect: () => boolean | undefined;
     childFilters: () => string[];
     childFiltersByRanges: () => string[];
     styleProvider: Opt<StyleProviderFuncType>;
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.scss b/src/client/views/nodes/formattedText/FormattedTextBox.scss
index 8ac8c2c5f..54643b4a5 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.scss
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.scss
@@ -89,14 +89,14 @@ audiotag:hover {
     right: 0;
     bottom: 0;
     width: 15;
-    height: 15;
+    height: 22;
     cursor: default;
 }
 .formattedTextBox-flip {
     align-items: center;
     position: absolute;
-    right: 3px;
-    bottom: 1px;
+    right: 2px;
+    bottom: 4px;
 }
 
 .formattedTextBox-outer {
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 82133a06e..3e2befb5f 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -816,6 +816,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
     isTargetToggler = (anchor: Doc) => BoolCast(anchor.followLinkToggle);
 
     specificContextMenu = (e: React.MouseEvent): void => {
+        if (this._props.dontSelect?.()) return;
         const cm = ContextMenu.Instance;
 
         let target = e.target as any; // hrefs are stored on the database of the <a> node that wraps the hyerlink <span>
-- 
cgit v1.2.3-70-g09d2


From d1b7e29761fa0395263bff3521f148170659ff62 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Fri, 7 Jun 2024 21:48:34 -0400
Subject: Flashcard menus

---
 src/client/views/MainView.tsx                      |  1 +
 .../views/collections/CollectionCarouselView.scss  | 42 ++++++++++++-
 .../views/collections/CollectionCarouselView.tsx   | 53 ++++++++++++----
 src/client/views/nodes/ComparisonBox.tsx           | 73 +++++++++++++++++-----
 src/client/views/nodes/DocumentView.tsx            | 14 ++---
 5 files changed, 147 insertions(+), 36 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index 31d88fb87..541b15006 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -548,6 +548,7 @@ export class MainView extends ObservableReactComponent<{}> {
                 fa.faRobot,
                 fa.faSatellite,
                 fa.faStar,
+                fa.faFilePen,
             ]
         );
     }
diff --git a/src/client/views/collections/CollectionCarouselView.scss b/src/client/views/collections/CollectionCarouselView.scss
index 975b352cf..c4679e888 100644
--- a/src/client/views/collections/CollectionCarouselView.scss
+++ b/src/client/views/collections/CollectionCarouselView.scss
@@ -50,7 +50,7 @@
 }
 .carouselView-star {
     top: 0;
-    right: 20;
+    left: 0;
 }
 .carouselView-remove {
     top: 80%;
@@ -60,6 +60,46 @@
     top: 80%;
     right: 52%;
 }
+.carouselView-quiz {
+    position: absolute;
+    display: flex;
+    top: 5px;
+    right: 8px;
+    &:hover {
+        color: white;
+    }
+}
+
+.carouselView-practice {
+    position: absolute;
+    display: flex;
+    top: 22px;
+    right: 8px;
+    &:hover {
+        color: white;
+    }
+}
+.carouselView-starFilter {
+    position: absolute;
+    display: flex;
+    top: 40px;
+    right: 7px;
+    &:hover {
+        color: white;
+    }
+}
+
+.carouselView-menu {
+    position: absolute;
+    display: flex;
+    top: 2px;
+    right: 2px;
+    width: 30;
+    height: 60;
+    border-radius: 5px;
+    color: rgba(255, 255, 255, 0.5);
+    background: rgba(0, 0, 0, 0.1);
+}
 
 .carouselView-back:hover,
 .carouselView-fwd:hover {
diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index 53d14e6e0..8da808065 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -19,6 +19,7 @@ import { FieldViewProps } from '../nodes/FieldView';
 import { FormattedTextBox } from '../nodes/formattedText/FormattedTextBox';
 import './CollectionCarouselView.scss';
 import { CollectionSubView } from './CollectionSubView';
+import { Tooltip } from '@mui/material';
 
 enum cardMode {
     PRACTICE = 'practice',
@@ -143,22 +144,26 @@ export class CollectionCarouselView extends CollectionSubView() {
     captionWidth = () => this._props.PanelWidth() - 2 * this.marginX;
     setFilterMode = (mode: cardMode) => {
         this.layoutDoc.filterOp = mode;
+        console.log('MODE' + mode);
+        console.log('FILT' + this.layoutDoc.filterOp + ';');
         if (mode == cardMode.STAR) this.move(1);
-        if (mode == cardMode.QUIZ) this.carouselItems?.map(doc => (doc.layout[this.sideField] = undefined));
+        if (mode == cardMode.QUIZ) {
+            this.carouselItems?.map(doc => (doc.layout[this.sideField] = undefined));
+        }
         this.carouselItems?.map(doc => (doc.layout[this.practiceField] = undefined));
     };
-    specificMenu = (): void => {
-        const cm = ContextMenu.Instance;
+    // specificMenu = (): void => {
+    //     const cm = ContextMenu.Instance;
 
-        const revealOptions = cm.findByDescription('Filter Flashcards');
-        const revealItems: ContextMenuProps[] = revealOptions && 'subitems' in revealOptions ? revealOptions.subitems : [];
-        revealItems.push({description: 'All',           event: () => {this.setFilterMode(cardMode.ALL);},         icon: 'layer-group',}); // prettier-ignore
-        revealItems.push({description: 'Star',          event: () => {this.setFilterMode(cardMode.STAR);},     icon: 'star',}); // prettier-ignore
-        revealItems.push({description: 'Practice Mode', event: () => {this.setFilterMode(cardMode.PRACTICE);}, icon: 'check',}); // prettier-ignore
-        cm.addItem({description: 'Quiz Cards',    event: () => {this.setFilterMode(cardMode.QUIZ);},     icon: 'pencil',}); // prettier-ignore
-        !revealOptions && cm.addItem({ description: 'Filter Flashcards', addDivider: false, noexpand: true, subitems: revealItems, icon: 'layer-group' });
-        //cm.addItem({description: 'Quiz Cards',    event: () => {this.layoutDoc.filterOp = cardMode.QUIZ; this.clearContent()});
-    };
+    //     const revealOptions = cm.findByDescription('Filter Flashcards');
+    //     const revealItems: ContextMenuProps[] = revealOptions && 'subitems' in revealOptions ? revealOptions.subitems : [];
+    //     revealItems.push({description: 'All',           event: () => {this.setFilterMode(cardMode.ALL);},         icon: 'layer-group',}); // prettier-ignore
+    //     revealItems.push({description: 'Star',          event: () => {this.setFilterMode(cardMode.STAR);},     icon: 'star',}); // prettier-ignore
+    //     revealItems.push({description: 'Practice Mode', event: () => {this.setFilterMode(cardMode.PRACTICE);}, icon: 'check',}); // prettier-ignore
+    //     cm.addItem({description: 'Quiz Cards',    event: () => {this.setFilterMode(cardMode.QUIZ);},     icon: 'pencil',}); // prettier-ignore
+    //     !revealOptions && cm.addItem({ description: 'Filter Flashcards', addDivider: false, noexpand: true, subitems: revealItems, icon: 'layer-group' });
+    //     //cm.addItem({description: 'Quiz Cards',    event: () => {this.layoutDoc.filterOp = cardMode.QUIZ; this.clearContent()});
+    // };
     @computed get content() {
         const index = NumCast(this.layoutDoc._carousel_index);
         const curDoc = this.carouselItems?.[index];
@@ -226,6 +231,28 @@ export class CollectionCarouselView extends CollectionSubView() {
         );
     }
 
+    @computed get menu() {
+        return (
+            <div className="carouselView-menu">
+                <Tooltip title="Practice flashcards using GPT">
+                    <div key="back" className="carouselView-quiz" onClick={e => (this.layoutDoc.filterOp === cardMode.QUIZ ? this.setFilterMode(cardMode.ALL) : this.setFilterMode(cardMode.QUIZ))}>
+                        <FontAwesomeIcon icon="file-pen" color={this.layoutDoc.filterOp === cardMode.QUIZ ? 'white' : 'light gray'} size="1x" />
+                    </div>
+                </Tooltip>
+                <Tooltip title={this.layoutDoc.filterOp === cardMode.PRACTICE ? 'Exit practice mode' : 'Practice flashcards manually'}>
+                    <div key="back" className="carouselView-practice" onClick={e => (this.layoutDoc.filterOp === cardMode.PRACTICE ? this.setFilterMode(cardMode.ALL) : this.setFilterMode(cardMode.PRACTICE))}>
+                        <FontAwesomeIcon icon="check" color={this.layoutDoc.filterOp === cardMode.PRACTICE ? 'white' : 'light gray'} size="1x" />
+                    </div>
+                </Tooltip>
+                <Tooltip title={this.layoutDoc.filterOp === cardMode.STAR ? 'Show all cards' : 'Show only starred cards'}>
+                    <div key="back" className="carouselView-starFilter" onClick={e => (!this.layoutDoc.filterOp ? this.setFilterMode(cardMode.ALL) : this.setFilterMode(cardMode.STAR))}>
+                        <FontAwesomeIcon icon="filter" color={this.layoutDoc.filterOp === cardMode.STAR || !this.layoutDoc.filterOp ? 'white' : 'light gray'} size="1x" />
+                    </div>
+                </Tooltip>
+            </div>
+        );
+    }
+
     render() {
         return (
             <div
@@ -250,6 +277,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                 <p
                     style={{
                         color: 'red',
+                        fontWeight: 'bold',
                         zIndex: '999',
                         position: 'relative',
                         left: '10px',
@@ -263,6 +291,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                     }}>
                     Recently missed!
                 </p>
+                {this.menu}
                 {this.Document._chromeHidden || !this.layoutDoc.filterOp ? null : this.buttons}
             </div>
         );
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index f844892c5..084723d56 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -45,6 +45,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @observable private _loading = false;
     @observable private _errorMessage = '';
     @observable private _outputMessage = '';
+    @observable private _isEmpty = false;
+
+    public addToCollection: ((doc: Doc | Doc[], annotationKey?: string | undefined) => boolean) | undefined;
 
     @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
         this._inputValue = e.target.value;
@@ -162,23 +165,29 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     };
 
     clearDoc = undoable((fieldKey: string) => {
-        delete this.dataDoc[fieldKey];
-        this.dataDoc[fieldKey] = 'empty';
+        // delete this.dataDoc[fieldKey];
+        this.dataDoc[fieldKey] = undefined;
+        this._isEmpty = true;
+        // this.dataDoc[fieldKey] = 'empty';
+        console.log('HERE' + fieldKey + ';');
     }, 'clear doc');
     // clearDoc = (fieldKey: string) => delete this.dataDoc[fieldKey];
 
     moveDoc = (doc: Doc, addDocument: (document: Doc | Doc[]) => boolean, which: string) => this.remDoc(doc, which) && addDocument(doc);
     addDoc = (doc: Doc, which: string) => {
-        if (this.dataDoc[which] && this.dataDoc[which] !== 'empty') return false;
+        if (this.dataDoc[which] && !this._isEmpty) return false;
         this.dataDoc[which] = doc;
         return true;
     };
     remDoc = (doc: Doc, which: string) => {
         if (this.dataDoc[which] === doc) {
-            this.dataDoc[which] = 'empty';
+            this._isEmpty = true;
+            // this.dataDoc[which] = 'empty';
+            console.log('HEREEEE');
             this.dataDoc[which] = undefined;
             return true;
         }
+        console.log('FALSE');
         return false;
     };
 
@@ -268,8 +277,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             if (!this.layoutDoc[`_${this._props.fieldKey}_revealOp`] || this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'flip') {
                                 this.flipFlashcard();
 
-                                console.log('Print Front of cards: ' + (RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text ?? ''));
-                                console.log('Print Back of cards: ' + (RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text ?? ''));
+                                // console.log('Print Front of cards: ' + (RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text ?? ''));
+                                // console.log('Print Back of cards: ' + (RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text ?? ''));
                             }
                         })
                     }
@@ -297,10 +306,31 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard</div>
                         )
                     }>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '55px', cursor: 'pointer' }} onPointerDown={e => (!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? this.askGPT(GPTCallType.CHATCARD) : null)}>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '56px', cursor: 'pointer' }} onPointerDown={e => (!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? this.askGPT(GPTCallType.CHATCARD) : null)}>
                         <FontAwesomeIcon icon="lightbulb" size="xl" />
                     </div>
                 </Tooltip>
+                <Tooltip title={<div>Create a flashcard pile</div>}>
+                    <div
+                        style={{ position: 'absolute', bottom: '3px', right: '80px', cursor: 'pointer' }}
+                        onPointerDown={e => {
+                            const collectionArr: Doc[] = [];
+                            collectionArr.push(this.Document);
+                            const newCol = Docs.Create.CarouselDocument(collectionArr, {
+                                _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250),
+                                _height: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 200),
+                                _layout_fitWidth: false,
+                                _layout_autoHeight: true,
+                            });
+                            newCol['x'] = e.clientX - 820;
+                            newCol['y'] = e.clientY - 640;
+                            this._props.addDocument?.(newCol);
+                            this._props.removeDocument?.(this.Document);
+                            this.Document.embedContainer = newCol;
+                        }}>
+                        <FontAwesomeIcon icon="folder-plus" size="xl" />
+                    </div>
+                </Tooltip>
                 <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
                     <div
                         style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }}
@@ -308,11 +338,18 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="layer-group" size="xl" />
                     </div>
                 </Tooltip>
-                {this.overlayAlternateIcon}
+                {/* <Tooltip title={<div className="dash-tooltip">Remove this side of the flashcard</div>}>
+                    <div
+                        style={{ position: 'absolute', bottom: '3px', right: '80px', cursor: 'pointer' }}
+                        onPointerDown={e => this.closeDown(e, this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._props.fieldKey + '_1' : this._props.fieldKey + '_0')}>
+                        <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="trash-can" size="xl" />
+                    </div>
+                </Tooltip> */}
+                {/* {this.overlayAlternateIcon} */}
             </div>
         );
     }
-
+    // this.closeDown(e, this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this.fieldKey + '_0' : this.fieldKey + '_1')}
     @action activateContent = () => {
         this.childActive = true;
     };
@@ -434,7 +471,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         hideLinkButton
                         pointerEvents={this.childActive ? undefined : returnNone}
                     />
-                    <div style={{ position: 'absolute', top: '-5px', left: '2px' }}>{layoutString ? null : clearButton(whichSlot)}</div>
+                    {/* <div style={{ position: 'absolute', top: '-5px', left: '2px' }}>{layoutString ? null : clearButton(whichSlot)}</div> */}
                 </> // placeholder image if doc is missingleft: `${NumCast(this.layoutDoc.width, 200) - 33}px`
             ) : (
                 <div className="placeholder">
@@ -452,7 +489,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     this.activateContent();
                 }}
                 ref={ele => this.createDropTarget(ele, which, index)}>
-                {displayDoc(which)}
+                {!this._isEmpty ? displayDoc(which) : null}
+                {/* {this.dataDoc[this.fieldKey + '_0'] !== 'empty' ? displayDoc(which) : null} */}
             </div>
         );
 
@@ -460,7 +498,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             const side = this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 1 : 0;
 
             // add text box to each side when comparison box is first created
-            if (!(this.dataDoc[this.fieldKey + '_0'] || this.dataDoc[this.fieldKey + '_0'] === 'empty')) {
+            // (!this.dataDoc[this.fieldKey + '_0'] && this.dataDoc[this._props.fieldKey + '_0'] !== 'empty')
+            if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
                 const dataSplit = StrCast(this.dataDoc.data).split('Answer');
                 const newDoc = Docs.Create.TextDocument(dataSplit[1]);
                 // if there is text from the pdf ai cards, put the question on the front side.
@@ -468,7 +507,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 newDoc[DocData].text = dataSplit[1];
                 this.addDoc(newDoc, this.fieldKey + '_0');
             }
-            if (!(this.dataDoc[this.fieldKey + '_1'] || this.dataDoc[this.fieldKey + '_1'] === 'empty')) {
+            if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
                 const dataSplit = StrCast(this.dataDoc.data).split('Answer');
                 const newDoc = Docs.Create.TextDocument(dataSplit[0]);
                 // if there is text from the pdf ai cards, put the answer on the alternate side.
@@ -478,6 +517,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             }
 
             // render the QuizCards
+            console.log('GERE' + DocCast(this.Document.embedContainer).filterOp);
             if (DocCast(this.Document.embedContainer) && DocCast(this.Document.embedContainer).filterOp === 'quiz') {
                 const text = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
                 return (
@@ -489,6 +529,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                 value={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._outputValue : this._inputValue}
                                 onChange={this.handleInputChange}
                                 onScroll={e => e.stopPropagation()}
+                                placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
                                 readOnly={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate'}></textarea>
 
                             {this._loading ? (
@@ -516,7 +557,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 <div
                     className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
                     // onContextMenu={this.specificMenu}
-                    style={{ display: 'flex', flexDirection: 'column' }}
+                    style={{ display: 'flex', flexDirection: 'column', overflow: 'hidden' }}
                     onMouseEnter={() => {
                         this.hoverFlip('alternate');
                     }}
@@ -531,8 +572,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             <ReactLoading type="spin" height={30} width={30} color={'blue'} />
                         </div>
                     ) : null}
-                    {this.flashcardMenu}
-                    {/* {this.overlayAlternateIcon} */}
+                    {this._props.isContentActive() ? this.flashcardMenu : null}
+                    {this.overlayAlternateIcon}
                 </div>
             );
         }
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index 2f3357791..d4c31a5b3 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -566,13 +566,13 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
             !appearance && appearanceItems.length && cm.addItem({ description: 'Appearance...', subitems: appearanceItems, icon: 'compass' });
 
             // creates menu for the user to select how to reveal the flashcards
-            if (this.Document._layout_isFlashcard) {
-                const revealOptions = cm.findByDescription('Reveal Options');
-                const revealItems: ContextMenuProps[] = revealOptions && 'subitems' in revealOptions ? revealOptions.subitems : [];
-                revealItems.push({ description: 'Hover', event: () => { this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover'; }, icon: 'hand-point-up' }); // prettier-ignore
-                revealItems.push({ description: 'Flip', event: () => { this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip'; }, icon: 'rotate' }); // prettier-ignore
-                !revealOptions && cm.addItem({ description: 'Reveal Options', addDivider: false, noexpand: true, subitems: revealItems, icon: 'layer-group' });
-            }
+            // if (this.Document._layout_isFlashcard) {
+            //     const revealOptions = cm.findByDescription('Reveal Options');
+            //     const revealItems: ContextMenuProps[] = revealOptions && 'subitems' in revealOptions ? revealOptions.subitems : [];
+            //     revealItems.push({ description: 'Hover', event: () => { this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover'; }, icon: 'hand-point-up' }); // prettier-ignore
+            //     revealItems.push({ description: 'Flip', event: () => { this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip'; }, icon: 'rotate' }); // prettier-ignore
+            //     !revealOptions && cm.addItem({ description: 'Reveal Options', addDivider: false, noexpand: true, subitems: revealItems, icon: 'layer-group' });
+            // }
 
             if (this._props.bringToFront) {
                 const zorders = cm.findByDescription('ZOrder...');
-- 
cgit v1.2.3-70-g09d2


From ab162dc8027508253accdbc4259646af7f4b9b0a Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Sun, 9 Jun 2024 00:01:22 -0400
Subject: filter fixed

---
 .../views/collections/CollectionCarouselView.tsx   | 207 +++++++++++++++------
 src/client/views/nodes/ComparisonBox.tsx           |   4 +-
 2 files changed, 153 insertions(+), 58 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index 8da808065..979f7ea2a 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -2,7 +2,7 @@
 /* eslint-disable jsx-a11y/click-events-have-key-events */
 /* eslint-disable react/jsx-props-no-spreading */
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { computed, makeObservable, observable } from 'mobx';
+import { action, computed, makeObservable, observable } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import { StopEvent, returnFalse, returnOne, returnTrue, returnZero } from '../../../ClientUtils';
@@ -22,11 +22,16 @@ import { CollectionSubView } from './CollectionSubView';
 import { Tooltip } from '@mui/material';
 
 enum cardMode {
-    PRACTICE = 'practice',
+    // PRACTICE = 'practice',
     STAR = 'star',
-    QUIZ = 'quiz',
+    // QUIZ = 'quiz',
     ALL = 'all',
 }
+enum practiceMode {
+    PRACTICE = 'practice',
+    QUIZ = 'quiz',
+    NORMAL = 'normal',
+}
 enum practiceVal {
     MISSED = 'missed',
     CORRECT = 'correct',
@@ -34,7 +39,8 @@ enum practiceVal {
 @observer
 export class CollectionCarouselView extends CollectionSubView() {
     private _dropDisposer?: DragManager.DragDropDisposer;
-    @observable private _message = 'Drag a document';
+    @observable private _practiceMessage: string | undefined;
+    @observable private _filterMessage: string | undefined;
     get practiceField() { return this.fieldKey + "_practice"; } // prettier-ignore
     get sideField() { return "_" + this.fieldKey + "_usePath"; } // prettier-ignore
     get starField()     { return this.fieldKey + "_star"; } // prettier-ignore
@@ -43,6 +49,7 @@ export class CollectionCarouselView extends CollectionSubView() {
         super(props);
         makeObservable(this);
         this.layoutDoc.filterOp = cardMode.ALL;
+        this.layoutDoc.practiceMode = practiceMode.NORMAL;
         this.layoutDoc._carousel_index = 0;
     }
 
@@ -64,6 +71,13 @@ export class CollectionCarouselView extends CollectionSubView() {
         return NumCast(this.layoutDoc.caption_xMargin, 50);
     }
 
+    @action setPracticeMessage = (mes: string | undefined) => {
+        this._practiceMessage = mes;
+    };
+    @action setFilterMessage = (mes: string | undefined) => {
+        this._filterMessage = mes;
+    };
+
     move = (dir: number) => {
         const moveToCardWithField = (match: (doc: Doc) => boolean): boolean => {
             let startInd = (NumCast(this.layoutDoc._carousel_index) + dir) % this.carouselItems.length;
@@ -76,26 +90,69 @@ export class CollectionCarouselView extends CollectionSubView() {
             }
             return match(this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)].layout);
         };
-        switch (StrCast(this.layoutDoc.filterOp)) {
-            case cardMode.STAR:  // go to a flashcard that is starred, skip the ones that aren't
-                if (!moveToCardWithField((doc: Doc) => !!doc[this.starField])) {
-                    // this.layoutDoc._carousel_index
-                    this.layoutDoc.filterOp = undefined;  // if there aren't any starred, show all cards
-                    this._message = 'No starred items. Return to All to star documents.'
-                }
-                break;
-            case cardMode.PRACTICE: // go to a new index that is missed, skip the ones that are correct
-                if (!moveToCardWithField((doc: Doc) => doc[this.practiceField] !== practiceVal.CORRECT)) {
-                    this.layoutDoc.filterOp = undefined;  // if all of the cards are correct, show all cards and exit practice mode
-                    this._message = 'Finished! Return to All.'
-                    this.carouselItems.forEach(item => { // reset all the practice values
-                        item.layout[this.practiceField] = undefined;
-                    });
-                    // this.layoutDoc._carousel_index = -1;
-                }
-                break;
-            default: moveToCardWithField(returnTrue);
-        } // prettier-ignore
+
+        if (this.layoutDoc.practiceMode === practiceMode.PRACTICE && this.layoutDoc.filterOp !== cardMode.STAR) {
+            if (!moveToCardWithField((doc: Doc) => doc[this.practiceField] !== practiceVal.CORRECT)) {
+                //this.layoutDoc.filterOp = undefined;  // if all of the cards are correct, show all cards and exit practice mode
+                this._practiceMessage = 'Finished! Return to All - BUTTONS??.';
+                this.carouselItems.forEach(item => {
+                    // reset all the practice values
+                    item.layout[this.practiceField] = undefined;
+                });
+                // this.layoutDoc._carousel_index = -1;
+            }
+        } else if (this.layoutDoc.practiceMode !== practiceMode.PRACTICE && this.layoutDoc.filterOp === cardMode.STAR) {
+            if (!moveToCardWithField((doc: Doc) => !!doc[this.starField])) {
+                //this.layoutDoc.filterOp = undefined;  // if there aren't any starred, show all cards
+                this._filterMessage = 'No starred items. Unselect this view to see all flashcards and star them.';
+            }
+        } else if (this.layoutDoc.practiceMode === practiceMode.PRACTICE && this.layoutDoc.filterOp === cardMode.STAR) {
+            if (!moveToCardWithField((doc: Doc) => doc[this.practiceField] !== practiceVal.CORRECT && doc[this.starField] === true)) {
+                this._practiceMessage = 'New message.';
+            }
+        } else {
+            moveToCardWithField(returnTrue);
+        }
+
+        // if (this.layoutDoc.practiceMode === practiceMode.PRACTICE && this.layoutDoc.filterOp === cardMode.STAR) {
+        //     if (!moveToCardWithField((doc: Doc) => doc[this.practiceField] !== practiceVal.CORRECT) && !moveToCardWithField((doc: Doc) => doc[this.starField] === true)) {
+        //         this._practiceMessage = 'New message.';
+        //     } else moveToCardWithField(returnTrue);
+        //     return;
+        // }
+        // switch (StrCast(this.layoutDoc.practiceMode)) {
+        //     // case practiceMode.QUIZ:  // go to a flashcard that is starred, skip the ones that aren't
+        //     //     if (!moveToCardWithField((doc: Doc) => !!doc[this.starField])) {
+        //     //         // this.layoutDoc._carousel_index
+        //     //         //this.layoutDoc.filterOp = undefined;  // if there aren't any starred, show all cards
+        //     //         this._message = 'No starred items. Unselect this view to see all flashcards and star them.'
+        //     //     }
+        //     //     break;
+        //     case practiceMode.PRACTICE: // go to a new index that is missed, skip the ones that are correct
+        //         if (!moveToCardWithField((doc: Doc) => doc[this.practiceField] !== practiceVal.CORRECT)) {
+        //             //this.layoutDoc.filterOp = undefined;  // if all of the cards are correct, show all cards and exit practice mode
+        //             this._practiceMessage = 'Finished! Return to All - BUTTONS??.'
+        //             this.carouselItems.forEach(item => { // reset all the practice values
+        //                 item.layout[this.practiceField] = undefined;
+        //             });
+        //             // this.layoutDoc._carousel_index = -1;
+        //         }
+        //         break;
+        //     default: moveToCardWithField(returnTrue);
+
+        // } // prettier-ignore
+
+        // switch (StrCast(this.layoutDoc.filterOp)) {
+        //     case cardMode.STAR: // go to a flashcard that is starred, skip the ones that aren't
+        //         if (!moveToCardWithField((doc: Doc) => !!doc[this.starField])) {
+        //             //this.layoutDoc.filterOp = undefined;  // if there aren't any starred, show all cards
+        //             this._filterMessage = 'No starred items. Unselect this view to see all flashcards and star them.';
+        //         }
+        //         break;
+        //     default:
+        //         break;
+        //     // if (this.layoutDoc.practiceMode === practiceMode.PRACTICE) moveToCardWithField(returnTrue);
+        // }
     };
 
     /**
@@ -121,6 +178,7 @@ export class CollectionCarouselView extends CollectionSubView() {
         e.stopPropagation();
         const curDoc = this.carouselItems[NumCast(this.layoutDoc._carousel_index)];
         curDoc.layout[this.starField] = curDoc.layout[this.starField] ? undefined : true;
+        // if (!curDoc.layout[this.starField]) this.move(1);
         // this.layoutDoc._carousel_index = undefined;
     };
 
@@ -142,16 +200,42 @@ export class CollectionCarouselView extends CollectionSubView() {
     onContentDoubleClick = () => ScriptCast(this.layoutDoc.onChildDoubleClick);
     onContentClick = () => ScriptCast(this.layoutDoc.onChildClick);
     captionWidth = () => this._props.PanelWidth() - 2 * this.marginX;
+    setPracticeMode = (mode: practiceMode) => {
+        this.layoutDoc.practiceMode = mode;
+        this.carouselItems?.map(doc => (doc.layout[this.practiceField] = undefined));
+        switch (mode) {
+            case practiceMode.QUIZ:
+                this.carouselItems?.map(doc => (doc.layout[this.sideField] = undefined));
+                break;
+            case practiceMode.NORMAL:
+                this.setPracticeMessage(undefined);
+                break;
+            default:
+                break;
+        }
+    };
     setFilterMode = (mode: cardMode) => {
         this.layoutDoc.filterOp = mode;
-        console.log('MODE' + mode);
-        console.log('FILT' + this.layoutDoc.filterOp + ';');
-        if (mode == cardMode.STAR) this.move(1);
-        if (mode == cardMode.QUIZ) {
-            this.carouselItems?.map(doc => (doc.layout[this.sideField] = undefined));
+        switch (mode) {
+            case cardMode.STAR:
+                this.move(1);
+                break;
+            default:
+                this.setFilterMessage(undefined);
         }
-        this.carouselItems?.map(doc => (doc.layout[this.practiceField] = undefined));
+
+        // if (mode === practiceMode.QUIZ) {
+        //     this.carouselItems?.map(doc => (doc.layout[this.sideField] = undefined));
+        //     this.layoutDoc.practiceMode = mode;
+        // }
+        // if (mode === practiceMode.PRACTICE) this.layoutDoc.practiceMode = mode;
+        // if (mode === practiceMode.NORMAL) {
+        //     this.layoutDoc.practiceMode = mode;
+        //     if (this.layoutDoc.filterOp === cardMode.STAR) this.setMessage('No starred items. Unselect this filter to star cards.');
+        // }
+        // this.carouselItems?.map(doc => (doc.layout[this.practiceField] = undefined));
     };
+
     // specificMenu = (): void => {
     //     const cm = ContextMenu.Instance;
 
@@ -221,32 +305,43 @@ export class CollectionCarouselView extends CollectionSubView() {
                 <div key="star" className="carouselView-star" onClick={this.star}>
                     <FontAwesomeIcon icon="star" color={this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)].layout[this.starField] ? 'yellow' : 'gray'} size="1x" />
                 </div>
-                <div key="remove" className="carouselView-remove" onClick={e => this.setPracticeVal(e, practiceVal.MISSED)} style={{ visibility: this.layoutDoc.filterOp === cardMode.PRACTICE ? 'visible' : 'hidden' }}>
-                    <FontAwesomeIcon icon="xmark" color="red" size="1x" />
-                </div>
-                <div key="check" className="carouselView-check" onClick={e => this.setPracticeVal(e, practiceVal.CORRECT)} style={{ visibility: this.layoutDoc.filterOp === cardMode.PRACTICE ? 'visible' : 'hidden' }}>
-                    <FontAwesomeIcon icon="check" color="green" size="1x" />
-                </div>
+                {this.layoutDoc.practiceMode === practiceMode.PRACTICE ? (
+                    <div>
+                        <div key="remove" className="carouselView-remove" onClick={e => this.setPracticeVal(e, practiceVal.MISSED)}>
+                            <FontAwesomeIcon icon="xmark" color="red" size="1x" />
+                        </div>
+                        <div key="check" className="carouselView-check" onClick={e => this.setPracticeVal(e, practiceVal.CORRECT)}>
+                            <FontAwesomeIcon icon="check" color="green" size="1x" />
+                        </div>
+                    </div>
+                ) : null}
             </>
         );
     }
 
+    togglePracticeMode = (mode: practiceMode) => {
+        if (mode === this.layoutDoc.practiceMode) this.setPracticeMode(practiceMode.NORMAL);
+        else this.setPracticeMode(mode);
+    };
+    toggleFilterMode = () => { this.layoutDoc.filterOp === cardMode.STAR ? this.setFilterMode(cardMode.ALL) : this.setFilterMode(cardMode.STAR)}; //prettier-ignore
+    setColor = (mode: practiceMode | cardMode, which: string) => { return which === mode ? 'white' : 'light gray'}; //prettier-ignore
+
     @computed get menu() {
         return (
             <div className="carouselView-menu">
                 <Tooltip title="Practice flashcards using GPT">
-                    <div key="back" className="carouselView-quiz" onClick={e => (this.layoutDoc.filterOp === cardMode.QUIZ ? this.setFilterMode(cardMode.ALL) : this.setFilterMode(cardMode.QUIZ))}>
-                        <FontAwesomeIcon icon="file-pen" color={this.layoutDoc.filterOp === cardMode.QUIZ ? 'white' : 'light gray'} size="1x" />
+                    <div key="back" className="carouselView-quiz" onClick={e => this.togglePracticeMode(practiceMode.QUIZ)}>
+                        <FontAwesomeIcon icon="file-pen" color={this.setColor(practiceMode.QUIZ, StrCast(this.layoutDoc.practiceMode))} size="1x" />
                     </div>
                 </Tooltip>
-                <Tooltip title={this.layoutDoc.filterOp === cardMode.PRACTICE ? 'Exit practice mode' : 'Practice flashcards manually'}>
-                    <div key="back" className="carouselView-practice" onClick={e => (this.layoutDoc.filterOp === cardMode.PRACTICE ? this.setFilterMode(cardMode.ALL) : this.setFilterMode(cardMode.PRACTICE))}>
-                        <FontAwesomeIcon icon="check" color={this.layoutDoc.filterOp === cardMode.PRACTICE ? 'white' : 'light gray'} size="1x" />
+                <Tooltip title={this.layoutDoc.practiceMode === practiceMode.PRACTICE ? 'Exit practice mode' : 'Practice flashcards manually'}>
+                    <div key="back" className="carouselView-practice" onClick={e => this.togglePracticeMode(practiceMode.PRACTICE)}>
+                        <FontAwesomeIcon icon="check" color={this.setColor(practiceMode.PRACTICE, StrCast(this.layoutDoc.practiceMode))} size="1x" />
                     </div>
                 </Tooltip>
                 <Tooltip title={this.layoutDoc.filterOp === cardMode.STAR ? 'Show all cards' : 'Show only starred cards'}>
-                    <div key="back" className="carouselView-starFilter" onClick={e => (!this.layoutDoc.filterOp ? this.setFilterMode(cardMode.ALL) : this.setFilterMode(cardMode.STAR))}>
-                        <FontAwesomeIcon icon="filter" color={this.layoutDoc.filterOp === cardMode.STAR || !this.layoutDoc.filterOp ? 'white' : 'light gray'} size="1x" />
+                    <div key="back" className="carouselView-starFilter" onClick={e => this.toggleFilterMode()}>
+                        <FontAwesomeIcon icon="filter" color={this.setColor(cardMode.STAR, StrCast(this.layoutDoc.filterOp))} size="1x" />
                     </div>
                 </Tooltip>
             </div>
@@ -258,22 +353,22 @@ export class CollectionCarouselView extends CollectionSubView() {
             <div
                 className="collectionCarouselView-outer"
                 ref={this.createDashEventsTarget}
-                onContextMenu={this.specificMenu}
+                // onContextMenu={this.specificMenu}
                 style={{
                     background: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.BackgroundColor),
                     color: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.Color),
                 }}>
-                {this.layoutDoc.filterOp ? this.content : <p className="message">{this._message}</p>}
+                {!this._practiceMessage && !this._filterMessage ? (
+                    this.content
+                ) : (
+                    <p className="message">
+                        {this._filterMessage}
+                        {'\n'}
+                        {this._practiceMessage}
+                    </p>
+                )}
                 {/* {(this.carouselItems?.filter(doc => doc.layout[this.practiceField] !== practiceVal.CORRECT)).length == 0 ? null : this.content} */}
-                {/* Displays a message to the user to add more flashcards if they are in practice mode and no flashcards are there. */}
-                <p
-                    className="message"
-                    style={{
-                        display: !this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)] && this.layoutDoc.filterOp === cardMode.PRACTICE ? 'flex' : 'none',
-                    }}>
-                    Add flashcards
-                </p>
-                {/* Displays a message to the user that a flashcard was recently missed if they had previously gotten it wrong. */}
+                {!this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)] && this.layoutDoc.practiceMode === practiceMode.PRACTICE ? <p className="message">Add flashcards </p> : null}
                 <p
                     style={{
                         color: 'red',
@@ -284,7 +379,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                         top: '10px',
                         width: '10px',
                         display: this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)]
-                            ? this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)].layout[this.practiceField] === practiceVal.MISSED && this.layoutDoc.filterOp === cardMode.PRACTICE
+                            ? this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)].layout[this.practiceField] === practiceVal.MISSED && this.layoutDoc.practiceMode === practiceMode.PRACTICE && !this._practiceMessage
                                 ? 'block'
                                 : 'none'
                             : 'none',
@@ -292,7 +387,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                     Recently missed!
                 </p>
                 {this.menu}
-                {this.Document._chromeHidden || !this.layoutDoc.filterOp ? null : this.buttons}
+                {this.Document._chromeHidden || (!this._filterMessage && !this._practiceMessage) ? this.buttons : null}
             </div>
         );
     }
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 084723d56..02ab76c2a 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -517,8 +517,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             }
 
             // render the QuizCards
-            console.log('GERE' + DocCast(this.Document.embedContainer).filterOp);
-            if (DocCast(this.Document.embedContainer) && DocCast(this.Document.embedContainer).filterOp === 'quiz') {
+            // console.log('GERE' + DocCast(this.Document.embedContainer).filterOp);
+            if (DocCast(this.Document.embedContainer) && DocCast(this.Document.embedContainer).practiceMode === 'quiz') {
                 const text = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
                 return (
                     <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} style={{ display: 'flex', flexDirection: 'column' }}>
-- 
cgit v1.2.3-70-g09d2


From 39784e909c68f139bb537151294d8db56d021158 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Wed, 12 Jun 2024 12:31:50 -0400
Subject: flashcard

---
 .../views/collections/CollectionCarouselView.scss  | 11 +++-
 .../views/collections/CollectionCarouselView.tsx   | 55 ++++++++++++++-----
 src/client/views/nodes/ComparisonBox.scss          | 13 ++++-
 src/client/views/nodes/ComparisonBox.tsx           | 62 +++++++++++++++-------
 src/client/views/pdf/AnchorMenu.tsx                | 21 ++++++--
 src/client/views/pdf/PDFViewer.tsx                 |  1 +
 6 files changed, 124 insertions(+), 39 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/collections/CollectionCarouselView.scss b/src/client/views/collections/CollectionCarouselView.scss
index c4679e888..b402a7a32 100644
--- a/src/client/views/collections/CollectionCarouselView.scss
+++ b/src/client/views/collections/CollectionCarouselView.scss
@@ -27,10 +27,10 @@
 .carouselView-fwd,
 .carouselView-star,
 .carouselView-remove,
-.carouselView-check {
+.carouselView-check,
+.carouselView-add {
     position: absolute;
     display: flex;
-    top: 42.5%;
     width: 30;
     height: 30;
     align-items: center;
@@ -43,15 +43,22 @@
     }
 }
 .carouselView-fwd {
+    top: 42.5%;
     right: 20;
 }
 .carouselView-back {
+    top: 42.5%;
     left: 20;
 }
 .carouselView-star {
     top: 0;
     left: 0;
 }
+.carouselView-add {
+    position: absolute;
+    bottom: 0;
+    left: 0;
+}
 .carouselView-remove {
     top: 80%;
     left: 52%;
diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index 9cf7765dd..b5b6e1f4b 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -4,6 +4,7 @@
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { action, computed, makeObservable, observable } from 'mobx';
 import { observer } from 'mobx-react';
+import { Docs } from '../../documents/Documents';
 import * as React from 'react';
 import { StopEvent, returnFalse, returnOne, returnTrue, returnZero } from '../../../ClientUtils';
 import { emptyFunction } from '../../../Utils';
@@ -48,7 +49,8 @@ export class CollectionCarouselView extends CollectionSubView() {
     constructor(props: any) {
         super(props);
         makeObservable(this);
-        this.layoutDoc.filterOp = cardMode.ALL;
+        // this.layoutDoc.filterOp = cardMode.ALL;
+        Doc.setDocFilter(this.Document, 'data_star', undefined, 'match');
         this.layoutDoc.practiceMode = practiceMode.NORMAL;
         this.layoutDoc._carousel_index = 0;
     }
@@ -177,9 +179,12 @@ export class CollectionCarouselView extends CollectionSubView() {
         this.layoutDoc.filterOp = mode;
         switch (mode) {
             case cardMode.STAR:
+                Doc.setDocFilter(this.Document, 'data_star', true, 'match');
                 this.move(1);
                 break;
-            default: this.setFilterMessage(undefined); // prettier-ignore
+            default:
+                this.setFilterMessage(undefined); // prettier-ignore
+                Doc.setDocFilter(this.Document, 'data_star', true, 'remove');
         }
     };
 
@@ -197,6 +202,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                         NativeHeight={returnZero}
                         fitWidth={undefined}
                         setContentViewBox={undefined}
+                        childFilters={this.childDocFilters}
                         onDoubleClickScript={this.onContentDoubleClick}
                         onClickScript={this.onContentClick}
                         isDocumentActive={this._props.childDocumentsActive?.() ? this._props.isDocumentActive : this._props.isContentActive}
@@ -227,6 +233,16 @@ export class CollectionCarouselView extends CollectionSubView() {
             </>
         );
     }
+
+    containsDifTypes = (): boolean => {
+        return this.carouselItems.filter(doc => !doc.layout.isFlashcard).length === 0;
+    };
+
+    addFlashcard() {
+        const newDoc = Docs.Create.ComparisonDocument('', { _layout_isFlashcard: true, _width: 300, _height: 300 });
+        this.addDocument?.(newDoc);
+    }
+
     @computed get buttons() {
         if (!this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)]) return null;
         return (
@@ -237,17 +253,32 @@ export class CollectionCarouselView extends CollectionSubView() {
                 <div key="fwd" className="carouselView-fwd" onClick={this.advance}>
                     <FontAwesomeIcon icon="chevron-right" size="2x" />
                 </div>
-                <div key="star" className="carouselView-star" onClick={this.star}>
-                    <FontAwesomeIcon icon="star" color={this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)].layout[this.starField] ? 'yellow' : 'gray'} size="1x" />
-                </div>
+                {!this.containsDifTypes() ? (
+                    <div>
+                        <Tooltip title="star">
+                            <div key="star" className="carouselView-star" onClick={this.star}>
+                                <FontAwesomeIcon icon="star" color={this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)].layout[this.starField] ? 'yellow' : 'gray'} size="1x" />
+                            </div>
+                        </Tooltip>
+                        <Tooltip title="add new flashcard to pile">
+                            <div key="add" className="carouselView-add" onClick={this.addFlashcard}>
+                                <FontAwesomeIcon icon="plus" color={this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)].layout[this.starField] ? 'yellow' : 'gray'} size="1x" />
+                            </div>
+                        </Tooltip>
+                    </div>
+                ) : null}
                 {this.layoutDoc.practiceMode === practiceMode.PRACTICE ? (
                     <div>
-                        <div key="remove" className="carouselView-remove" onClick={e => this.setPracticeVal(e, practiceVal.MISSED)}>
-                            <FontAwesomeIcon icon="xmark" color="red" size="1x" />
-                        </div>
-                        <div key="check" className="carouselView-check" onClick={e => this.setPracticeVal(e, practiceVal.CORRECT)}>
-                            <FontAwesomeIcon icon="check" color="green" size="1x" />
-                        </div>
+                        <Tooltip title="Incorrect. View again later.">
+                            <div key="remove" className="carouselView-remove" onClick={e => this.setPracticeVal(e, practiceVal.MISSED)}>
+                                <FontAwesomeIcon icon="xmark" color="red" size="1x" />
+                            </div>
+                        </Tooltip>
+                        <Tooltip title="Correct">
+                            <div key="check" className="carouselView-check" onClick={e => this.setPracticeVal(e, practiceVal.CORRECT)}>
+                                <FontAwesomeIcon icon="check" color="green" size="1x" />
+                            </div>
+                        </Tooltip>
                     </div>
                 ) : null}
             </>
@@ -320,7 +351,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                     }}>
                     Recently missed!
                 </p>
-                {this.menu}
+                {!this.containsDifTypes() ? this.menu : null}
                 {this.Document._chromeHidden || (!this._filterMessage && !this._practiceMessage) ? this.buttons : null}
             </div>
         );
diff --git a/src/client/views/nodes/ComparisonBox.scss b/src/client/views/nodes/ComparisonBox.scss
index dc107b576..0b2c356e5 100644
--- a/src/client/views/nodes/ComparisonBox.scss
+++ b/src/client/views/nodes/ComparisonBox.scss
@@ -14,9 +14,8 @@
         -webkit-text-stroke-color: black;
         -webkit-text-stroke-width: 0.2px;
     }
-
     .input-box {
-        position: relative;
+        position: absolute;
         padding: 10px;
         width: 100%;
         height: 100%;
@@ -145,6 +144,15 @@
     }
 }
 
+.explain {
+    position: absolute;
+    top: 10px;
+    left: 10px;
+    z-index: 200;
+    padding: 5px;
+    background: #dfdfdf;
+}
+
 .comparisonBox-interactive {
     pointer-events: unset;
     cursor: ew-resize;
@@ -154,6 +162,7 @@
             display: flex;
         }
     }
+
     // .input-box {
     //     position: absolute;
     //     padding: 10px;
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 02ab76c2a..9eb5f6ca2 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -43,9 +43,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @observable private _inputValue = '';
     @observable private _outputValue = '';
     @observable private _loading = false;
-    @observable private _errorMessage = '';
-    @observable private _outputMessage = '';
     @observable private _isEmpty = false;
+    @observable _yRelativeToTop: boolean = true;
 
     public addToCollection: ((doc: Doc | Doc[], annotationKey?: string | undefined) => boolean) | undefined;
 
@@ -76,8 +75,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     componentDidMount() {
         this._props.setContentViewBox?.(this);
         reaction(
-            () => this._props.isSelected(),
-            selected => !selected && (this.childActive = false)
+            () => this._props.isSelected(), // when this reaction should update
+            selected => !selected && (this.childActive = false) // what it should update to
         );
     }
     protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
@@ -283,8 +282,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         })
                     }
                     style={{
-                        background: usepath === 'alternate' ? 'white' : 'black',
-                        color: usepath === 'alternate' ? 'black' : 'white',
+                        background: this.revealOp === 'hover' ? 'gray' : usepath === 'alternate' ? 'white' : 'black',
+                        color: this.revealOp === 'hover' ? 'black' : usepath === 'alternate' ? 'black' : 'white',
                         display: 'inline-block',
                     }}>
                     <div key="alternate" className="formattedTextBox-flip">
@@ -303,7 +302,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? (
                             <div className="dash-tooltip">Flip to front side to use GPT</div>
                         ) : (
-                            <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard</div>
+                            <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>
                         )
                     }>
                     <div style={{ position: 'absolute', bottom: '3px', right: '56px', cursor: 'pointer' }} onPointerDown={e => (!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? this.askGPT(GPTCallType.CHATCARD) : null)}>
@@ -314,16 +313,17 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     <div
                         style={{ position: 'absolute', bottom: '3px', right: '80px', cursor: 'pointer' }}
                         onPointerDown={e => {
+                            // this.displayLabelHandler(e.target.value, e.clientY);
                             const collectionArr: Doc[] = [];
                             collectionArr.push(this.Document);
                             const newCol = Docs.Create.CarouselDocument(collectionArr, {
-                                _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250),
-                                _height: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 200),
+                                _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250) + 50,
+                                _height: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 200) + 50,
                                 _layout_fitWidth: false,
                                 _layout_autoHeight: true,
                             });
-                            newCol['x'] = e.clientX - 820;
-                            newCol['y'] = e.clientY - 640;
+                            newCol['x'] = this.layoutDoc['x'];
+                            newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
                             this._props.addDocument?.(newCol);
                             this._props.removeDocument?.(this.Document);
                             this.Document.embedContainer = newCol;
@@ -332,9 +332,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     </div>
                 </Tooltip>
                 <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
-                    <div
-                        style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }}
-                        onClick={e => (this.revealOp === 'hover' ? (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip') : (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover'))}>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }} onClick={e => this.handleHover()}>
                         <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="layer-group" size="xl" />
                     </div>
                 </Tooltip>
@@ -361,6 +359,17 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
     };
 
+    @action handleHover = () => {
+        if (this.revealOp === 'hover') {
+            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip';
+            this.Document.forceActive = false;
+        } else {
+            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover';
+            this.Document.forceActive = true;
+        }
+        //this.revealOp === 'hover' ? (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip') : (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover');
+    };
+
     @action handleRenderClick = () => {
         // Call the GPT model and get the output
         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = undefined;
@@ -448,6 +457,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             const whichDoc = DocCast(this.dataDoc[whichSlot]);
             const targetDoc = DocCast(whichDoc?.annotationOn, whichDoc);
             const layoutString = targetDoc ? '' : this.testForTextFields(whichSlot);
+            // whichDoc['backgroundColor'] = this.layoutDoc['backgroundColor'];
 
             return targetDoc || layoutString ? (
                 <>
@@ -500,20 +510,32 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             // add text box to each side when comparison box is first created
             // (!this.dataDoc[this.fieldKey + '_0'] && this.dataDoc[this._props.fieldKey + '_0'] !== 'empty')
             if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
-                const dataSplit = StrCast(this.dataDoc.data).split('Answer');
+                const dataSplit = StrCast(this.dataDoc.data).split('Answer: ');
                 const newDoc = Docs.Create.TextDocument(dataSplit[1]);
                 // if there is text from the pdf ai cards, put the question on the front side.
                 // eslint-disable-next-line prefer-destructuring
-                newDoc[DocData].text = dataSplit[1];
+                // newDoc.text = dataSplit[1];
+                newDoc['backgroundColor'] = 'lightgray';
                 this.addDoc(newDoc, this.fieldKey + '_0');
+                // DocCast(this.dataDoc[this.fieldKey + '_0'])[DocData].text = dataSplit[1];
+                // DocCast(this.dataDoc[this.fieldKey + '_0']).text = dataSplit[1];
+                // console.log('HI' + DocCast(this.dataDoc[this.fieldKey + '_0']).text);
+                console.log('HEREEE' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text));
             }
+
             if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
-                const dataSplit = StrCast(this.dataDoc.data).split('Answer');
+                const dataSplit = StrCast(this.dataDoc.data).split('Answer: ');
                 const newDoc = Docs.Create.TextDocument(dataSplit[0]);
+                this.addDoc(newDoc, this.fieldKey + '_1');
                 // if there is text from the pdf ai cards, put the answer on the alternate side.
                 // eslint-disable-next-line prefer-destructuring
-                newDoc[DocData].text = dataSplit[0];
-                this.addDoc(newDoc, this.fieldKey + '_1');
+
+                // newDoc[DocData].text = dataSplit[0];
+                // console.log('HEREEE' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text));
+                // console.log('HI' + DocCast(this.dataDoc[this.fieldKey + '_1']).text);
+                // DocCast(this.dataDoc[this.props.fieldKey + '_1'])[DocData].text = dataSplit[0];
+                // console.log('HEREEE' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text));
+                // DocCast(this.dataDoc[this.fieldKey + '_1'])[DocData].text = dataSplit[0];
             }
 
             // render the QuizCards
@@ -552,6 +574,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 );
             }
 
+            console.log('HEREEE2' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text));
             // render a normal flashcard when not a QuizCard
             return (
                 <div
@@ -566,6 +589,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     }}
                     // onPointerUp={() => (this._isAnyChildContentActive = true)}
                 >
+                    {StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '' && !this.childActive ? <p className="explain">Enter text in the flashcard. </p> : null}
                     {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
                     {this._loading ? (
                         <div className="loading-spinner" style={{ position: 'absolute' }}>
diff --git a/src/client/views/pdf/AnchorMenu.tsx b/src/client/views/pdf/AnchorMenu.tsx
index 2f6824466..cedd3c7c3 100644
--- a/src/client/views/pdf/AnchorMenu.tsx
+++ b/src/client/views/pdf/AnchorMenu.tsx
@@ -24,6 +24,8 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
     private _disposer: IReactionDisposer | undefined;
     private _commentRef = React.createRef<HTMLDivElement>();
     private _cropRef = React.createRef<HTMLDivElement>();
+    // @observable protected _top: number = -300;
+    // @observable protected _left: number = -300;
 
     constructor(props: any) {
         super(props);
@@ -38,10 +40,17 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
 
     // GPT additions
     @observable private _selectedText: string = '';
+    @observable private _x: number = 0;
+    @observable private _y: number = 0;
     @action
     public setSelectedText = (txt: string) => {
         this._selectedText = txt.trim();
     };
+    @action
+    public setLocation = (x: number, y: number) => {
+        this._x = x;
+        this._y = y;
+    };
 
     public onMakeAnchor: () => Opt<Doc> = () => undefined; // Method to get anchor from text search
 
@@ -99,7 +108,7 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
      * Invokes the API with the selected text and stores it in the selected text.
      * @param e pointer down event
      */
-    gptFlashcards = async () => {
+    gptFlashcards = async (e: React.PointerEvent) => {
         const queryText = this._selectedText;
         try {
             const res = await gptAPICall(queryText, GPTCallType.FLASHCARD);
@@ -117,8 +126,8 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
      */
     transferToFlashcard = (text: string) => {
         // put each question generated by GPT on the front of the flashcard
-        const senArr = text.split('Question');
-        const collectionArr: Doc[] = [];
+        var senArr = text.trim().split('Question: ');
+        var collectionArr: Doc[] = [];
         for (let i = 1; i < senArr.length; i++) {
             console.log('Arr ' + i + ': ' + senArr[i]);
             const newDoc = Docs.Create.ComparisonDocument(senArr[i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
@@ -133,6 +142,10 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
             _layout_autoHeight: true,
         });
 
+        newCol.x = this._x;
+        newCol.y = this._y;
+        newCol.zIndex = 100;
+
         this.addToCollection?.(newCol);
     };
 
@@ -221,7 +234,7 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
                     {/* Adds a create flashcards option to the anchor menu, which calls the gptFlashcard method. */}
                     <IconButton
                         tooltip="Create flashcards" //
-                        onPointerDown={this.gptFlashcards}
+                        onPointerDown={e => this.gptFlashcards(e)}
                         icon={<FontAwesomeIcon icon="id-card" size="lg" />}
                         color={SettingsManager.userColor}
                     />
diff --git a/src/client/views/pdf/PDFViewer.tsx b/src/client/views/pdf/PDFViewer.tsx
index 6c1617c38..92f890e70 100644
--- a/src/client/views/pdf/PDFViewer.tsx
+++ b/src/client/views/pdf/PDFViewer.tsx
@@ -425,6 +425,7 @@ export class PDFViewer extends ObservableReactComponent<IViewerProps> {
         const sel = window.getSelection();
         if (sel) {
             AnchorMenu.Instance.setSelectedText(sel.toString());
+            AnchorMenu.Instance.setLocation(NumCast(this._props.layoutDoc['x']), NumCast(this._props.layoutDoc['y']));
         }
 
         if (sel?.type === 'Range') {
-- 
cgit v1.2.3-70-g09d2


From 91e465c9ba542b637e66c7091c444a44fdbe4f0c Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Thu, 13 Jun 2024 14:37:37 -0400
Subject: create flashcard stack and ui fixes

---
 .../views/collections/CollectionCarouselView.tsx   | 51 +++++++++---
 src/client/views/nodes/ComparisonBox.scss          |  8 +-
 src/client/views/nodes/ComparisonBox.tsx           | 90 +++++++++++++++-------
 src/client/views/pdf/AnchorMenu.tsx                | 13 +++-
 src/client/views/pdf/Annotation.scss               | 19 ++++-
 src/client/views/pdf/PDFViewer.tsx                 |  1 +
 6 files changed, 136 insertions(+), 46 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index b5b6e1f4b..f2d634eaa 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -21,6 +21,8 @@ import { FormattedTextBox } from '../nodes/formattedText/FormattedTextBox';
 import './CollectionCarouselView.scss';
 import { CollectionSubView } from './CollectionSubView';
 import { Tooltip } from '@mui/material';
+import { DocUtils } from '../../documents/DocUtils';
+import { Any } from '@react-spring/web';
 
 enum cardMode {
     // PRACTICE = 'practice',
@@ -49,7 +51,8 @@ export class CollectionCarouselView extends CollectionSubView() {
     constructor(props: any) {
         super(props);
         makeObservable(this);
-        // this.layoutDoc.filterOp = cardMode.ALL;
+        // this.setModes();
+        this.layoutDoc.filterOp = cardMode.ALL;
         Doc.setDocFilter(this.Document, 'data_star', undefined, 'match');
         this.layoutDoc.practiceMode = practiceMode.NORMAL;
         this.layoutDoc._carousel_index = 0;
@@ -67,6 +70,9 @@ export class CollectionCarouselView extends CollectionSubView() {
     };
 
     @computed get carouselItems() {
+        this.childLayoutPairs.map(pair => {
+            pair.layout.embedContainer = this.Document;
+        });
         return this.childLayoutPairs.filter(pair => pair.layout.type !== DocumentType.LINK);
     }
     @computed get marginX() {
@@ -80,6 +86,13 @@ export class CollectionCarouselView extends CollectionSubView() {
         this._filterMessage = mes;
     };
 
+    setModes = () => {
+        this.layoutDoc.filterOp = cardMode.ALL;
+        Doc.setDocFilter(this.Document, 'data_star', undefined, 'match');
+        this.layoutDoc.practiceMode = practiceMode.NORMAL;
+        this.layoutDoc._carousel_index = 0;
+    };
+
     move = (dir: number) => {
         const moveToCardWithField = (match: (doc: Doc) => boolean): boolean => {
             let startInd = (NumCast(this.layoutDoc._carousel_index) + dir) % this.carouselItems.length;
@@ -107,8 +120,8 @@ export class CollectionCarouselView extends CollectionSubView() {
                 break;
             case practiceMode.PRACTICE && cardMode.STAR:
                 if (!moveToCardWithField((doc: Doc) => doc[this.practiceField] !== practiceVal.CORRECT && doc[this.starField] === true)) {
-                    this._filterMessage = 'No flashcards to show! Unselect star mode to view all flashcards.';
-                    this._practiceMessage = 'Unselect practice mode to view all flashcards.';
+                    this._filterMessage = 'No flashcards to show! Unselect mode to view all flashcards.';
+                    this._practiceMessage = undefined;
                 }
                 break;
             default:
@@ -179,20 +192,24 @@ export class CollectionCarouselView extends CollectionSubView() {
         this.layoutDoc.filterOp = mode;
         switch (mode) {
             case cardMode.STAR:
-                Doc.setDocFilter(this.Document, 'data_star', true, 'match');
+                // Doc.setDocFilter(this.Document, 'data_star', true, 'match');
                 this.move(1);
                 break;
             default:
                 this.setFilterMessage(undefined); // prettier-ignore
-                Doc.setDocFilter(this.Document, 'data_star', true, 'remove');
+            // Doc.setDocFilter(this.Document, 'data_star', true, 'remove');
         }
     };
 
     @computed get content() {
+        if (this.layoutDoc._carousel_index === this.carouselItems.length && this.layoutDoc._carousel_index !== 0) {
+            this.move(1);
+        }
         const index = NumCast(this.layoutDoc._carousel_index);
         const curDoc = this.carouselItems?.[index];
         const captionProps = { ...this._props, NativeScaling: returnOne, PanelWidth: this.captionWidth, fieldKey: 'caption', setHeight: undefined, setContentView: undefined };
         const carouselShowsCaptions = StrCast(this.layoutDoc._layout_showCaption);
+
         return !(curDoc?.layout instanceof Doc) ? null : (
             <>
                 <div className="collectionCarouselView-image" key="image">
@@ -207,6 +224,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                         onClickScript={this.onContentClick}
                         isDocumentActive={this._props.childDocumentsActive?.() ? this._props.isDocumentActive : this._props.isContentActive}
                         isContentActive={this._props.childContentsActive ?? this._props.isContentActive() === false ? returnFalse : emptyFunction}
+                        addDocument={this._props.addDocument}
                         hideCaptions={!!carouselShowsCaptions} // hide captions if the carousel is configured to show the captions
                         renderDepth={this._props.renderDepth + 1}
                         LayoutTemplate={this._props.childLayoutTemplate}
@@ -235,12 +253,21 @@ export class CollectionCarouselView extends CollectionSubView() {
     }
 
     containsDifTypes = (): boolean => {
-        return this.carouselItems.filter(doc => !doc.layout.isFlashcard).length === 0;
+        return this.carouselItems.filter(doc => !doc.layout._layout_isFlashcard).length !== 0;
     };
 
     addFlashcard() {
         const newDoc = Docs.Create.ComparisonDocument('', { _layout_isFlashcard: true, _width: 300, _height: 300 });
         this.addDocument?.(newDoc);
+        // DocUtils.copyDragFactory(newDoc);
+        // this._props.addDocument?.();
+        // newDoc.layout = this.layoutDoc;
+        // newDoc.data = this.dataDoc;
+        // Doc.AddDocToList()
+        // this._props.parent._props.addDocument();
+        // this.childLayoutPairs.push({ newDoc.layout, newDoc.data});
+        // this._props.addDocument?.(newDoc);
+        // console.log('HERE');
     }
 
     @computed get buttons() {
@@ -260,11 +287,11 @@ export class CollectionCarouselView extends CollectionSubView() {
                                 <FontAwesomeIcon icon="star" color={this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)].layout[this.starField] ? 'yellow' : 'gray'} size="1x" />
                             </div>
                         </Tooltip>
-                        <Tooltip title="add new flashcard to pile">
+                        {/* <Tooltip title="add new flashcard to pile">
                             <div key="add" className="carouselView-add" onClick={this.addFlashcard}>
                                 <FontAwesomeIcon icon="plus" color={this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)].layout[this.starField] ? 'yellow' : 'gray'} size="1x" />
                             </div>
-                        </Tooltip>
+                        </Tooltip> */}
                     </div>
                 ) : null}
                 {this.layoutDoc.practiceMode === practiceMode.PRACTICE ? (
@@ -286,8 +313,10 @@ export class CollectionCarouselView extends CollectionSubView() {
     }
 
     togglePracticeMode = (mode: practiceMode) => {
-        if (mode === this.layoutDoc.practiceMode) this.setPracticeMode(practiceMode.NORMAL);
-        else this.setPracticeMode(mode);
+        if (mode === this.layoutDoc.practiceMode) {
+            this.setPracticeMode(practiceMode.NORMAL);
+            // this.setPracticeMessage("undefined");
+        } else this.setPracticeMode(mode);
     };
     toggleFilterMode = () => { this.layoutDoc.filterOp === cardMode.STAR ? this.setFilterMode(cardMode.ALL) : this.setFilterMode(cardMode.STAR)}; //prettier-ignore
     setColor = (mode: practiceMode | cardMode, which: string) => { return which === mode ? 'white' : 'light gray'}; //prettier-ignore
@@ -351,7 +380,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                     }}>
                     Recently missed!
                 </p>
-                {!this.containsDifTypes() ? this.menu : null}
+                {!this.containsDifTypes() && this.carouselItems.length !== 0 ? this.menu : null}
                 {this.Document._chromeHidden || (!this._filterMessage && !this._practiceMessage) ? this.buttons : null}
             </div>
         );
diff --git a/src/client/views/nodes/ComparisonBox.scss b/src/client/views/nodes/ComparisonBox.scss
index 0b2c356e5..f7389e39b 100644
--- a/src/client/views/nodes/ComparisonBox.scss
+++ b/src/client/views/nodes/ComparisonBox.scss
@@ -16,14 +16,15 @@
     }
     .input-box {
         position: absolute;
+        top: 50;
         padding: 10px;
         width: 100%;
-        height: 100%;
+        height: 70%;
         display: flex;
     }
 
     .submit-button {
-        position: relative;
+        position: absolute;
         padding-bottom: 10px;
         padding-left: 5px;
         padding-right: 5px;
@@ -31,6 +32,7 @@
         border-radius: 2px;
         height: 15%;
         display: flex;
+        bottom: 0;
 
         button {
             flex: 1;
@@ -149,7 +151,7 @@
     top: 10px;
     left: 10px;
     z-index: 200;
-    padding: 5px;
+    // padding: 5px;
     background: #dfdfdf;
 }
 
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 9eb5f6ca2..2fc297bec 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -28,6 +28,7 @@ import ReactLoading from 'react-loading';
 import { ContextMenu } from '../ContextMenu';
 import { ContextMenuProps } from '../ContextMenuItem';
 import { tickStep } from 'd3';
+import { CollectionCarouselView } from '../collections/CollectionCarouselView';
 
 @observer
 export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
@@ -46,8 +47,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @observable private _isEmpty = false;
     @observable _yRelativeToTop: boolean = true;
 
-    public addToCollection: ((doc: Doc | Doc[], annotationKey?: string | undefined) => boolean) | undefined;
-
     @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
         this._inputValue = e.target.value;
         console.log(this._inputValue);
@@ -248,6 +247,41 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     _closeRef = React.createRef<HTMLDivElement>();
 
+    createFlashcardPile(collectionArr: Doc[], gpt: boolean) {
+        const newCol = Docs.Create.CarouselDocument(collectionArr, {
+            _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250) + 50,
+            _height: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 200) + 50,
+            _layout_fitWidth: false,
+            _layout_autoHeight: true,
+        });
+        newCol['x'] = this.layoutDoc['x'];
+        newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
+        newCol.type_collection = 'carousel';
+        console.log(newCol.data);
+
+        if (gpt) {
+            this._props.DocumentView?.()._props.addDocument?.(newCol);
+            this._props.removeDocument?.(this.Document);
+        } else {
+            this._props.addDocument?.(newCol);
+            this._props.removeDocument?.(this.Document);
+            this.Document.embedContainer = newCol;
+        }
+    }
+
+    gptFlashcardPile = async () => {
+        var text = (await this.askGPT(GPTCallType.FLASHCARD)) || '';
+
+        var senArr = text.trim().split('Question: ');
+        var collectionArr: Doc[] = [];
+        for (let i = 1; i < senArr.length; i++) {
+            const newDoc = Docs.Create.ComparisonDocument(senArr[i].trim(), { _layout_isFlashcard: true, _width: 300, _height: 300 });
+            newDoc.text = senArr[i].trim();
+            collectionArr.push(newDoc);
+        }
+        this.createFlashcardPile(collectionArr, true);
+    };
+
     /**
      * Flips a flashcard to the alternate side for the user to view.
      */
@@ -305,35 +339,27 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>
                         )
                     }>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '56px', cursor: 'pointer' }} onPointerDown={e => (!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? this.askGPT(GPTCallType.CHATCARD) : null)}>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={e => (!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? this.askGPT(GPTCallType.CHATCARD) : null)}>
                         <FontAwesomeIcon icon="lightbulb" size="xl" />
                     </div>
                 </Tooltip>
-                <Tooltip title={<div>Create a flashcard pile</div>}>
-                    <div
-                        style={{ position: 'absolute', bottom: '3px', right: '80px', cursor: 'pointer' }}
-                        onPointerDown={e => {
-                            // this.displayLabelHandler(e.target.value, e.clientY);
-                            const collectionArr: Doc[] = [];
-                            collectionArr.push(this.Document);
-                            const newCol = Docs.Create.CarouselDocument(collectionArr, {
-                                _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250) + 50,
-                                _height: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 200) + 50,
-                                _layout_fitWidth: false,
-                                _layout_autoHeight: true,
-                            });
-                            newCol['x'] = this.layoutDoc['x'];
-                            newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
-                            this._props.addDocument?.(newCol);
-                            this._props.removeDocument?.(this.Document);
-                            this.Document.embedContainer = newCol;
-                        }}>
-                        <FontAwesomeIcon icon="folder-plus" size="xl" />
+                {DocCast(this.Document.embedContainer).type_collection === 'carousel' ? null : (
+                    <div>
+                        <Tooltip title={<div>Create a flashcard pile</div>}>
+                            <div style={{ position: 'absolute', bottom: '3px', right: '74px', cursor: 'pointer' }} onPointerDown={e => this.createFlashcardPile([this.Document], false)}>
+                                <FontAwesomeIcon icon="folder-plus" size="xl" />
+                            </div>
+                        </Tooltip>
+                        <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
+                            <div style={{ position: 'absolute', bottom: '3px', right: '104px', cursor: 'pointer' }} onClick={e => this.gptFlashcardPile()}>
+                                <FontAwesomeIcon icon="layer-group" size="xl" />
+                            </div>
+                        </Tooltip>
                     </div>
-                </Tooltip>
+                )}
                 <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
                     <div style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }} onClick={e => this.handleHover()}>
-                        <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="layer-group" size="xl" />
+                        <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="hand-point-up" size="xl" />
                     </div>
                 </Tooltip>
                 {/* <Tooltip title={<div className="dash-tooltip">Remove this side of the flashcard</div>}>
@@ -425,6 +451,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             if (callType == GPTCallType.QUIZ) this._outputValue = res;
             // DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
             // this._outputValue = res;
+
+            if (callType === GPTCallType.FLASHCARD) {
+                // console.log(res);
+                this._loading = false;
+                return res;
+            }
             console.log(res);
         } catch (err) {
             console.error('GPT call failed');
@@ -520,7 +552,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 // DocCast(this.dataDoc[this.fieldKey + '_0'])[DocData].text = dataSplit[1];
                 // DocCast(this.dataDoc[this.fieldKey + '_0']).text = dataSplit[1];
                 // console.log('HI' + DocCast(this.dataDoc[this.fieldKey + '_0']).text);
-                console.log('HEREEE' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text));
+                //console.log('HEREEE' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text));
             }
 
             if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
@@ -545,7 +577,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 return (
                     <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} style={{ display: 'flex', flexDirection: 'column' }}>
                         <p style={{ color: 'white', padding: 10 }}>{text}</p>
-                        <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', padding: 10 }}>Return to all flashcards and add text to both sides. </p>
+                        <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
                         <div className="input-box">
                             <textarea
                                 value={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._outputValue : this._inputValue}
@@ -574,7 +606,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 );
             }
 
-            console.log('HEREEE2' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text));
+            //console.log('HEREEE2' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text));
             // render a normal flashcard when not a QuizCard
             return (
                 <div
@@ -589,7 +621,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     }}
                     // onPointerUp={() => (this._isAnyChildContentActive = true)}
                 >
-                    {StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '' && !this.childActive ? <p className="explain">Enter text in the flashcard. </p> : null}
+                    {!this.layoutDoc[`_${this._props.fieldKey}_usePath`] && StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '' && !this.childActive ? <p className="explain">Enter text in the flashcard. </p> : null}
                     {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
                     {this._loading ? (
                         <div className="loading-spinner" style={{ position: 'absolute' }}>
diff --git a/src/client/views/pdf/AnchorMenu.tsx b/src/client/views/pdf/AnchorMenu.tsx
index cedd3c7c3..c1198b4f7 100644
--- a/src/client/views/pdf/AnchorMenu.tsx
+++ b/src/client/views/pdf/AnchorMenu.tsx
@@ -15,6 +15,7 @@ import { LinkPopup } from '../linking/LinkPopup';
 import { DocumentView } from '../nodes/DocumentView';
 import './AnchorMenu.scss';
 import { GPTPopup, GPTPopupMode } from './GPTPopup/GPTPopup';
+import ReactLoading from 'react-loading';
 
 @observer
 export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
@@ -24,6 +25,7 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
     private _disposer: IReactionDisposer | undefined;
     private _commentRef = React.createRef<HTMLDivElement>();
     private _cropRef = React.createRef<HTMLDivElement>();
+    @observable private _loading = false;
     // @observable protected _top: number = -300;
     // @observable protected _left: number = -300;
 
@@ -110,15 +112,16 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
      */
     gptFlashcards = async (e: React.PointerEvent) => {
         const queryText = this._selectedText;
+        this._loading = true;
         try {
             const res = await gptAPICall(queryText, GPTCallType.FLASHCARD);
             console.log(res);
-            GPTPopup.Instance.setText(res || 'Something went wrong.');
+            // GPTPopup.Instance.setText(res || 'Something went wrong.');
             this.transferToFlashcard(res || 'Something went wrong');
         } catch (err) {
             console.error(err);
         }
-        GPTPopup.Instance.setLoading(false);
+        // GPTPopup.Instance.setLoading(false);
     };
 
     /*
@@ -147,6 +150,7 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
         newCol.zIndex = 100;
 
         this.addToCollection?.(newCol);
+        this._loading = false;
     };
 
     pointerDown = (e: React.PointerEvent) => {
@@ -263,6 +267,11 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
                             />
                         </div>
                     )}
+                    {this._loading ? (
+                        <div className="loading-spinner" style={{ position: 'absolute' }}>
+                            <ReactLoading type="spin" height={30} width={30} color={'white'} />
+                        </div>
+                    ) : null}
                 </>
             ) : (
                 <>
diff --git a/src/client/views/pdf/Annotation.scss b/src/client/views/pdf/Annotation.scss
index 1de60ffed..329819ea2 100644
--- a/src/client/views/pdf/Annotation.scss
+++ b/src/client/views/pdf/Annotation.scss
@@ -7,4 +7,21 @@
     &:hover {
         cursor: pointer;
     }
-}
\ No newline at end of file
+}
+.loading-spinner {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    height: 90%;
+    width: 93%;
+    left: 10;
+    font-size: 20px;
+    font-weight: bold;
+    color: #0b0a0a;
+}
+
+@keyframes spin {
+    to {
+        transform: rotate(360deg);
+    }
+}
diff --git a/src/client/views/pdf/PDFViewer.tsx b/src/client/views/pdf/PDFViewer.tsx
index 92f890e70..af7a5774d 100644
--- a/src/client/views/pdf/PDFViewer.tsx
+++ b/src/client/views/pdf/PDFViewer.tsx
@@ -464,6 +464,7 @@ export class PDFViewer extends ObservableReactComponent<IViewerProps> {
             this._mainCont.current!.style.transform = '';
         }
         this._selectionContent = selRange.cloneContents();
+
         this._selectionText = this._selectionContent?.textContent || '';
 
         // clear selection
-- 
cgit v1.2.3-70-g09d2


From ad32c1606395cdc71ba50eb9b51d3a9d3b707ca0 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Tue, 18 Jun 2024 15:23:12 -0400
Subject: working on various image flashcard ideas

---
 src/client/apis/gpt/GPT.ts                         |   7 +-
 src/client/views/MarqueeAnnotator.tsx              |   1 +
 .../views/collections/CollectionCardDeckView.tsx   |   2 +-
 .../views/collections/CollectionCarouselView.tsx   |   4 +-
 .../collections/collectionFreeForm/MarqueeView.tsx |   2 +-
 src/client/views/nodes/ComparisonBox.tsx           |  18 +-
 src/client/views/nodes/ImageBox.scss               |  21 ++
 src/client/views/nodes/ImageBox.tsx                | 232 +++++++++++++++++++++
 src/client/views/pdf/AnchorMenu.tsx                |  47 ++---
 src/client/views/pdf/Annotation.scss               |  32 +--
 src/client/views/pdf/PDFViewer.scss                |  21 ++
 src/client/views/pdf/PDFViewer.tsx                 |  52 +++++
 12 files changed, 383 insertions(+), 56 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index b036349dc..7bcd541c7 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -25,7 +25,7 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
     // newest model: gpt-4
     summary: { model: 'gpt-4-turbo', maxTokens: 256, temp: 0.5, prompt: 'Summarize the text given in simpler terms.' },
     edit: { model: 'gpt-4-turbo', maxTokens: 256, temp: 0.5, prompt: 'Reword the text.' },
-    flashcard: { model: 'gpt-4-turbo', maxTokens: 512, temp: 0.5, prompt: 'Make flashcards out of this text with each question and answer labeled. Do not label each flashcard and do not include asterisks: ' },
+    flashcard: { model: 'gpt-4-turbo', maxTokens: 512, temp: 0.5, prompt: 'Make flashcards out of this text with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ' },
     completion: { model: 'gpt-4-turbo', maxTokens: 256, temp: 0.5, prompt: "You are a helpful assistant. Answer the user's prompt." },
     mermaid: {
         model: 'gpt-4-turbo',
@@ -120,7 +120,7 @@ const gptGetEmbedding = async (src: string): Promise<number[]> => {
         return [];
     }
 };
-const gptImageLabel = async (src: string): Promise<string> => {
+const gptImageLabel = async (src: string, prompt: string): Promise<string> => {
     try {
         const response = await openai.chat.completions.create({
             model: 'gpt-4o',
@@ -128,7 +128,7 @@ const gptImageLabel = async (src: string): Promise<string> => {
                 {
                     role: 'user',
                     content: [
-                        { type: 'text', text: 'Give three to five labels to describe this image.' },
+                        { type: 'text', text: prompt },
                         {
                             type: 'image_url',
                             image_url: {
@@ -141,6 +141,7 @@ const gptImageLabel = async (src: string): Promise<string> => {
             ],
         });
         if (response.choices[0].message.content) {
+            console.log(response.choices[0].message.content);
             return response.choices[0].message.content;
         }
         return 'Missing labels';
diff --git a/src/client/views/MarqueeAnnotator.tsx b/src/client/views/MarqueeAnnotator.tsx
index c18ac6738..c7ffce2b4 100644
--- a/src/client/views/MarqueeAnnotator.tsx
+++ b/src/client/views/MarqueeAnnotator.tsx
@@ -34,6 +34,7 @@ export interface MarqueeAnnotatorProps {
     getPageFromScroll?: (top: number) => number;
     finishMarquee: (x?: number, y?: number) => void;
     anchorMenuClick?: () => undefined | ((anchor: Doc) => void);
+    anchorMenuFlashcard?: () => Promise<String>;
     anchorMenuCrop?: (anchor: Doc | undefined, addCrop: boolean) => Doc | undefined;
     highlightDragSrcColor?: string;
 }
diff --git a/src/client/views/collections/CollectionCardDeckView.tsx b/src/client/views/collections/CollectionCardDeckView.tsx
index de46180e6..50af9df9e 100644
--- a/src/client/views/collections/CollectionCardDeckView.tsx
+++ b/src/client/views/collections/CollectionCardDeckView.tsx
@@ -373,7 +373,7 @@ export class CollectionCardView extends CollectionSubView() {
         const hrefComplete = `${hrefParts[0]}_o.${hrefParts[1]}`;
         try {
             const hrefBase64 = await CollectionCardView.imageUrlToBase64(hrefComplete);
-            const response = await gptImageLabel(hrefBase64);
+            const response = await gptImageLabel(hrefBase64, 'Give three to five labels to describe this image.');
             image[DocData].description = response.trim();
             return response; // Return the response from gptImageLabel
         } catch (error) {
diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index f2d634eaa..6976deea5 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -46,14 +46,14 @@ export class CollectionCarouselView extends CollectionSubView() {
     @observable private _filterMessage: string | undefined;
     get practiceField() { return this.fieldKey + "_practice"; } // prettier-ignore
     get sideField() { return "_" + this.fieldKey + "_usePath"; } // prettier-ignore
-    get starField()     { return this.fieldKey + "_star"; } // prettier-ignore
+    get starField()     { return "star"; } // prettier-ignore
 
     constructor(props: any) {
         super(props);
         makeObservable(this);
         // this.setModes();
         this.layoutDoc.filterOp = cardMode.ALL;
-        Doc.setDocFilter(this.Document, 'data_star', undefined, 'match');
+        Doc.setDocFilter(this.Document, 'star', undefined, 'match');
         this.layoutDoc.practiceMode = practiceMode.NORMAL;
         this.layoutDoc._carousel_index = 0;
     }
diff --git a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
index dc15c83c5..0afda3e64 100644
--- a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
+++ b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
@@ -440,7 +440,7 @@ export class MarqueeView extends ObservableReactComponent<SubCollectionViewProps
             const [name, type] = ImageCast(doc[Doc.LayoutFieldKey(doc)]).url.href.split('.');
             return CollectionCardView.imageUrlToBase64(`${name}_o.${type}`).then(hrefBase64 =>
                 !hrefBase64 ? undefined : 
-                    gptImageLabel(hrefBase64).then(labels => 
+                    gptImageLabel(hrefBase64, 'Give three to five labels to describe this image.').then(labels => 
                         Promise.all(labels.split('\n').map(label => gptGetEmbedding(label))).then(embeddings => 
                             ({ doc, embeddings, labels }))) ); // prettier-ignore
         });
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 2fc297bec..3d33ff862 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -92,6 +92,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             Doc.SetContainer(droppedDocuments.lastElement(), this.dataDoc);
             !added && e.preventDefault();
             e.stopPropagation(); // prevent parent Doc from registering new position so that it snaps back into place
+            // this.childActive = false;
             return added;
         }
         return undefined;
@@ -257,7 +258,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         newCol['x'] = this.layoutDoc['x'];
         newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
         newCol.type_collection = 'carousel';
-        console.log(newCol.data);
+        // console.log(newCol.data);
 
         if (gpt) {
             this._props.DocumentView?.()._props.addDocument?.(newCol);
@@ -270,13 +271,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     }
 
     gptFlashcardPile = async () => {
-        var text = (await this.askGPT(GPTCallType.FLASHCARD)) || '';
+        var text = await this.askGPT(GPTCallType.FLASHCARD);
 
-        var senArr = text.trim().split('Question: ');
+        var senArr = text?.split('Question: ');
         var collectionArr: Doc[] = [];
-        for (let i = 1; i < senArr.length; i++) {
-            const newDoc = Docs.Create.ComparisonDocument(senArr[i].trim(), { _layout_isFlashcard: true, _width: 300, _height: 300 });
-            newDoc.text = senArr[i].trim();
+        for (let i = 1; i < senArr?.length!; i++) {
+            const newDoc = Docs.Create.ComparisonDocument(senArr![i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
+            newDoc.text = senArr![i];
             collectionArr.push(newDoc);
         }
         this.createFlashcardPile(collectionArr, true);
@@ -451,13 +452,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             if (callType == GPTCallType.QUIZ) this._outputValue = res;
             // DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
             // this._outputValue = res;
-
-            if (callType === GPTCallType.FLASHCARD) {
+            else if (callType === GPTCallType.FLASHCARD) {
                 // console.log(res);
                 this._loading = false;
                 return res;
             }
-            console.log(res);
+            // console.log(res);
         } catch (err) {
             console.error('GPT call failed');
         }
diff --git a/src/client/views/nodes/ImageBox.scss b/src/client/views/nodes/ImageBox.scss
index 3ffda5a35..be68ac8cd 100644
--- a/src/client/views/nodes/ImageBox.scss
+++ b/src/client/views/nodes/ImageBox.scss
@@ -139,3 +139,24 @@
 .imageBox-fadeBlocker-hover {
     opacity: 0;
 }
+
+.loading-spinner {
+    position: absolute;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    height: 100%;
+    width: 100%;
+    // left: 50%;
+    // top: 50%;
+    z-index: 200;
+    font-size: 20px;
+    font-weight: bold;
+    color: #17175e;
+}
+
+@keyframes spin {
+    to {
+        transform: rotate(360deg);
+    }
+}
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index e4b3a1b9b..ff938df78 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -35,6 +35,15 @@ import { FieldView, FieldViewProps } from './FieldView';
 import { FocusViewOptions } from './FocusViewOptions';
 import './ImageBox.scss';
 import { OpenWhere } from './OpenWhere';
+import { URLField } from '../../../fields/URLField';
+import { gptImageLabel } from '../../apis/gpt/GPT';
+import ReactLoading from 'react-loading';
+import { FollowLinkScript } from '../../documents/DocUtils';
+import { basename } from 'path';
+import { ImageUtility } from './generativeFill/generativeFillUtils/ImageHandler';
+import { dropActionType } from '../../util/DropActionTypes';
+import { canvasSize } from './generativeFill/generativeFillUtils/generativeFillConstants';
+import axios from 'axios';
 
 export class ImageEditorData {
     // eslint-disable-next-line no-use-before-define
@@ -59,6 +68,8 @@ export class ImageEditorData {
     public static get AddDoc()                   { return ImageEditorData.imageData.addDoc; } // prettier-ignore
     public static set AddDoc(addDoc: Opt<(doc: Doc | Doc[], annotationKey?: string) => boolean>) { ImageEditorData.set(this.imageData.open, this.imageData.rootDoc, this.imageData.source, addDoc); } // prettier-ignore
 }
+
+const API_URL = 'https://api.unsplash.com/search/photos';
 @observer
 export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     public static LayoutString(fieldKey: string) {
@@ -73,9 +84,14 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     private _marqueeref = React.createRef<MarqueeAnnotator>();
     private _mainCont: React.RefObject<HTMLDivElement> = React.createRef();
     private _annotationLayer: React.RefObject<HTMLDivElement> = React.createRef();
+    private _imageRef: HTMLImageElement | null = null; // <video> ref
+    @observable private _width: number = 0;
+    @observable private _height: number = 0;
+    @observable private searchInput = '';
     @observable _savedAnnotations = new ObservableMap<number, HTMLDivElement[]>();
     @observable _curSuffix = '';
     @observable _error = '';
+    @observable private _loading = false;
     @observable _isHovering = false; // flag to switch between primary and alternate images on hover
     _ffref = React.createRef<CollectionFreeFormView>();
 
@@ -148,6 +164,32 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         Object.values(this._disposers).forEach(disposer => disposer?.());
     }
 
+    fetchImages = async () => {
+        try {
+            const { data } = await axios.get(`${API_URL}?query=${this.searchInput}&page=1&per_page=${1}&client_id=${process.env.VITE_API_KEY}`);
+            console.log('data', data);
+            console.log(data.results);
+            const imageSnapshot = Docs.Create.ImageDocument(data.results[0].urls.small, {
+                _nativeWidth: Doc.NativeWidth(this.layoutDoc),
+                _nativeHeight: Doc.NativeHeight(this.layoutDoc),
+                x: NumCast(this.layoutDoc.x),
+                y: NumCast(this.layoutDoc.y),
+                onClick: FollowLinkScript(),
+                _width: 150,
+                _height: 150,
+                title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
+            });
+            this._props.addDocument?.(imageSnapshot);
+        } catch (error) {
+            console.log(error);
+        }
+    };
+
+    handleSelection = async (selection: string) => {
+        this.searchInput = selection;
+        const images = await this.fetchImages();
+    };
+
     @undoBatch
     drop = (e: Event, de: DragManager.DropEvent) => {
         if (de.complete.docDragData) {
@@ -259,10 +301,189 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         return cropping;
     };
 
+    createCanvas = async (downX?: number, downY?: number, cb?: (filename: string, x: number | undefined, y: number | undefined) => void) => {
+        const width = NumCast(this.layoutDoc._width);
+        const canvas = document.createElement('canvas');
+        // canvas.width = 640;
+        // canvas.height = (640 * Doc.NativeHeight(this.layoutDoc)) / (Doc.NativeWidth(this.layoutDoc) || 1);
+        canvas.width = NumCast(this.layoutDoc._width);
+        canvas.height = NumCast(this.layoutDoc._height);
+        const ctx = canvas.getContext('2d'); // draw image to canvas. scale to target dimensions
+        if (ctx) {
+            // this._imageRef && ctx.drawImage(this._imageRef, 0, 0, canvas.width, canvas.height);
+            this._imageRef && ctx.drawImage(this._imageRef, NumCast(this._marqueeref.current?.left), NumCast(this._marqueeref.current?.top), this._width, this._height, 0, 0, 1000, 1000);
+            //this._imageRef && ctx.drawImage(this._imageRef, 0, 0, 2000, 1000, 0, 0, canvas.width, canvas.height);
+            // console.log(NumCast(this._marqueeref.current?.left) + 100);
+        }
+        const blob = await ImageUtility.canvasToBlob(canvas);
+        return ImageBox.selectUrlToBase64(blob);
+
+        // if (this._imageRef) {
+        //     const canv = ImageUtility.getCroppedImg(this._imageRef, this._imageRef.width, this._imageRef.height);
+        //     console.log(this._imageRef.width);
+        //     if (canv) {
+        //         const blob = await ImageUtility.canvasToBlob(canv);
+        //         return ImageBox.selectUrlToBase64(blob);
+        //     }
+        // }
+        if (!this._imageRef) {
+            const b = Docs.Create.LabelDocument({
+                x: NumCast(this.layoutDoc.x) + width,
+                y: NumCast(this.layoutDoc.y, 1),
+                _width: 150,
+                _height: 50,
+                // title: (this.layoutDoc._layout_currentTimecode || 0).toString(),
+                onClick: FollowLinkScript(),
+            });
+            this._props.addDocument?.(b);
+            DocUtils.MakeLink(b, this.Document, { link_relationship: 'image snapshot' });
+        } else {
+            // convert to desired file format
+            // const dataUrl = canvas.toDataURL('image/png'); // can also use 'image/png'
+            // // if you want to preview the captured image,
+            // const retitled = StrCast(this.Document.title).replace(/[ -.:]/g, '');
+            // const encodedFilename = encodeURIComponent(('snapshot' + retitled + '_' + (this.layoutDoc._layout_currentTimecode || 0).toString()).replace(/[./?=]/g, '_'));
+            // const filename = basename(encodedFilename);
+            // ClientUtils.convertDataUri(dataUrl, filename).then((returnedFilename: string) => returnedFilename && (cb ?? this.createSnapshotLink)(returnedFilename, downX, downY));
+        }
+        // convert to desired file format
+
+        // const dataUrl = canvas.toDataURL('image/png'); // can also use 'image/png'
+        // // if you want to preview the captured image,
+        // const retitled = StrCast(this.Document.title).replace(/[ -.:]/g, '');
+        // const encodedFilename = encodeURIComponent(('snapshot' + retitled + '_' + (this.layoutDoc._layout_currentTimecode || 0).toString()).replace(/[./?=]/g, '_'));
+        // const filename = basename(encodedFilename);
+        //ClientUtils.convertDataUri(dataUrl, filename).then((returnedFilename: string) => returnedFilename && (cb ?? this.createSnapshotLink)(returnedFilename, downX, downY));
+        // }
+        // const docViewContent = this.DocumentView?.().ContentDiv!;
+        // if (docViewContent instanceof HTMLCanvasElement) {
+        //     const canvas = docViewContent;
+        //     const img = document.createElement('img'); // create a Image Element
+        //     img.src = canvas.toDataURL(); // image sourcez
+        //     img.style.width = canvas.style.width;
+        //     img.style.height = canvas.style.height;
+        //     const parEle = newCan.parentElement as HTMLElement;
+        //     parEle.removeChild(newCan);
+        //     parEle.appendChild(img);
+        // }
+    };
+
+    createSnapshotLink = (imagePath: string, downX?: number, downY?: number) => {
+        const url = !imagePath.startsWith('/') ? ClientUtils.CorsProxy(imagePath) : imagePath;
+        const width = NumCast(this.layoutDoc._width) || 1;
+        const height = NumCast(this.layoutDoc._height);
+        const imageSnapshot = Docs.Create.ImageDocument(url, {
+            _nativeWidth: Doc.NativeWidth(this.layoutDoc),
+            _nativeHeight: Doc.NativeHeight(this.layoutDoc),
+            x: NumCast(this.layoutDoc.x) + width,
+            y: NumCast(this.layoutDoc.y),
+            onClick: FollowLinkScript(),
+            _width: 150,
+            _height: (height / width) * 150,
+            title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
+        });
+        Doc.SetNativeWidth(imageSnapshot[DocData], Doc.NativeWidth(this.layoutDoc));
+        Doc.SetNativeHeight(imageSnapshot[DocData], Doc.NativeHeight(this.layoutDoc));
+        this._props.addDocument?.(imageSnapshot);
+        DocUtils.MakeLink(imageSnapshot, this.getAnchor(true), { link_relationship: 'video snapshot' });
+        // link && (DocCast(link.link_anchor_2)[DocData].timecodeToHide = NumCast(DocCast(link.link_anchor_2).timecodeToShow) + 3);  // do we need to set an end time? should default to +0.1
+        setTimeout(() => downX !== undefined && downY !== undefined && DocumentView.getFirstDocumentView(imageSnapshot)?.startDragging(downX, downY, dropActionType.move, true));
+    };
+
+    /**
+     * 
+        if (oldDiv instanceof HTMLCanvasElement) {
+            const canvas = oldDiv;
+            const img = document.createElement('img'); // create a Image Element
+            img.src = canvas.toDataURL(); // image sourcez
+            img.style.width = canvas.style.width;
+            img.style.height = canvas.style.height;
+            const newCan = newDiv as HTMLCanvasElement;
+            const parEle = newCan.parentElement as HTMLElement;
+            parEle.removeChild(newCan);
+            parEle.appendChild(img);
+        }
+     */
+
+    static selectUrlToBase64 = async (blob: Blob): Promise<string> => {
+        try {
+            return new Promise((resolve, reject) => {
+                const reader = new FileReader();
+                reader.readAsDataURL(blob);
+                reader.onloadend = () => resolve(reader.result as string);
+                reader.onerror = error => reject(error);
+            });
+        } catch (error) {
+            console.error('Error:', error);
+            throw error;
+        }
+    };
+
+    static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
+        try {
+            const response = await fetch(imageUrl);
+            const blob = await response.blob();
+
+            return new Promise((resolve, reject) => {
+                const reader = new FileReader();
+                reader.readAsDataURL(blob);
+                reader.onloadend = () => resolve(reader.result as string);
+                reader.onerror = error => reject(error);
+            });
+        } catch (error) {
+            console.error('Error:', error);
+            throw error;
+        }
+    };
+
+    getImageDesc = async () => {
+        // if (StrCast(this.dataDoc.description)) return StrCast(this.dataDoc.description); // Return existing description
+        const { href } = (this.dataDoc.data as URLField).url;
+        const hrefParts = href.split('.');
+        const hrefComplete = `${hrefParts[0]}_o.${hrefParts[1]}`;
+        this._loading = true;
+        try {
+            // const hrefBase64 = await ImageBox.imageUrlToBase64(hrefComplete);
+            const hrefBase64 = await this.createCanvas();
+            const response = await gptImageLabel(hrefBase64, 'Tell me what words you see on this image.');
+            //const response = await gptImageLabel(hrefBase64, 'Make flashcards out of this text with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ');
+            console.log(response);
+            // AnchorMenu.Instance.transferToFlashcard(response);
+            // this.Document[DocData].description = response.trim();
+            // return response; // Return the response
+        } catch (error) {
+            console.log('Error');
+        }
+        this._loading = false;
+        // return '';
+    };
+
+    @action
+    setRef = (iref: HTMLImageElement | null) => {
+        this._imageRef = iref;
+        // if (iref) {
+        //     this._videoRef!.ontimeupdate = this.updateTimecode;
+        //     // @ts-ignore
+        //     // vref.onfullscreenchange = action((e) => this._fullScreen = vref.webkitDisplayingFullscreen);
+        //     this._disposers.reactionDisposer?.();
+        //     this._disposers.reactionDisposer = reaction(
+        //         () => NumCast(this.layoutDoc._layout_currentTimecode),
+        //         time => {
+        //             !this._playing && (vref.currentTime = time);
+        //         },
+        //         { fireImmediately: true }
+        //     );
+
+        //     (!this.dataDoc[this.fieldKey + '_thumbnails'] || StrListCast(this.dataDoc[this.fieldKey + '_thumbnails']).length !== VideoThumbnails.DENSE) && this.getVideoThumbnails();
+        // }
+    };
+
     specificContextMenu = (): void => {
         const field = Cast(this.dataDoc[this.fieldKey], ImageField);
         if (field) {
             const funcs: ContextMenuProps[] = [];
+            // funcs.push({ description: 'Create ai flashcards', event: () => this.getImageDesc(), icon: 'id-card' });
+            funcs.push({ description: 'Get Images', event: () => this.handleSelection('Cats'), icon: 'redo-alt' });
             funcs.push({ description: 'Rotate Clockwise 90', event: this.rotate, icon: 'redo-alt' });
             funcs.push({ description: `Show ${this.layoutDoc._showFullRes ? 'Dynamic Res' : 'Full Res'}`, event: this.resolution, icon: 'expand' });
             funcs.push({ description: 'Set Native Pixel Size', event: this.setNativeSize, icon: 'expand-arrows-alt' });
@@ -391,6 +612,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                 <div className="imageBox-fader" style={{ opacity: backAlpha }}>
                     <img
                         alt=""
+                        ref={this.setRef}
                         key="paths"
                         src={srcpath}
                         style={{ transform, transformOrigin }}
@@ -432,6 +654,8 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                 action(moveEv => {
                     MarqueeAnnotator.clearAnnotations(this._savedAnnotations);
                     this._marqueeref.current?.onInitiateSelection([moveEv.clientX, moveEv.clientY]);
+                    this._width = moveEv.clientX;
+                    this._height = moveEv.clientY;
                     return true;
                 }),
                 returnFalse,
@@ -443,6 +667,8 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     @action
     finishMarquee = () => {
         this._getAnchor = AnchorMenu.Instance?.GetAnchor;
+        AnchorMenu.Instance.gptFlashcards = this.getImageDesc;
+        AnchorMenu.Instance.addToCollection = this._props.DocumentView?.()._props.addDocument;
         this._marqueeref.current?.onTerminateSelection();
         this._props.select(false);
     };
@@ -500,6 +726,11 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                     addDocument={this.addDocument}>
                     {this.content}
                 </CollectionFreeFormView>
+                {this._loading ? (
+                    <div className="loading-spinner" style={{ position: 'absolute' }}>
+                        <ReactLoading type="spin" height={50} width={50} color={'blue'} />
+                    </div>
+                ) : null}
                 {this.annotationLayer}
                 {!this._mainCont.current || !this.DocumentView || !this._annotationLayer.current ? null : (
                     <MarqueeAnnotator
@@ -518,6 +749,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                         marqueeContainer={this._mainCont.current}
                         highlightDragSrcColor=""
                         anchorMenuCrop={this.crop}
+                        // anchorMenuFlashcard={() => this.getImageDesc()}
                     />
                 )}
             </div>
diff --git a/src/client/views/pdf/AnchorMenu.tsx b/src/client/views/pdf/AnchorMenu.tsx
index c1198b4f7..777117f26 100644
--- a/src/client/views/pdf/AnchorMenu.tsx
+++ b/src/client/views/pdf/AnchorMenu.tsx
@@ -54,6 +54,9 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
         this._y = y;
     };
 
+    @computed public get selectedText() {
+        return this._selectedText;
+    }
     public onMakeAnchor: () => Opt<Doc> = () => undefined; // Method to get anchor from text search
 
     public OnCrop: (e: PointerEvent) => void = unimplementedFunction;
@@ -68,6 +71,7 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
     public MakeTargetToggle: () => void = unimplementedFunction;
     public ShowTargetTrail: () => void = unimplementedFunction;
     public IsTargetToggler: () => boolean = returnFalse;
+    public gptFlashcards: () => void = unimplementedFunction;
     public get Active() {
         return this._left > 0;
     }
@@ -110,23 +114,23 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
      * Invokes the API with the selected text and stores it in the selected text.
      * @param e pointer down event
      */
-    gptFlashcards = async (e: React.PointerEvent) => {
-        const queryText = this._selectedText;
-        this._loading = true;
-        try {
-            const res = await gptAPICall(queryText, GPTCallType.FLASHCARD);
-            console.log(res);
-            // GPTPopup.Instance.setText(res || 'Something went wrong.');
-            this.transferToFlashcard(res || 'Something went wrong');
-        } catch (err) {
-            console.error(err);
-        }
-        // GPTPopup.Instance.setLoading(false);
-    };
+    // gptPDFFlashcards = async () => {
+    //     const queryText = this._selectedText;
+    //     this._loading = true;
+    //     try {
+    //         const res = await gptAPICall(queryText, GPTCallType.FLASHCARD);
+    //         console.log(res);
+    //         // GPTPopup.Instance.setText(res || 'Something went wrong.');
+    //         this.transferToFlashcard(res || 'Something went wrong');
+    //     } catch (err) {
+    //         console.error(err);
+    //     }
+    //     // GPTPopup.Instance.setLoading(false);
+    // };
 
-    /*
-     * Transfers the flashcard text generated by GPT on flashcards and creates a collection out them.
-     */
+    // /*
+    //  * Transfers the flashcard text generated by GPT on flashcards and creates a collection out them.
+    //  */
     transferToFlashcard = (text: string) => {
         // put each question generated by GPT on the front of the flashcard
         var senArr = text.trim().split('Question: ');
@@ -236,12 +240,7 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
                         />
                     )}
                     {/* Adds a create flashcards option to the anchor menu, which calls the gptFlashcard method. */}
-                    <IconButton
-                        tooltip="Create flashcards" //
-                        onPointerDown={e => this.gptFlashcards(e)}
-                        icon={<FontAwesomeIcon icon="id-card" size="lg" />}
-                        color={SettingsManager.userColor}
-                    />
+                    <IconButton tooltip="Create flashcards" onPointerDown={this.gptFlashcards} icon={<FontAwesomeIcon icon="id-card" size="lg" />} color={SettingsManager.userColor} />
                     {AnchorMenu.Instance.OnAudio === unimplementedFunction ? null : (
                         <IconButton
                             tooltip="Click to Record Annotation" //
@@ -267,11 +266,11 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
                             />
                         </div>
                     )}
-                    {this._loading ? (
+                    {/* {this._loading ? (
                         <div className="loading-spinner" style={{ position: 'absolute' }}>
                             <ReactLoading type="spin" height={30} width={30} color={'white'} />
                         </div>
-                    ) : null}
+                    ) : null} */}
                 </>
             ) : (
                 <>
diff --git a/src/client/views/pdf/Annotation.scss b/src/client/views/pdf/Annotation.scss
index 329819ea2..26856b74e 100644
--- a/src/client/views/pdf/Annotation.scss
+++ b/src/client/views/pdf/Annotation.scss
@@ -8,20 +8,20 @@
         cursor: pointer;
     }
 }
-.loading-spinner {
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    height: 90%;
-    width: 93%;
-    left: 10;
-    font-size: 20px;
-    font-weight: bold;
-    color: #0b0a0a;
-}
+// .loading-spinner {
+//     display: flex;
+//     justify-content: center;
+//     align-items: center;
+//     height: 90%;
+//     width: 93%;
+//     left: 10;
+//     font-size: 20px;
+//     font-weight: bold;
+//     color: #0b0a0a;
+// }
 
-@keyframes spin {
-    to {
-        transform: rotate(360deg);
-    }
-}
+// @keyframes spin {
+//     to {
+//         transform: rotate(360deg);
+//     }
+// }
diff --git a/src/client/views/pdf/PDFViewer.scss b/src/client/views/pdf/PDFViewer.scss
index d3dd9f727..e70102ce9 100644
--- a/src/client/views/pdf/PDFViewer.scss
+++ b/src/client/views/pdf/PDFViewer.scss
@@ -107,3 +107,24 @@
 .pdfViewerDash-interactive {
     pointer-events: all;
 }
+
+.loading-spinner {
+    position: absolute;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    height: 100%;
+    width: 100%;
+    // left: 50%;
+    // top: 50%;
+    z-index: 200;
+    font-size: 20px;
+    font-weight: bold;
+    color: #17175e;
+}
+
+@keyframes spin {
+    to {
+        transform: rotate(360deg);
+    }
+}
diff --git a/src/client/views/pdf/PDFViewer.tsx b/src/client/views/pdf/PDFViewer.tsx
index af7a5774d..befbee48b 100644
--- a/src/client/views/pdf/PDFViewer.tsx
+++ b/src/client/views/pdf/PDFViewer.tsx
@@ -32,6 +32,8 @@ import { Annotation } from './Annotation';
 import { GPTPopup } from './GPTPopup/GPTPopup';
 import { Docs } from '../../documents/Documents';
 import './PDFViewer.scss';
+import { GPTCallType, gptAPICall } from '../../apis/gpt/GPT';
+import ReactLoading from 'react-loading';
 
 // pdfjsLib.GlobalWorkerOptions.workerSrc = `/assets/pdf.worker.js`;
 // The workerSrc property shall be specified.
@@ -70,6 +72,7 @@ export class PDFViewer extends ObservableReactComponent<IViewerProps> {
     @observable _textSelecting = true;
     @observable _showWaiting = true;
     @observable Index: number = -1;
+    @observable private _loading = false;
 
     private _pdfViewer: any;
     private _styleRule: any; // stylesheet rule for making hyperlinks clickable
@@ -406,6 +409,49 @@ export class PDFViewer extends ObservableReactComponent<IViewerProps> {
         }
     };
 
+    gptPDFFlashcards = async () => {
+        const queryText = this._selectionText;
+        this._loading = true;
+        try {
+            const res = await gptAPICall(queryText, GPTCallType.FLASHCARD);
+            console.log(res);
+            // GPTPopup.Instance.setText(res || 'Something went wrong.');
+            AnchorMenu.Instance.transferToFlashcard(res || 'Something went wrong');
+            // this.transferToFlashcard(res || 'Something went wrong');
+        } catch (err) {
+            console.error(err);
+        }
+        this._loading = false;
+        // GPTPopup.Instance.setLoading(false);
+    };
+
+    // transferToFlashcard = (text: string) => {
+    //     // put each question generated by GPT on the front of the flashcard
+    //     var senArr = text.trim().split('Question: ');
+    //     var collectionArr: Doc[] = [];
+    //     for (let i = 1; i < senArr.length; i++) {
+    //         console.log('Arr ' + i + ': ' + senArr[i]);
+    //         const newDoc = Docs.Create.ComparisonDocument(senArr[i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
+    //         newDoc.text = senArr[i];
+    //         collectionArr.push(newDoc);
+    //     }
+    //     // create a new carousel collection of these flashcards
+    //     const newCol = Docs.Create.CarouselDocument(collectionArr, {
+    //         _width: 250,
+    //         _height: 200,
+    //         _layout_fitWidth: false,
+    //         _layout_autoHeight: true,
+    //     });
+
+    //     newCol.x = this._props.layoutDoc['x'];
+    //     newCol.y = this._props.layoutDoc['y'];
+    //     newCol.zIndex = 100;
+
+    //     this._props.DocumentView?.()._props.addDocument?.(newCol);
+    //     console.log('HERE');
+    //     this._loading = false;
+    // };
+
     @action
     finishMarquee = (/* x?: number, y?: number */) => {
         this._getAnchor = AnchorMenu.Instance?.GetAnchor;
@@ -437,6 +483,7 @@ export class PDFViewer extends ObservableReactComponent<IViewerProps> {
         GPTPopup.Instance.addDoc = this._props.sidebarAddDoc;
         // allows for creating collection
         AnchorMenu.Instance.addToCollection = this._props.DocumentView?.()._props.addDocument;
+        AnchorMenu.Instance.gptFlashcards = this.gptPDFFlashcards;
     };
 
     @action
@@ -625,6 +672,11 @@ export class PDFViewer extends ObservableReactComponent<IViewerProps> {
                         />
                     )}
                 </div>
+                {this._loading ? (
+                    <div className="loading-spinner" style={{ position: 'absolute' }}>
+                        <ReactLoading type="spin" height={80} width={80} color={'blue'} />
+                    </div>
+                ) : null}
             </div>
         );
     }
-- 
cgit v1.2.3-70-g09d2


From 6920c387edc480341771edb02f0ac1097c85ae25 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Sun, 23 Jun 2024 19:58:19 -0400
Subject: audio quiz cards

---
 package-lock.json                                  | 10158 ++++++++++---------
 package.json                                       |     3 +
 src/client/apis/gpt/GPT.ts                         |     9 +-
 src/client/views/nodes/ComparisonBox.tsx           |   505 +-
 src/client/views/nodes/ImageBox.tsx                |     2 +-
 .../views/nodes/formattedText/FormattedTextBox.tsx |    48 +-
 src/client/views/pdf/AnchorMenu.tsx                |     2 +
 src/client/views/pdf/PDFViewer.tsx                 |   138 +
 8 files changed, 5765 insertions(+), 5100 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/package-lock.json b/package-lock.json
index 3a4ca6668..1a8e04611 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -122,6 +122,7 @@
                 "html-to-image": "^1.11.11",
                 "html-to-text": "^9.0.5",
                 "html-webpack-plugin": "^5.5.3",
+                "html2canvas": "^1.4.1",
                 "http-browserify": "^1.7.0",
                 "https": "^1.0.0",
                 "https-browserify": "^1.0.0",
@@ -196,6 +197,7 @@
                 "react-measure": "^2.5.2",
                 "react-resizable": "^3.0.5",
                 "react-select": "^5.8.0",
+                "react-speech-recognition": "^3.10.0",
                 "react-textarea-autosize": "^8.5.3",
                 "react-type-animation": "^3.2.0",
                 "react-xarrows": "^2.0.2",
@@ -280,6 +282,7 @@
                 "@types/react-grid-layout": "^1.3.5",
                 "@types/react-measure": "^2.0.12",
                 "@types/react-reconciler": "^0.28.8",
+                "@types/react-speech-recognition": "^3.9.5",
                 "@types/request": "^2.48.12",
                 "@types/request-promise": "^4.1.51",
                 "@types/shelljs": "^0.8.15",
@@ -317,68 +320,67 @@
             }
         },
         "node_modules/@adobe/react-spectrum": {
-            "version": "3.35.0",
-            "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.35.0.tgz",
-            "integrity": "sha512-dhCKWKDS/xF02EpWluicH7Va6KAANbrUx4rb1UeeFT3czhwz44oCQ74ZYviVedNv6Bq7O22/kbMa20rDdyt/4A==",
-            "dependencies": {
-                "@internationalized/string": "^3.2.2",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/ssr": "^3.9.3",
-                "@react-aria/utils": "^3.24.0",
-                "@react-aria/visually-hidden": "^3.8.11",
-                "@react-spectrum/actionbar": "^3.4.4",
-                "@react-spectrum/actiongroup": "^3.10.4",
-                "@react-spectrum/avatar": "^3.0.11",
-                "@react-spectrum/badge": "^3.1.12",
-                "@react-spectrum/breadcrumbs": "^3.9.6",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/buttongroup": "^3.6.12",
-                "@react-spectrum/calendar": "^3.4.8",
-                "@react-spectrum/checkbox": "^3.9.5",
-                "@react-spectrum/combobox": "^3.12.4",
-                "@react-spectrum/contextualhelp": "^3.6.10",
-                "@react-spectrum/datepicker": "^3.9.5",
-                "@react-spectrum/dialog": "^3.8.10",
-                "@react-spectrum/divider": "^3.5.12",
-                "@react-spectrum/dnd": "^3.3.9",
-                "@react-spectrum/dropzone": "^3.0.0",
-                "@react-spectrum/filetrigger": "^3.0.0",
-                "@react-spectrum/form": "^3.7.5",
-                "@react-spectrum/icon": "^3.7.12",
-                "@react-spectrum/illustratedmessage": "^3.5.0",
-                "@react-spectrum/image": "^3.5.0",
-                "@react-spectrum/inlinealert": "^3.2.4",
-                "@react-spectrum/labeledvalue": "^3.1.13",
-                "@react-spectrum/layout": "^3.6.4",
-                "@react-spectrum/link": "^3.6.6",
-                "@react-spectrum/list": "^3.7.9",
-                "@react-spectrum/listbox": "^3.12.8",
-                "@react-spectrum/menu": "^3.19.0",
-                "@react-spectrum/meter": "^3.5.0",
-                "@react-spectrum/numberfield": "^3.9.2",
-                "@react-spectrum/overlays": "^5.6.0",
-                "@react-spectrum/picker": "^3.14.4",
-                "@react-spectrum/progress": "^3.7.6",
-                "@react-spectrum/provider": "^3.9.6",
-                "@react-spectrum/radio": "^3.7.5",
-                "@react-spectrum/searchfield": "^3.8.5",
-                "@react-spectrum/slider": "^3.6.8",
-                "@react-spectrum/statuslight": "^3.5.12",
-                "@react-spectrum/switch": "^3.5.4",
-                "@react-spectrum/table": "^3.12.9",
-                "@react-spectrum/tabs": "^3.8.9",
-                "@react-spectrum/tag": "^3.2.5",
-                "@react-spectrum/text": "^3.5.4",
-                "@react-spectrum/textfield": "^3.12.0",
-                "@react-spectrum/theme-dark": "^3.5.9",
-                "@react-spectrum/theme-default": "^3.5.9",
-                "@react-spectrum/theme-light": "^3.4.9",
-                "@react-spectrum/tooltip": "^3.6.6",
-                "@react-spectrum/view": "^3.6.9",
-                "@react-spectrum/well": "^3.4.12",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/data": "^3.11.3",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.35.1",
+            "integrity": "sha512-QNhsaEHv5S5Vqsk7b8aCV9F7qAnWw8VJ/Nep/SOjeiJ7vK993jEOetEhSsUIQ8VHsMKs6qkTtZr0/DKoV+Z/9w==",
+            "dependencies": {
+                "@internationalized/string": "^3.2.3",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/ssr": "^3.9.4",
+                "@react-aria/utils": "^3.24.1",
+                "@react-aria/visually-hidden": "^3.8.12",
+                "@react-spectrum/actionbar": "^3.4.5",
+                "@react-spectrum/actiongroup": "^3.10.5",
+                "@react-spectrum/avatar": "^3.0.12",
+                "@react-spectrum/badge": "^3.1.13",
+                "@react-spectrum/breadcrumbs": "^3.9.7",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/buttongroup": "^3.6.13",
+                "@react-spectrum/calendar": "^3.4.9",
+                "@react-spectrum/checkbox": "^3.9.6",
+                "@react-spectrum/combobox": "^3.12.5",
+                "@react-spectrum/contextualhelp": "^3.6.11",
+                "@react-spectrum/datepicker": "^3.9.6",
+                "@react-spectrum/dialog": "^3.8.11",
+                "@react-spectrum/divider": "^3.5.13",
+                "@react-spectrum/dnd": "^3.3.10",
+                "@react-spectrum/dropzone": "^3.0.1",
+                "@react-spectrum/filetrigger": "^3.0.1",
+                "@react-spectrum/form": "^3.7.6",
+                "@react-spectrum/icon": "^3.7.13",
+                "@react-spectrum/illustratedmessage": "^3.5.1",
+                "@react-spectrum/image": "^3.5.1",
+                "@react-spectrum/inlinealert": "^3.2.5",
+                "@react-spectrum/labeledvalue": "^3.1.14",
+                "@react-spectrum/layout": "^3.6.5",
+                "@react-spectrum/link": "^3.6.7",
+                "@react-spectrum/list": "^3.7.10",
+                "@react-spectrum/listbox": "^3.12.9",
+                "@react-spectrum/menu": "^3.19.1",
+                "@react-spectrum/meter": "^3.5.1",
+                "@react-spectrum/numberfield": "^3.9.3",
+                "@react-spectrum/overlays": "^5.6.1",
+                "@react-spectrum/picker": "^3.14.5",
+                "@react-spectrum/progress": "^3.7.7",
+                "@react-spectrum/provider": "^3.9.7",
+                "@react-spectrum/radio": "^3.7.6",
+                "@react-spectrum/searchfield": "^3.8.6",
+                "@react-spectrum/slider": "^3.6.9",
+                "@react-spectrum/statuslight": "^3.5.13",
+                "@react-spectrum/switch": "^3.5.5",
+                "@react-spectrum/table": "^3.12.10",
+                "@react-spectrum/tabs": "^3.8.10",
+                "@react-spectrum/tag": "^3.2.6",
+                "@react-spectrum/text": "^3.5.5",
+                "@react-spectrum/textfield": "^3.12.1",
+                "@react-spectrum/theme-dark": "^3.5.10",
+                "@react-spectrum/theme-default": "^3.5.10",
+                "@react-spectrum/theme-light": "^3.4.10",
+                "@react-spectrum/tooltip": "^3.6.7",
+                "@react-spectrum/view": "^3.6.10",
+                "@react-spectrum/well": "^3.4.13",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/data": "^3.11.4",
+                "@react-types/shared": "^3.23.1",
                 "client-only": "^0.0.1"
             },
             "peerDependencies": {
@@ -568,7 +570,6 @@
         },
         "node_modules/@azure/storage-blob": {
             "version": "12.18.0",
-            "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.18.0.tgz",
             "integrity": "sha512-BzBZJobMoDyjJsPRMLNHvqHycTGrT8R/dtcTx9qUFcqwSRfGVK9A/cZ7Nx38UQydT9usZGbaDCN75QRNjezSAA==",
             "dependencies": {
                 "@azure/abort-controller": "^1.0.0",
@@ -585,11 +586,11 @@
             }
         },
         "node_modules/@babel/code-frame": {
-            "version": "7.24.2",
-            "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
-            "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+            "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
             "dependencies": {
-                "@babel/highlight": "^7.24.2",
+                "@babel/highlight": "^7.24.7",
                 "picocolors": "^1.0.0"
             },
             "engines": {
@@ -597,29 +598,29 @@
             }
         },
         "node_modules/@babel/compat-data": {
-            "version": "7.24.4",
-            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz",
-            "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz",
+            "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/core": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz",
-            "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz",
+            "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==",
             "peer": true,
             "dependencies": {
                 "@ampproject/remapping": "^2.2.0",
-                "@babel/code-frame": "^7.24.2",
-                "@babel/generator": "^7.24.5",
-                "@babel/helper-compilation-targets": "^7.23.6",
-                "@babel/helper-module-transforms": "^7.24.5",
-                "@babel/helpers": "^7.24.5",
-                "@babel/parser": "^7.24.5",
-                "@babel/template": "^7.24.0",
-                "@babel/traverse": "^7.24.5",
-                "@babel/types": "^7.24.5",
+                "@babel/code-frame": "^7.24.7",
+                "@babel/generator": "^7.24.7",
+                "@babel/helper-compilation-targets": "^7.24.7",
+                "@babel/helper-module-transforms": "^7.24.7",
+                "@babel/helpers": "^7.24.7",
+                "@babel/parser": "^7.24.7",
+                "@babel/template": "^7.24.7",
+                "@babel/traverse": "^7.24.7",
+                "@babel/types": "^7.24.7",
                 "convert-source-map": "^2.0.0",
                 "debug": "^4.1.0",
                 "gensync": "^1.0.0-beta.2",
@@ -635,11 +636,11 @@
             }
         },
         "node_modules/@babel/generator": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz",
-            "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz",
+            "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==",
             "dependencies": {
-                "@babel/types": "^7.24.5",
+                "@babel/types": "^7.24.7",
                 "@jridgewell/gen-mapping": "^0.3.5",
                 "@jridgewell/trace-mapping": "^0.3.25",
                 "jsesc": "^2.5.1"
@@ -649,34 +650,35 @@
             }
         },
         "node_modules/@babel/helper-annotate-as-pure": {
-            "version": "7.22.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
-            "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz",
+            "integrity": "sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==",
             "dependencies": {
-                "@babel/types": "^7.22.5"
+                "@babel/types": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-            "version": "7.22.15",
-            "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
-            "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
+            "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
             "dependencies": {
-                "@babel/types": "^7.22.15"
+                "@babel/traverse": "^7.24.7",
+                "@babel/types": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-compilation-targets": {
-            "version": "7.23.6",
-            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
-            "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz",
+            "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==",
             "dependencies": {
-                "@babel/compat-data": "^7.23.5",
-                "@babel/helper-validator-option": "^7.23.5",
+                "@babel/compat-data": "^7.24.7",
+                "@babel/helper-validator-option": "^7.24.7",
                 "browserslist": "^4.22.2",
                 "lru-cache": "^5.1.1",
                 "semver": "^6.3.1"
@@ -686,18 +688,18 @@
             }
         },
         "node_modules/@babel/helper-create-class-features-plugin": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz",
-            "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==",
-            "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.22.5",
-                "@babel/helper-environment-visitor": "^7.22.20",
-                "@babel/helper-function-name": "^7.23.0",
-                "@babel/helper-member-expression-to-functions": "^7.24.5",
-                "@babel/helper-optimise-call-expression": "^7.22.5",
-                "@babel/helper-replace-supers": "^7.24.1",
-                "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
-                "@babel/helper-split-export-declaration": "^7.24.5",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz",
+            "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==",
+            "dependencies": {
+                "@babel/helper-annotate-as-pure": "^7.24.7",
+                "@babel/helper-environment-visitor": "^7.24.7",
+                "@babel/helper-function-name": "^7.24.7",
+                "@babel/helper-member-expression-to-functions": "^7.24.7",
+                "@babel/helper-optimise-call-expression": "^7.24.7",
+                "@babel/helper-replace-supers": "^7.24.7",
+                "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+                "@babel/helper-split-export-declaration": "^7.24.7",
                 "semver": "^6.3.1"
             },
             "engines": {
@@ -707,12 +709,23 @@
                 "@babel/core": "^7.0.0"
             }
         },
+        "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": {
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+            "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+            "dependencies": {
+                "@babel/types": "^7.24.7"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
         "node_modules/@babel/helper-create-regexp-features-plugin": {
-            "version": "7.22.15",
-            "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
-            "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz",
+            "integrity": "sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA==",
             "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.22.5",
+                "@babel/helper-annotate-as-pure": "^7.24.6",
                 "regexpu-core": "^5.3.1",
                 "semver": "^6.3.1"
             },
@@ -739,68 +752,72 @@
             }
         },
         "node_modules/@babel/helper-environment-visitor": {
-            "version": "7.22.20",
-            "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
-            "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
+            "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
+            "dependencies": {
+                "@babel/types": "^7.24.7"
+            },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-function-name": {
-            "version": "7.23.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
-            "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
+            "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
             "dependencies": {
-                "@babel/template": "^7.22.15",
-                "@babel/types": "^7.23.0"
+                "@babel/template": "^7.24.7",
+                "@babel/types": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-hoist-variables": {
-            "version": "7.22.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
-            "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
+            "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
             "dependencies": {
-                "@babel/types": "^7.22.5"
+                "@babel/types": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-member-expression-to-functions": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz",
-            "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz",
+            "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==",
             "dependencies": {
-                "@babel/types": "^7.24.5"
+                "@babel/traverse": "^7.24.7",
+                "@babel/types": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-module-imports": {
-            "version": "7.24.3",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz",
-            "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz",
+            "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==",
             "dependencies": {
-                "@babel/types": "^7.24.0"
+                "@babel/types": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-module-transforms": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz",
-            "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz",
+            "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==",
             "dependencies": {
-                "@babel/helper-environment-visitor": "^7.22.20",
-                "@babel/helper-module-imports": "^7.24.3",
-                "@babel/helper-simple-access": "^7.24.5",
-                "@babel/helper-split-export-declaration": "^7.24.5",
-                "@babel/helper-validator-identifier": "^7.24.5"
+                "@babel/helper-environment-visitor": "^7.24.7",
+                "@babel/helper-module-imports": "^7.24.7",
+                "@babel/helper-simple-access": "^7.24.7",
+                "@babel/helper-split-export-declaration": "^7.24.7",
+                "@babel/helper-validator-identifier": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -809,33 +826,45 @@
                 "@babel/core": "^7.0.0"
             }
         },
+        "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-module-imports": {
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+            "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+            "dependencies": {
+                "@babel/traverse": "^7.24.7",
+                "@babel/types": "^7.24.7"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
         "node_modules/@babel/helper-optimise-call-expression": {
-            "version": "7.22.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
-            "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
+            "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
             "dependencies": {
-                "@babel/types": "^7.22.5"
+                "@babel/types": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-plugin-utils": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz",
-            "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz",
+            "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-remap-async-to-generator": {
-            "version": "7.22.20",
-            "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
-            "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz",
+            "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==",
             "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.22.5",
-                "@babel/helper-environment-visitor": "^7.22.20",
-                "@babel/helper-wrap-function": "^7.22.20"
+                "@babel/helper-annotate-as-pure": "^7.24.7",
+                "@babel/helper-environment-visitor": "^7.24.7",
+                "@babel/helper-wrap-function": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -844,14 +873,25 @@
                 "@babel/core": "^7.0.0"
             }
         },
+        "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": {
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+            "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+            "dependencies": {
+                "@babel/types": "^7.24.7"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
         "node_modules/@babel/helper-replace-supers": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz",
-            "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz",
+            "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==",
             "dependencies": {
-                "@babel/helper-environment-visitor": "^7.22.20",
-                "@babel/helper-member-expression-to-functions": "^7.23.0",
-                "@babel/helper-optimise-call-expression": "^7.22.5"
+                "@babel/helper-environment-visitor": "^7.24.7",
+                "@babel/helper-member-expression-to-functions": "^7.24.7",
+                "@babel/helper-optimise-call-expression": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -861,95 +901,97 @@
             }
         },
         "node_modules/@babel/helper-simple-access": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz",
-            "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+            "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
             "dependencies": {
-                "@babel/types": "^7.24.5"
+                "@babel/traverse": "^7.24.7",
+                "@babel/types": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-            "version": "7.22.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
-            "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
+            "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
             "dependencies": {
-                "@babel/types": "^7.22.5"
+                "@babel/traverse": "^7.24.7",
+                "@babel/types": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-split-export-declaration": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz",
-            "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
+            "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
             "dependencies": {
-                "@babel/types": "^7.24.5"
+                "@babel/types": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-string-parser": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz",
-            "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz",
+            "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-validator-identifier": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz",
-            "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+            "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-validator-option": {
-            "version": "7.23.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
-            "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz",
+            "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-wrap-function": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz",
-            "integrity": "sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz",
+            "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==",
             "dependencies": {
-                "@babel/helper-function-name": "^7.23.0",
-                "@babel/template": "^7.24.0",
-                "@babel/types": "^7.24.5"
+                "@babel/helper-function-name": "^7.24.7",
+                "@babel/template": "^7.24.7",
+                "@babel/traverse": "^7.24.7",
+                "@babel/types": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helpers": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz",
-            "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz",
+            "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==",
             "peer": true,
             "dependencies": {
-                "@babel/template": "^7.24.0",
-                "@babel/traverse": "^7.24.5",
-                "@babel/types": "^7.24.5"
+                "@babel/template": "^7.24.7",
+                "@babel/types": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/highlight": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz",
-            "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+            "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
             "dependencies": {
-                "@babel/helper-validator-identifier": "^7.24.5",
+                "@babel/helper-validator-identifier": "^7.24.7",
                 "chalk": "^2.4.2",
                 "js-tokens": "^4.0.0",
                 "picocolors": "^1.0.0"
@@ -959,9 +1001,9 @@
             }
         },
         "node_modules/@babel/parser": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz",
-            "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz",
+            "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
             "bin": {
                 "parser": "bin/babel-parser.js"
             },
@@ -970,12 +1012,12 @@
             }
         },
         "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz",
-            "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz",
+            "integrity": "sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==",
             "dependencies": {
-                "@babel/helper-environment-visitor": "^7.22.20",
-                "@babel/helper-plugin-utils": "^7.24.5"
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -985,11 +1027,11 @@
             }
         },
         "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz",
-            "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.6.tgz",
+            "integrity": "sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -999,13 +1041,13 @@
             }
         },
         "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz",
-            "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz",
+            "integrity": "sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
-                "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
-                "@babel/plugin-transform-optional-chaining": "^7.24.1"
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6",
+                "@babel/plugin-transform-optional-chaining": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1015,12 +1057,12 @@
             }
         },
         "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz",
-            "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz",
+            "integrity": "sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ==",
             "dependencies": {
-                "@babel/helper-environment-visitor": "^7.22.20",
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1099,11 +1141,11 @@
             }
         },
         "node_modules/@babel/plugin-syntax-import-assertions": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz",
-            "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz",
+            "integrity": "sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1113,11 +1155,11 @@
             }
         },
         "node_modules/@babel/plugin-syntax-import-attributes": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz",
-            "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz",
+            "integrity": "sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1149,11 +1191,11 @@
             }
         },
         "node_modules/@babel/plugin-syntax-jsx": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz",
-            "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
+            "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1162,6 +1204,14 @@
                 "@babel/core": "^7.0.0-0"
             }
         },
+        "node_modules/@babel/plugin-syntax-jsx/node_modules/@babel/helper-plugin-utils": {
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz",
+            "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==",
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
         "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
             "version": "7.10.4",
             "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
@@ -1272,11 +1322,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-arrow-functions": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz",
-            "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz",
+            "integrity": "sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1286,13 +1336,13 @@
             }
         },
         "node_modules/@babel/plugin-transform-async-generator-functions": {
-            "version": "7.24.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz",
-            "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz",
+            "integrity": "sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA==",
             "dependencies": {
-                "@babel/helper-environment-visitor": "^7.22.20",
-                "@babel/helper-plugin-utils": "^7.24.0",
-                "@babel/helper-remap-async-to-generator": "^7.22.20",
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-remap-async-to-generator": "^7.24.6",
                 "@babel/plugin-syntax-async-generators": "^7.8.4"
             },
             "engines": {
@@ -1303,13 +1353,13 @@
             }
         },
         "node_modules/@babel/plugin-transform-async-to-generator": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz",
-            "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz",
+            "integrity": "sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g==",
             "dependencies": {
-                "@babel/helper-module-imports": "^7.24.1",
-                "@babel/helper-plugin-utils": "^7.24.0",
-                "@babel/helper-remap-async-to-generator": "^7.22.20"
+                "@babel/helper-module-imports": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-remap-async-to-generator": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1319,11 +1369,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-block-scoped-functions": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz",
-            "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz",
+            "integrity": "sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1333,11 +1383,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-block-scoping": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz",
-            "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz",
+            "integrity": "sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.5"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1347,12 +1397,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-class-properties": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz",
-            "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz",
+            "integrity": "sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A==",
             "dependencies": {
-                "@babel/helper-create-class-features-plugin": "^7.24.1",
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-create-class-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1362,12 +1412,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-class-static-block": {
-            "version": "7.24.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz",
-            "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz",
+            "integrity": "sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA==",
             "dependencies": {
-                "@babel/helper-create-class-features-plugin": "^7.24.4",
-                "@babel/helper-plugin-utils": "^7.24.0",
+                "@babel/helper-create-class-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-class-static-block": "^7.14.5"
             },
             "engines": {
@@ -1378,17 +1428,17 @@
             }
         },
         "node_modules/@babel/plugin-transform-classes": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz",
-            "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==",
-            "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.22.5",
-                "@babel/helper-compilation-targets": "^7.23.6",
-                "@babel/helper-environment-visitor": "^7.22.20",
-                "@babel/helper-function-name": "^7.23.0",
-                "@babel/helper-plugin-utils": "^7.24.5",
-                "@babel/helper-replace-supers": "^7.24.1",
-                "@babel/helper-split-export-declaration": "^7.24.5",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz",
+            "integrity": "sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg==",
+            "dependencies": {
+                "@babel/helper-annotate-as-pure": "^7.24.6",
+                "@babel/helper-compilation-targets": "^7.24.6",
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-function-name": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-replace-supers": "^7.24.6",
+                "@babel/helper-split-export-declaration": "^7.24.6",
                 "globals": "^11.1.0"
             },
             "engines": {
@@ -1407,12 +1457,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-computed-properties": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz",
-            "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz",
+            "integrity": "sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
-                "@babel/template": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/template": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1422,11 +1472,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-destructuring": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz",
-            "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz",
+            "integrity": "sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.5"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1436,12 +1486,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-dotall-regex": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz",
-            "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz",
+            "integrity": "sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA==",
             "dependencies": {
-                "@babel/helper-create-regexp-features-plugin": "^7.22.15",
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1451,11 +1501,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-duplicate-keys": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz",
-            "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz",
+            "integrity": "sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1465,11 +1515,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-dynamic-import": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz",
-            "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz",
+            "integrity": "sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
+                "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-dynamic-import": "^7.8.3"
             },
             "engines": {
@@ -1480,12 +1530,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-exponentiation-operator": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz",
-            "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz",
+            "integrity": "sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA==",
             "dependencies": {
-                "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1495,11 +1545,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-export-namespace-from": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz",
-            "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz",
+            "integrity": "sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
+                "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
             },
             "engines": {
@@ -1510,12 +1560,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-for-of": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz",
-            "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz",
+            "integrity": "sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
-                "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1525,13 +1575,13 @@
             }
         },
         "node_modules/@babel/plugin-transform-function-name": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz",
-            "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz",
+            "integrity": "sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q==",
             "dependencies": {
-                "@babel/helper-compilation-targets": "^7.23.6",
-                "@babel/helper-function-name": "^7.23.0",
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-compilation-targets": "^7.24.6",
+                "@babel/helper-function-name": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1541,11 +1591,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-json-strings": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz",
-            "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz",
+            "integrity": "sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
+                "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-json-strings": "^7.8.3"
             },
             "engines": {
@@ -1556,11 +1606,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-literals": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz",
-            "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz",
+            "integrity": "sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1570,11 +1620,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-logical-assignment-operators": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz",
-            "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz",
+            "integrity": "sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
+                "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
             },
             "engines": {
@@ -1585,11 +1635,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-member-expression-literals": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz",
-            "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz",
+            "integrity": "sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1599,12 +1649,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-modules-amd": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz",
-            "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz",
+            "integrity": "sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ==",
             "dependencies": {
-                "@babel/helper-module-transforms": "^7.23.3",
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-module-transforms": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1614,13 +1664,13 @@
             }
         },
         "node_modules/@babel/plugin-transform-modules-commonjs": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz",
-            "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz",
+            "integrity": "sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==",
             "dependencies": {
-                "@babel/helper-module-transforms": "^7.23.3",
-                "@babel/helper-plugin-utils": "^7.24.0",
-                "@babel/helper-simple-access": "^7.22.5"
+                "@babel/helper-module-transforms": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-simple-access": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1630,14 +1680,14 @@
             }
         },
         "node_modules/@babel/plugin-transform-modules-systemjs": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz",
-            "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz",
+            "integrity": "sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w==",
             "dependencies": {
-                "@babel/helper-hoist-variables": "^7.22.5",
-                "@babel/helper-module-transforms": "^7.23.3",
-                "@babel/helper-plugin-utils": "^7.24.0",
-                "@babel/helper-validator-identifier": "^7.22.20"
+                "@babel/helper-hoist-variables": "^7.24.6",
+                "@babel/helper-module-transforms": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-validator-identifier": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1647,12 +1697,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-modules-umd": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz",
-            "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz",
+            "integrity": "sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg==",
             "dependencies": {
-                "@babel/helper-module-transforms": "^7.23.3",
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-module-transforms": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1662,12 +1712,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-            "version": "7.22.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
-            "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz",
+            "integrity": "sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q==",
             "dependencies": {
-                "@babel/helper-create-regexp-features-plugin": "^7.22.5",
-                "@babel/helper-plugin-utils": "^7.22.5"
+                "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1677,11 +1727,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-new-target": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz",
-            "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz",
+            "integrity": "sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1691,11 +1741,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz",
-            "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz",
+            "integrity": "sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
+                "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
             },
             "engines": {
@@ -1706,11 +1756,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-numeric-separator": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz",
-            "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz",
+            "integrity": "sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
+                "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-numeric-separator": "^7.10.4"
             },
             "engines": {
@@ -1721,14 +1771,14 @@
             }
         },
         "node_modules/@babel/plugin-transform-object-rest-spread": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz",
-            "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz",
+            "integrity": "sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg==",
             "dependencies": {
-                "@babel/helper-compilation-targets": "^7.23.6",
-                "@babel/helper-plugin-utils": "^7.24.5",
+                "@babel/helper-compilation-targets": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-                "@babel/plugin-transform-parameters": "^7.24.5"
+                "@babel/plugin-transform-parameters": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1738,12 +1788,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-object-super": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz",
-            "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz",
+            "integrity": "sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
-                "@babel/helper-replace-supers": "^7.24.1"
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-replace-supers": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1753,11 +1803,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-optional-catch-binding": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz",
-            "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz",
+            "integrity": "sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
+                "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
             },
             "engines": {
@@ -1768,12 +1818,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-optional-chaining": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz",
-            "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz",
+            "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.5",
-                "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+                "@babel/helper-plugin-utils": "^7.24.7",
+                "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
                 "@babel/plugin-syntax-optional-chaining": "^7.8.3"
             },
             "engines": {
@@ -1783,12 +1833,20 @@
                 "@babel/core": "^7.0.0-0"
             }
         },
+        "node_modules/@babel/plugin-transform-optional-chaining/node_modules/@babel/helper-plugin-utils": {
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz",
+            "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==",
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
         "node_modules/@babel/plugin-transform-parameters": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz",
-            "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
+            "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.5"
+                "@babel/helper-plugin-utils": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1797,13 +1855,21 @@
                 "@babel/core": "^7.0.0-0"
             }
         },
+        "node_modules/@babel/plugin-transform-parameters/node_modules/@babel/helper-plugin-utils": {
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz",
+            "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==",
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
         "node_modules/@babel/plugin-transform-private-methods": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz",
-            "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz",
+            "integrity": "sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw==",
             "dependencies": {
-                "@babel/helper-create-class-features-plugin": "^7.24.1",
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-create-class-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1813,13 +1879,13 @@
             }
         },
         "node_modules/@babel/plugin-transform-private-property-in-object": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz",
-            "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz",
+            "integrity": "sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ==",
             "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.22.5",
-                "@babel/helper-create-class-features-plugin": "^7.24.5",
-                "@babel/helper-plugin-utils": "^7.24.5",
+                "@babel/helper-annotate-as-pure": "^7.24.6",
+                "@babel/helper-create-class-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
             },
             "engines": {
@@ -1830,11 +1896,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-property-literals": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz",
-            "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz",
+            "integrity": "sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1844,11 +1910,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-react-display-name": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz",
-            "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.6.tgz",
+            "integrity": "sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1858,15 +1924,15 @@
             }
         },
         "node_modules/@babel/plugin-transform-react-jsx": {
-            "version": "7.23.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz",
-            "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.6.tgz",
+            "integrity": "sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==",
             "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.22.5",
-                "@babel/helper-module-imports": "^7.22.15",
-                "@babel/helper-plugin-utils": "^7.22.5",
-                "@babel/plugin-syntax-jsx": "^7.23.3",
-                "@babel/types": "^7.23.4"
+                "@babel/helper-annotate-as-pure": "^7.24.6",
+                "@babel/helper-module-imports": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-jsx": "^7.24.6",
+                "@babel/types": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1876,11 +1942,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-react-jsx-development": {
-            "version": "7.22.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
-            "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.6.tgz",
+            "integrity": "sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==",
             "dependencies": {
-                "@babel/plugin-transform-react-jsx": "^7.22.5"
+                "@babel/plugin-transform-react-jsx": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1890,12 +1956,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-react-pure-annotations": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz",
-            "integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.6.tgz",
+            "integrity": "sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==",
             "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.22.5",
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-annotate-as-pure": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1905,11 +1971,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-regenerator": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz",
-            "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz",
+            "integrity": "sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
+                "@babel/helper-plugin-utils": "^7.24.6",
                 "regenerator-transform": "^0.15.2"
             },
             "engines": {
@@ -1920,11 +1986,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-reserved-words": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz",
-            "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz",
+            "integrity": "sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1934,11 +2000,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-shorthand-properties": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz",
-            "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz",
+            "integrity": "sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1948,12 +2014,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-spread": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz",
-            "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz",
+            "integrity": "sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
-                "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1963,11 +2029,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-sticky-regex": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz",
-            "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz",
+            "integrity": "sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1977,11 +2043,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-template-literals": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz",
-            "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz",
+            "integrity": "sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -1991,11 +2057,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-typeof-symbol": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz",
-            "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz",
+            "integrity": "sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.5"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -2005,11 +2071,11 @@
             }
         },
         "node_modules/@babel/plugin-transform-unicode-escapes": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz",
-            "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz",
+            "integrity": "sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -2019,12 +2085,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-unicode-property-regex": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz",
-            "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz",
+            "integrity": "sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA==",
             "dependencies": {
-                "@babel/helper-create-regexp-features-plugin": "^7.22.15",
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -2034,12 +2100,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-unicode-regex": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz",
-            "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz",
+            "integrity": "sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA==",
             "dependencies": {
-                "@babel/helper-create-regexp-features-plugin": "^7.22.15",
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -2049,12 +2115,12 @@
             }
         },
         "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz",
-            "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz",
+            "integrity": "sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw==",
             "dependencies": {
-                "@babel/helper-create-regexp-features-plugin": "^7.22.15",
-                "@babel/helper-plugin-utils": "^7.24.0"
+                "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -2064,26 +2130,25 @@
             }
         },
         "node_modules/@babel/preset-env": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz",
-            "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==",
-            "dependencies": {
-                "@babel/compat-data": "^7.24.4",
-                "@babel/helper-compilation-targets": "^7.23.6",
-                "@babel/helper-plugin-utils": "^7.24.5",
-                "@babel/helper-validator-option": "^7.23.5",
-                "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5",
-                "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1",
-                "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1",
-                "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1",
+            "version": "7.24.6",
+            "integrity": "sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg==",
+            "dependencies": {
+                "@babel/compat-data": "^7.24.6",
+                "@babel/helper-compilation-targets": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-validator-option": "^7.24.6",
+                "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.6",
+                "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.6",
+                "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.6",
+                "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.6",
                 "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
                 "@babel/plugin-syntax-async-generators": "^7.8.4",
                 "@babel/plugin-syntax-class-properties": "^7.12.13",
                 "@babel/plugin-syntax-class-static-block": "^7.14.5",
                 "@babel/plugin-syntax-dynamic-import": "^7.8.3",
                 "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
-                "@babel/plugin-syntax-import-assertions": "^7.24.1",
-                "@babel/plugin-syntax-import-attributes": "^7.24.1",
+                "@babel/plugin-syntax-import-assertions": "^7.24.6",
+                "@babel/plugin-syntax-import-attributes": "^7.24.6",
                 "@babel/plugin-syntax-import-meta": "^7.10.4",
                 "@babel/plugin-syntax-json-strings": "^7.8.3",
                 "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
@@ -2095,54 +2160,54 @@
                 "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
                 "@babel/plugin-syntax-top-level-await": "^7.14.5",
                 "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
-                "@babel/plugin-transform-arrow-functions": "^7.24.1",
-                "@babel/plugin-transform-async-generator-functions": "^7.24.3",
-                "@babel/plugin-transform-async-to-generator": "^7.24.1",
-                "@babel/plugin-transform-block-scoped-functions": "^7.24.1",
-                "@babel/plugin-transform-block-scoping": "^7.24.5",
-                "@babel/plugin-transform-class-properties": "^7.24.1",
-                "@babel/plugin-transform-class-static-block": "^7.24.4",
-                "@babel/plugin-transform-classes": "^7.24.5",
-                "@babel/plugin-transform-computed-properties": "^7.24.1",
-                "@babel/plugin-transform-destructuring": "^7.24.5",
-                "@babel/plugin-transform-dotall-regex": "^7.24.1",
-                "@babel/plugin-transform-duplicate-keys": "^7.24.1",
-                "@babel/plugin-transform-dynamic-import": "^7.24.1",
-                "@babel/plugin-transform-exponentiation-operator": "^7.24.1",
-                "@babel/plugin-transform-export-namespace-from": "^7.24.1",
-                "@babel/plugin-transform-for-of": "^7.24.1",
-                "@babel/plugin-transform-function-name": "^7.24.1",
-                "@babel/plugin-transform-json-strings": "^7.24.1",
-                "@babel/plugin-transform-literals": "^7.24.1",
-                "@babel/plugin-transform-logical-assignment-operators": "^7.24.1",
-                "@babel/plugin-transform-member-expression-literals": "^7.24.1",
-                "@babel/plugin-transform-modules-amd": "^7.24.1",
-                "@babel/plugin-transform-modules-commonjs": "^7.24.1",
-                "@babel/plugin-transform-modules-systemjs": "^7.24.1",
-                "@babel/plugin-transform-modules-umd": "^7.24.1",
-                "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
-                "@babel/plugin-transform-new-target": "^7.24.1",
-                "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1",
-                "@babel/plugin-transform-numeric-separator": "^7.24.1",
-                "@babel/plugin-transform-object-rest-spread": "^7.24.5",
-                "@babel/plugin-transform-object-super": "^7.24.1",
-                "@babel/plugin-transform-optional-catch-binding": "^7.24.1",
-                "@babel/plugin-transform-optional-chaining": "^7.24.5",
-                "@babel/plugin-transform-parameters": "^7.24.5",
-                "@babel/plugin-transform-private-methods": "^7.24.1",
-                "@babel/plugin-transform-private-property-in-object": "^7.24.5",
-                "@babel/plugin-transform-property-literals": "^7.24.1",
-                "@babel/plugin-transform-regenerator": "^7.24.1",
-                "@babel/plugin-transform-reserved-words": "^7.24.1",
-                "@babel/plugin-transform-shorthand-properties": "^7.24.1",
-                "@babel/plugin-transform-spread": "^7.24.1",
-                "@babel/plugin-transform-sticky-regex": "^7.24.1",
-                "@babel/plugin-transform-template-literals": "^7.24.1",
-                "@babel/plugin-transform-typeof-symbol": "^7.24.5",
-                "@babel/plugin-transform-unicode-escapes": "^7.24.1",
-                "@babel/plugin-transform-unicode-property-regex": "^7.24.1",
-                "@babel/plugin-transform-unicode-regex": "^7.24.1",
-                "@babel/plugin-transform-unicode-sets-regex": "^7.24.1",
+                "@babel/plugin-transform-arrow-functions": "^7.24.6",
+                "@babel/plugin-transform-async-generator-functions": "^7.24.6",
+                "@babel/plugin-transform-async-to-generator": "^7.24.6",
+                "@babel/plugin-transform-block-scoped-functions": "^7.24.6",
+                "@babel/plugin-transform-block-scoping": "^7.24.6",
+                "@babel/plugin-transform-class-properties": "^7.24.6",
+                "@babel/plugin-transform-class-static-block": "^7.24.6",
+                "@babel/plugin-transform-classes": "^7.24.6",
+                "@babel/plugin-transform-computed-properties": "^7.24.6",
+                "@babel/plugin-transform-destructuring": "^7.24.6",
+                "@babel/plugin-transform-dotall-regex": "^7.24.6",
+                "@babel/plugin-transform-duplicate-keys": "^7.24.6",
+                "@babel/plugin-transform-dynamic-import": "^7.24.6",
+                "@babel/plugin-transform-exponentiation-operator": "^7.24.6",
+                "@babel/plugin-transform-export-namespace-from": "^7.24.6",
+                "@babel/plugin-transform-for-of": "^7.24.6",
+                "@babel/plugin-transform-function-name": "^7.24.6",
+                "@babel/plugin-transform-json-strings": "^7.24.6",
+                "@babel/plugin-transform-literals": "^7.24.6",
+                "@babel/plugin-transform-logical-assignment-operators": "^7.24.6",
+                "@babel/plugin-transform-member-expression-literals": "^7.24.6",
+                "@babel/plugin-transform-modules-amd": "^7.24.6",
+                "@babel/plugin-transform-modules-commonjs": "^7.24.6",
+                "@babel/plugin-transform-modules-systemjs": "^7.24.6",
+                "@babel/plugin-transform-modules-umd": "^7.24.6",
+                "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.6",
+                "@babel/plugin-transform-new-target": "^7.24.6",
+                "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.6",
+                "@babel/plugin-transform-numeric-separator": "^7.24.6",
+                "@babel/plugin-transform-object-rest-spread": "^7.24.6",
+                "@babel/plugin-transform-object-super": "^7.24.6",
+                "@babel/plugin-transform-optional-catch-binding": "^7.24.6",
+                "@babel/plugin-transform-optional-chaining": "^7.24.6",
+                "@babel/plugin-transform-parameters": "^7.24.6",
+                "@babel/plugin-transform-private-methods": "^7.24.6",
+                "@babel/plugin-transform-private-property-in-object": "^7.24.6",
+                "@babel/plugin-transform-property-literals": "^7.24.6",
+                "@babel/plugin-transform-regenerator": "^7.24.6",
+                "@babel/plugin-transform-reserved-words": "^7.24.6",
+                "@babel/plugin-transform-shorthand-properties": "^7.24.6",
+                "@babel/plugin-transform-spread": "^7.24.6",
+                "@babel/plugin-transform-sticky-regex": "^7.24.6",
+                "@babel/plugin-transform-template-literals": "^7.24.6",
+                "@babel/plugin-transform-typeof-symbol": "^7.24.6",
+                "@babel/plugin-transform-unicode-escapes": "^7.24.6",
+                "@babel/plugin-transform-unicode-property-regex": "^7.24.6",
+                "@babel/plugin-transform-unicode-regex": "^7.24.6",
+                "@babel/plugin-transform-unicode-sets-regex": "^7.24.6",
                 "@babel/preset-modules": "0.1.6-no-external-plugins",
                 "babel-plugin-polyfill-corejs2": "^0.4.10",
                 "babel-plugin-polyfill-corejs3": "^0.10.4",
@@ -2171,16 +2236,15 @@
             }
         },
         "node_modules/@babel/preset-react": {
-            "version": "7.24.1",
-            "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz",
-            "integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==",
+            "version": "7.24.6",
+            "integrity": "sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw==",
             "dependencies": {
-                "@babel/helper-plugin-utils": "^7.24.0",
-                "@babel/helper-validator-option": "^7.23.5",
-                "@babel/plugin-transform-react-display-name": "^7.24.1",
-                "@babel/plugin-transform-react-jsx": "^7.23.4",
-                "@babel/plugin-transform-react-jsx-development": "^7.22.5",
-                "@babel/plugin-transform-react-pure-annotations": "^7.24.1"
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-validator-option": "^7.24.6",
+                "@babel/plugin-transform-react-display-name": "^7.24.6",
+                "@babel/plugin-transform-react-jsx": "^7.24.6",
+                "@babel/plugin-transform-react-jsx-development": "^7.24.6",
+                "@babel/plugin-transform-react-pure-annotations": "^7.24.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -2195,9 +2259,9 @@
             "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA=="
         },
         "node_modules/@babel/runtime": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz",
-            "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz",
+            "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==",
             "dependencies": {
                 "regenerator-runtime": "^0.14.0"
             },
@@ -2206,9 +2270,9 @@
             }
         },
         "node_modules/@babel/runtime-corejs3": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.5.tgz",
-            "integrity": "sha512-GWO0mgzNMLWaSYM4z4NVIuY0Cd1fl8cPnuetuddu5w/qGuvt5Y7oUi/kvvQGK9xgOkFJDQX2heIvTRn/OQ1XTg==",
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.6.tgz",
+            "integrity": "sha512-tbC3o8uHK9xMgMsvUm9qGqxVpbv6yborMBLbDteHIc7JDNHsTV0vDMQ5j1O1NXvO+BDELtL9KgoWYaUVIVGt8w==",
             "dependencies": {
                 "core-js-pure": "^3.30.2",
                 "regenerator-runtime": "^0.14.0"
@@ -2218,31 +2282,31 @@
             }
         },
         "node_modules/@babel/template": {
-            "version": "7.24.0",
-            "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
-            "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
+            "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==",
             "dependencies": {
-                "@babel/code-frame": "^7.23.5",
-                "@babel/parser": "^7.24.0",
-                "@babel/types": "^7.24.0"
+                "@babel/code-frame": "^7.24.7",
+                "@babel/parser": "^7.24.7",
+                "@babel/types": "^7.24.7"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/traverse": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz",
-            "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==",
-            "dependencies": {
-                "@babel/code-frame": "^7.24.2",
-                "@babel/generator": "^7.24.5",
-                "@babel/helper-environment-visitor": "^7.22.20",
-                "@babel/helper-function-name": "^7.23.0",
-                "@babel/helper-hoist-variables": "^7.22.5",
-                "@babel/helper-split-export-declaration": "^7.24.5",
-                "@babel/parser": "^7.24.5",
-                "@babel/types": "^7.24.5",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+            "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+            "dependencies": {
+                "@babel/code-frame": "^7.24.7",
+                "@babel/generator": "^7.24.7",
+                "@babel/helper-environment-visitor": "^7.24.7",
+                "@babel/helper-function-name": "^7.24.7",
+                "@babel/helper-hoist-variables": "^7.24.7",
+                "@babel/helper-split-export-declaration": "^7.24.7",
+                "@babel/parser": "^7.24.7",
+                "@babel/types": "^7.24.7",
                 "debug": "^4.3.1",
                 "globals": "^11.1.0"
             },
@@ -2259,12 +2323,12 @@
             }
         },
         "node_modules/@babel/types": {
-            "version": "7.24.5",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz",
-            "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==",
+            "version": "7.24.7",
+            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz",
+            "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==",
             "dependencies": {
-                "@babel/helper-string-parser": "^7.24.1",
-                "@babel/helper-validator-identifier": "^7.24.5",
+                "@babel/helper-string-parser": "^7.24.7",
+                "@babel/helper-validator-identifier": "^7.24.7",
                 "to-fast-properties": "^2.0.0"
             },
             "engines": {
@@ -2426,12 +2490,6 @@
                 }
             }
         },
-        "node_modules/@emotion/stylis": {
-            "version": "0.8.5",
-            "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz",
-            "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==",
-            "peer": true
-        },
         "node_modules/@emotion/unitless": {
             "version": "0.8.1",
             "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
@@ -2551,7 +2609,6 @@
         },
         "node_modules/@eslint/js": {
             "version": "9.3.0",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.3.0.tgz",
             "integrity": "sha512-niBqk8iwv96+yuTwjM6bWg8ovzAPF9qkICsGtcoa5/dmqcEMfdwNAX7+/OHcJHc7wj7XqPxH98oAHytFYlw6Sw==",
             "dev": true,
             "engines": {
@@ -2735,9 +2792,8 @@
             }
         },
         "node_modules/@fortawesome/react-fontawesome": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.1.tgz",
-            "integrity": "sha512-ldr5QO2MneAX5W5WBCYB2pZp/PiHDD1hy9YEBLcXUyJb0qnO86oP8RU+CgmYVSH/R4Dbe2ernhcWOrcgaKD9NQ==",
+            "version": "0.2.2",
+            "integrity": "sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==",
             "dependencies": {
                 "prop-types": "^15.8.1"
             },
@@ -2747,30 +2803,28 @@
             }
         },
         "node_modules/@fullcalendar/core": {
-            "version": "6.1.11",
-            "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.11.tgz",
-            "integrity": "sha512-TjG7c8sUz+Vkui2FyCNJ+xqyu0nq653Ibe99A66LoW95oBo6tVhhKIaG1Wh0GVKymYiqAQN/OEdYTuj4ay27kA==",
+            "version": "6.1.14",
+            "integrity": "sha512-hIPRBevm0aMc2aHy1hRIJgXmI1QTvQM1neQa9oxtuqUmF1+ApYC3oAdwcQMTuI7lHHw3pKJDyJFkKLPPnL6HXA==",
             "dependencies": {
                 "preact": "~10.12.1"
             }
         },
         "node_modules/@fullcalendar/daygrid": {
-            "version": "6.1.11",
-            "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.11.tgz",
-            "integrity": "sha512-hF5jJB7cgUIxWD5MVjj8IU407HISyLu7BWXcEIuTytkfr8oolOXeCazqnnjmRbnFOncoJQVstTtq6SIhaT32Xg==",
+            "version": "6.1.14",
+            "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.14.tgz",
+            "integrity": "sha512-DSyjiA1dEM8k3bOCrZpZOmAOZu71KGtH02ze+4QKuhxkmn/zQghmmLRdfzpOrcyJg6xGKkoB4pBcO+2lXar8XQ==",
             "peerDependencies": {
-                "@fullcalendar/core": "~6.1.11"
+                "@fullcalendar/core": "~6.1.14"
             }
         },
         "node_modules/@fullcalendar/multimonth": {
-            "version": "6.1.11",
-            "resolved": "https://registry.npmjs.org/@fullcalendar/multimonth/-/multimonth-6.1.11.tgz",
-            "integrity": "sha512-7DbPC+AAlaKnquGVdw1Z85Q3nSZ4GZ1NcVIk4k7bLnqDlntwHPPsrDlSIzUWKcN0q5/u7jQHm4PU1m3LAl70Sg==",
+            "version": "6.1.13",
+            "integrity": "sha512-fn0BaLaMNkLmFzxijGZXYcO/fHQkuCcQV1R44mnu/01V4uSnFM1KPt2+V+6SgNiW1+ZNkUBHkkSLST1XdZjodw==",
             "dependencies": {
-                "@fullcalendar/daygrid": "~6.1.11"
+                "@fullcalendar/daygrid": "~6.1.13"
             },
             "peerDependencies": {
-                "@fullcalendar/core": "~6.1.11"
+                "@fullcalendar/core": "~6.1.13"
             }
         },
         "node_modules/@googlemaps/js-api-loader": {
@@ -2794,6 +2848,7 @@
             "version": "0.11.14",
             "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
             "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+            "deprecated": "Use @eslint/config-array instead",
             "dependencies": {
                 "@humanwhocodes/object-schema": "^2.0.2",
                 "debug": "^4.3.1",
@@ -2838,7 +2893,8 @@
         "node_modules/@humanwhocodes/object-schema": {
             "version": "2.0.3",
             "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
-            "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA=="
+            "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+            "deprecated": "Use @eslint/object-schema instead"
         },
         "node_modules/@icons/material": {
             "version": "0.2.4",
@@ -2849,34 +2905,34 @@
             }
         },
         "node_modules/@internationalized/date": {
-            "version": "3.5.3",
-            "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.3.tgz",
-            "integrity": "sha512-X9bi8NAEHAjD8yzmPYT2pdJsbe+tYSEBAfowtlxJVJdZR3aK8Vg7ZUT1Fm5M47KLzp/M1p1VwAaeSma3RT7biw==",
+            "version": "3.5.4",
+            "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.4.tgz",
+            "integrity": "sha512-qoVJVro+O0rBaw+8HPjUB1iH8Ihf8oziEnqMnvhJUSuVIrHOuZ6eNLHNvzXJKUvAtaDiqMnRlg8Z2mgh09BlUw==",
             "dependencies": {
                 "@swc/helpers": "^0.5.0"
             }
         },
         "node_modules/@internationalized/message": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.3.tgz",
-            "integrity": "sha512-jba3kGxnh4hN4zoeJZuMft99Ly1zbmon4fyDz3VAmO39Kb5Aw+usGub7oU/sGoBIcVQ7REEwsvjIWtIO1nitbw==",
+            "version": "3.1.4",
+            "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.4.tgz",
+            "integrity": "sha512-Dygi9hH1s7V9nha07pggCkvmRfDd3q2lWnMGvrJyrOwYMe1yj4D2T9BoH9I6MGR7xz0biQrtLPsqUkqXzIrBOw==",
             "dependencies": {
                 "@swc/helpers": "^0.5.0",
                 "intl-messageformat": "^10.1.0"
             }
         },
         "node_modules/@internationalized/number": {
-            "version": "3.5.2",
-            "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.5.2.tgz",
-            "integrity": "sha512-4FGHTi0rOEX1giSkt5MH4/te0eHBq3cvAYsfLlpguV6pzJAReXymiYpE5wPCqKqjkUO3PIsyvk+tBiIV1pZtbA==",
+            "version": "3.5.3",
+            "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.5.3.tgz",
+            "integrity": "sha512-rd1wA3ebzlp0Mehj5YTuTI50AQEx80gWFyHcQu+u91/5NgdwBecO8BH6ipPfE+lmQ9d63vpB3H9SHoIUiupllw==",
             "dependencies": {
                 "@swc/helpers": "^0.5.0"
             }
         },
         "node_modules/@internationalized/string": {
-            "version": "3.2.2",
-            "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.2.tgz",
-            "integrity": "sha512-5xy2JfSQyGqL9FDIdJXVjoKSBBDJR4lvwoCbqKhc5hQZ/qSLU/OlONCmrJPcSH0zxh88lXJMzbOAk8gJ48JBFw==",
+            "version": "3.2.3",
+            "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.3.tgz",
+            "integrity": "sha512-9kpfLoA8HegiWTeCbR2livhdVeKobCnVv8tlJ6M2jF+4tcMqDo94ezwlnrUANBWPgd8U7OXIHCk2Ov2qhk4KXw==",
             "dependencies": {
                 "@swc/helpers": "^0.5.0"
             }
@@ -2922,6 +2978,11 @@
                 "url": "https://github.com/chalk/strip-ansi?sponsor=1"
             }
         },
+        "node_modules/@isaacs/string-locale-compare": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz",
+            "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ=="
+        },
         "node_modules/@jest/schemas": {
             "version": "29.6.3",
             "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
@@ -3473,42 +3534,6 @@
                 "tslib": "2"
             }
         },
-        "node_modules/@jsonjoy.com/json-pack": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz",
-            "integrity": "sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg==",
-            "dependencies": {
-                "@jsonjoy.com/base64": "^1.1.1",
-                "@jsonjoy.com/util": "^1.1.2",
-                "hyperdyperid": "^1.2.0",
-                "thingies": "^1.20.0"
-            },
-            "engines": {
-                "node": ">=10.0"
-            },
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/streamich"
-            },
-            "peerDependencies": {
-                "tslib": "2"
-            }
-        },
-        "node_modules/@jsonjoy.com/util": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.1.3.tgz",
-            "integrity": "sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg==",
-            "engines": {
-                "node": ">=10.0"
-            },
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/streamich"
-            },
-            "peerDependencies": {
-                "tslib": "2"
-            }
-        },
         "node_modules/@kurkle/color": {
             "version": "0.3.2",
             "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz",
@@ -3520,29 +3545,6 @@
             "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
             "dev": true
         },
-        "node_modules/@mapbox/geojson-rewind": {
-            "version": "0.5.2",
-            "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz",
-            "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==",
-            "dependencies": {
-                "get-stream": "^6.0.1",
-                "minimist": "^1.2.6"
-            },
-            "bin": {
-                "geojson-rewind": "geojson-rewind"
-            }
-        },
-        "node_modules/@mapbox/geojson-rewind/node_modules/get-stream": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
-            "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
         "node_modules/@mapbox/jsonlint-lines-primitives": {
             "version": "2.0.2",
             "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz",
@@ -3588,6 +3590,7 @@
             "version": "7.2.3",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
             "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -3618,6 +3621,7 @@
             "version": "3.0.2",
             "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
             "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+            "deprecated": "Rimraf versions prior to v4 are no longer supported",
             "dependencies": {
                 "glob": "^7.1.3"
             },
@@ -3728,9 +3732,9 @@
             }
         },
         "node_modules/@mui/core-downloads-tracker": {
-            "version": "5.15.18",
-            "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.18.tgz",
-            "integrity": "sha512-/9pVk+Al8qxAjwFUADv4BRZgMpZM4m5E+2Q/20qhVPuIJWqKp4Ie4tGExac6zu93rgPTYVQGgu+1vjiT0E+cEw==",
+            "version": "5.15.20",
+            "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.20.tgz",
+            "integrity": "sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==",
             "funding": {
                 "type": "opencollective",
                 "url": "https://opencollective.com/mui-org"
@@ -3738,7 +3742,6 @@
         },
         "node_modules/@mui/icons-material": {
             "version": "5.15.18",
-            "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.18.tgz",
             "integrity": "sha512-jGhyw02TSLM0NgW+MDQRLLRUD/K4eN9rlK2pTBTL1OtzyZmQ8nB060zK1wA0b7cVrIiG+zyrRmNAvGWXwm2N9Q==",
             "dependencies": {
                 "@babel/runtime": "^7.23.9"
@@ -3762,16 +3765,16 @@
             }
         },
         "node_modules/@mui/material": {
-            "version": "5.15.18",
-            "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.18.tgz",
-            "integrity": "sha512-n+/dsiqux74fFfcRUJjok+ieNQ7+BEk6/OwX9cLcLvriZrZb+/7Y8+Fd2HlUUbn5N0CDurgAHm0VH1DqyJ9HAw==",
+            "version": "5.15.20",
+            "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.20.tgz",
+            "integrity": "sha512-tVq3l4qoXx/NxUgIx/x3lZiPn/5xDbdTE8VrLczNpfblLYZzlrbxA7kb9mI8NoBF6+w9WE9IrxWnKK5KlPI2bg==",
             "dependencies": {
                 "@babel/runtime": "^7.23.9",
                 "@mui/base": "5.0.0-beta.40",
-                "@mui/core-downloads-tracker": "^5.15.18",
-                "@mui/system": "^5.15.15",
+                "@mui/core-downloads-tracker": "^5.15.20",
+                "@mui/system": "^5.15.20",
                 "@mui/types": "^7.2.14",
-                "@mui/utils": "^5.15.14",
+                "@mui/utils": "^5.15.20",
                 "@types/react-transition-group": "^4.4.10",
                 "clsx": "^2.1.0",
                 "csstype": "^3.1.3",
@@ -3806,12 +3809,12 @@
             }
         },
         "node_modules/@mui/private-theming": {
-            "version": "5.15.14",
-            "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.14.tgz",
-            "integrity": "sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==",
+            "version": "5.15.20",
+            "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.20.tgz",
+            "integrity": "sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==",
             "dependencies": {
                 "@babel/runtime": "^7.23.9",
-                "@mui/utils": "^5.15.14",
+                "@mui/utils": "^5.15.20",
                 "prop-types": "^15.8.1"
             },
             "engines": {
@@ -3862,16 +3865,42 @@
                 }
             }
         },
+        "node_modules/@mui/styled-engine-sc": {
+            "version": "5.14.12",
+            "resolved": "https://registry.npmjs.org/@mui/styled-engine-sc/-/styled-engine-sc-5.14.12.tgz",
+            "integrity": "sha512-FQ5KDd17OkRurE0ljR4Pddekv1uPSoJxcBqXa9tdoOETGULVCefM5Gd9CRGzT+alNPDyHBoUeEYKulIkDN9ytA==",
+            "dependencies": {
+                "@babel/runtime": "^7.23.1",
+                "csstype": "^3.1.2",
+                "prop-types": "^15.8.1"
+            },
+            "engines": {
+                "node": ">=12.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/mui"
+            },
+            "peerDependencies": {
+                "@types/styled-components": "^5.1.14",
+                "styled-components": "^5.3.1"
+            },
+            "peerDependenciesMeta": {
+                "@types/styled-components": {
+                    "optional": true
+                }
+            }
+        },
         "node_modules/@mui/system": {
-            "version": "5.15.15",
-            "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.15.tgz",
-            "integrity": "sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==",
+            "version": "5.15.20",
+            "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.20.tgz",
+            "integrity": "sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==",
             "dependencies": {
                 "@babel/runtime": "^7.23.9",
-                "@mui/private-theming": "^5.15.14",
+                "@mui/private-theming": "^5.15.20",
                 "@mui/styled-engine": "^5.15.14",
                 "@mui/types": "^7.2.14",
-                "@mui/utils": "^5.15.14",
+                "@mui/utils": "^5.15.20",
                 "clsx": "^2.1.0",
                 "csstype": "^3.1.3",
                 "prop-types": "^15.8.1"
@@ -3915,9 +3944,9 @@
             }
         },
         "node_modules/@mui/utils": {
-            "version": "5.15.14",
-            "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.14.tgz",
-            "integrity": "sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==",
+            "version": "5.15.20",
+            "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.20.tgz",
+            "integrity": "sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==",
             "dependencies": {
                 "@babel/runtime": "^7.23.9",
                 "@types/prop-types": "^15.7.11",
@@ -3973,494 +4002,996 @@
                 "node": ">= 8"
             }
         },
-        "node_modules/@octokit/auth-token": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz",
-            "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==",
-            "engines": {
-                "node": ">= 18"
-            }
-        },
-        "node_modules/@octokit/core": {
-            "version": "6.1.2",
-            "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.2.tgz",
-            "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==",
+        "node_modules/@npmcli/agent": {
+            "version": "2.2.2",
+            "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz",
+            "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==",
             "dependencies": {
-                "@octokit/auth-token": "^5.0.0",
-                "@octokit/graphql": "^8.0.0",
-                "@octokit/request": "^9.0.0",
-                "@octokit/request-error": "^6.0.1",
-                "@octokit/types": "^13.0.0",
-                "before-after-hook": "^3.0.2",
-                "universal-user-agent": "^7.0.0"
+                "agent-base": "^7.1.0",
+                "http-proxy-agent": "^7.0.0",
+                "https-proxy-agent": "^7.0.1",
+                "lru-cache": "^10.0.1",
+                "socks-proxy-agent": "^8.0.3"
             },
             "engines": {
-                "node": ">= 18"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/@octokit/endpoint": {
-            "version": "10.1.1",
-            "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz",
-            "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==",
+        "node_modules/@npmcli/agent/node_modules/agent-base": {
+            "version": "7.1.1",
+            "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+            "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
             "dependencies": {
-                "@octokit/types": "^13.0.0",
-                "universal-user-agent": "^7.0.2"
+                "debug": "^4.3.4"
             },
             "engines": {
-                "node": ">= 18"
+                "node": ">= 14"
             }
         },
-        "node_modules/@octokit/graphql": {
-            "version": "8.1.1",
-            "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.1.tgz",
-            "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==",
+        "node_modules/@npmcli/agent/node_modules/https-proxy-agent": {
+            "version": "7.0.4",
+            "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
+            "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
             "dependencies": {
-                "@octokit/request": "^9.0.0",
-                "@octokit/types": "^13.0.0",
-                "universal-user-agent": "^7.0.0"
+                "agent-base": "^7.0.2",
+                "debug": "4"
             },
             "engines": {
-                "node": ">= 18"
+                "node": ">= 14"
             }
         },
-        "node_modules/@octokit/openapi-types": {
-            "version": "22.2.0",
-            "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
-            "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg=="
-        },
-        "node_modules/@octokit/request": {
-            "version": "9.1.1",
-            "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.1.tgz",
-            "integrity": "sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw==",
-            "dependencies": {
-                "@octokit/endpoint": "^10.0.0",
-                "@octokit/request-error": "^6.0.1",
-                "@octokit/types": "^13.1.0",
-                "universal-user-agent": "^7.0.2"
-            },
+        "node_modules/@npmcli/agent/node_modules/lru-cache": {
+            "version": "10.2.2",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
+            "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
             "engines": {
-                "node": ">= 18"
+                "node": "14 || >=16.14"
             }
         },
-        "node_modules/@octokit/request-error": {
-            "version": "6.1.1",
-            "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.1.tgz",
-            "integrity": "sha512-1mw1gqT3fR/WFvnoVpY/zUM2o/XkMs/2AszUUG9I69xn0JFLv6PGkPhNk5lbfvROs79wiS0bqiJNxfCZcRJJdg==",
+        "node_modules/@npmcli/arborist": {
+            "version": "7.5.2",
+            "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.5.2.tgz",
+            "integrity": "sha512-V0zqhdnK9Av3qSIbhYs2O+7HAJPSGhqBkNP6624iSVke2J2JKY306V5Czwul+tc2Xnq6SDEKe8v+frLeKJ4aeA==",
             "dependencies": {
-                "@octokit/types": "^13.0.0"
+                "@isaacs/string-locale-compare": "^1.1.0",
+                "@npmcli/fs": "^3.1.1",
+                "@npmcli/installed-package-contents": "^2.1.0",
+                "@npmcli/map-workspaces": "^3.0.2",
+                "@npmcli/metavuln-calculator": "^7.1.1",
+                "@npmcli/name-from-folder": "^2.0.0",
+                "@npmcli/node-gyp": "^3.0.0",
+                "@npmcli/package-json": "^5.1.0",
+                "@npmcli/query": "^3.1.0",
+                "@npmcli/redact": "^2.0.0",
+                "@npmcli/run-script": "^8.1.0",
+                "bin-links": "^4.0.4",
+                "cacache": "^18.0.3",
+                "common-ancestor-path": "^1.0.1",
+                "hosted-git-info": "^7.0.2",
+                "json-parse-even-better-errors": "^3.0.2",
+                "json-stringify-nice": "^1.1.4",
+                "lru-cache": "^10.2.2",
+                "minimatch": "^9.0.4",
+                "nopt": "^7.2.1",
+                "npm-install-checks": "^6.2.0",
+                "npm-package-arg": "^11.0.2",
+                "npm-pick-manifest": "^9.0.1",
+                "npm-registry-fetch": "^17.0.1",
+                "pacote": "^18.0.6",
+                "parse-conflict-json": "^3.0.0",
+                "proc-log": "^4.2.0",
+                "proggy": "^2.0.0",
+                "promise-all-reject-late": "^1.0.0",
+                "promise-call-limit": "^3.0.1",
+                "read-package-json-fast": "^3.0.2",
+                "semver": "^7.3.7",
+                "ssri": "^10.0.6",
+                "treeverse": "^3.0.0",
+                "walk-up-path": "^3.0.1"
+            },
+            "bin": {
+                "arborist": "bin/index.js"
             },
             "engines": {
-                "node": ">= 18"
-            }
-        },
-        "node_modules/@octokit/types": {
-            "version": "13.5.0",
-            "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
-            "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
-            "dependencies": {
-                "@octokit/openapi-types": "^22.2.0"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/@opentelemetry/api": {
-            "version": "1.8.0",
-            "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz",
-            "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==",
+        "node_modules/@npmcli/arborist/node_modules/abbrev": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+            "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
             "engines": {
-                "node": ">=8.0.0"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/@pkgjs/parseargs": {
-            "version": "0.11.0",
-            "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
-            "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
-            "optional": true,
+        "node_modules/@npmcli/arborist/node_modules/json-parse-even-better-errors": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
+            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
             "engines": {
-                "node": ">=14"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/@pkgr/core": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
-            "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
-            "dev": true,
+        "node_modules/@npmcli/arborist/node_modules/lru-cache": {
+            "version": "10.2.2",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
+            "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
             "engines": {
-                "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
-            },
-            "funding": {
-                "url": "https://opencollective.com/unts"
-            }
-        },
-        "node_modules/@popperjs/core": {
-            "version": "2.11.8",
-            "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
-            "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/popperjs"
+                "node": "14 || >=16.14"
             }
         },
-        "node_modules/@react-aria/actiongroup": {
-            "version": "3.7.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/actiongroup/-/actiongroup-3.7.4.tgz",
-            "integrity": "sha512-HQ4D6jCW/EfotRPUI57qXPvZyKlqRr1pRYL/yTxFEE9nvHb/JHxvvQgo9tyIW1YHPO0k/cwkXhDOXLKT1q6d1A==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/list": "^3.10.4",
-                "@react-types/actiongroup": "^3.4.8",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
+        "node_modules/@npmcli/arborist/node_modules/nopt": {
+            "version": "7.2.1",
+            "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+            "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+            "dependencies": {
+                "abbrev": "^2.0.0"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
-                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
-            }
-        },
-        "node_modules/@react-aria/breadcrumbs": {
-            "version": "3.5.12",
-            "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.12.tgz",
-            "integrity": "sha512-UHTVe6kA73xbE1J6LLVjUooEQvTJ4vWPRyOxu4t3dZ/4dMttvHxpKylvj4z606wioSGVhCDEKC4Vn+RtQLypeA==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/link": "^3.7.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/breadcrumbs": "^3.7.4",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
+            "bin": {
+                "nopt": "bin/nopt.js"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/@react-aria/button": {
-            "version": "3.9.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.9.4.tgz",
-            "integrity": "sha512-YOt4XWtC+0m7LwLQnU1Gl0ENETLEhtM8SyDbwsFR/fIQYX0T0H9D6jMlnKxXDjKgRvHzom9NZ8caTfsEPbgW/g==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/toggle": "^3.7.3",
-                "@react-types/button": "^3.9.3",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
+        "node_modules/@npmcli/arborist/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            "engines": {
+                "node": ">=10"
             }
         },
-        "node_modules/@react-aria/calendar": {
-            "version": "3.5.7",
-            "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.5.7.tgz",
-            "integrity": "sha512-HbOxoslIpak1/RKHQ/p4A5roI+RpM6geK68s72D+9n3NMPDw/X95yesc6JD1Sti2KsGl9GHI6Myf9xcNjuAMnw==",
-            "dependencies": {
-                "@internationalized/date": "^3.5.3",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/live-announcer": "^3.3.3",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/calendar": "^3.5.0",
-                "@react-types/button": "^3.9.3",
-                "@react-types/calendar": "^3.4.5",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
+        "node_modules/@npmcli/config": {
+            "version": "8.3.2",
+            "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.3.2.tgz",
+            "integrity": "sha512-IMzf+fhRXibqh9mBwXK/QFIr97SAlZjfwsWPEz/2pST1cE9k9LcwznO7aDNXJoMrDjxPHZmb2bAAKASsa6EedA==",
+            "dependencies": {
+                "@npmcli/map-workspaces": "^3.0.2",
+                "ci-info": "^4.0.0",
+                "ini": "^4.1.2",
+                "nopt": "^7.2.1",
+                "proc-log": "^4.2.0",
+                "read-package-json-fast": "^3.0.2",
+                "semver": "^7.3.5",
+                "walk-up-path": "^3.0.1"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
-                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/@react-aria/checkbox": {
-            "version": "3.14.2",
-            "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.14.2.tgz",
-            "integrity": "sha512-PeXTEfURrZZBN80YJUyVPAvkT7gwpPtwBgtKxg1ars+D1iDV4Yp48yh5pKaNSf0/rlLNOgKJSCpcFzY7V3ipFw==",
-            "dependencies": {
-                "@react-aria/form": "^3.0.4",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/label": "^3.7.7",
-                "@react-aria/toggle": "^3.10.3",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/checkbox": "^3.6.4",
-                "@react-stately/form": "^3.0.2",
-                "@react-stately/toggle": "^3.7.3",
-                "@react-types/checkbox": "^3.8.0",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
-            },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+        "node_modules/@npmcli/config/node_modules/abbrev": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+            "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/@react-aria/color": {
-            "version": "3.0.0-beta.32",
-            "resolved": "https://registry.npmjs.org/@react-aria/color/-/color-3.0.0-beta.32.tgz",
-            "integrity": "sha512-FKy5jb+31SIaLrjQR7oMq23CCBgoPdlYN06mwb16EdN024D1ZkQ2ULUvI84vBJxCul8cMOmoIK1DBOnhDslbrQ==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/numberfield": "^3.11.2",
-                "@react-aria/slider": "^3.7.7",
-                "@react-aria/spinbutton": "^3.6.4",
-                "@react-aria/textfield": "^3.14.4",
-                "@react-aria/utils": "^3.24.0",
-                "@react-aria/visually-hidden": "^3.8.11",
-                "@react-stately/color": "^3.6.0",
-                "@react-stately/form": "^3.0.2",
-                "@react-types/color": "3.0.0-beta.24",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
-            },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
-                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+        "node_modules/@npmcli/config/node_modules/ci-info": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz",
+            "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==",
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/sibiraj-s"
+                }
+            ],
+            "engines": {
+                "node": ">=8"
             }
         },
-        "node_modules/@react-aria/combobox": {
-            "version": "3.9.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.9.0.tgz",
-            "integrity": "sha512-JRiCoARx95Lu1hENmf4ndHzpJrMeP/2bV96jZbMn4StFUzhACKnUw0rNFpFdONfeoD/MkWO7tsvhxaPGLhpgtQ==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/listbox": "^3.12.0",
-                "@react-aria/live-announcer": "^3.3.3",
-                "@react-aria/menu": "^3.14.0",
-                "@react-aria/overlays": "^3.22.0",
-                "@react-aria/selection": "^3.18.0",
-                "@react-aria/textfield": "^3.14.4",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/combobox": "^3.8.3",
-                "@react-stately/form": "^3.0.2",
-                "@react-types/button": "^3.9.3",
-                "@react-types/combobox": "^3.11.0",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
-            },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
-                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+        "node_modules/@npmcli/config/node_modules/ini": {
+            "version": "4.1.3",
+            "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
+            "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/@react-aria/datepicker": {
-            "version": "3.10.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.10.0.tgz",
-            "integrity": "sha512-YiIxY+mRxc2rPN8j9ypdiGspRHSIrsK6TShBgKEk5UoG5EBKEJfNe/FfoXDR2d5xcpWLAHVuRjERi9WkiJNDBw==",
-            "dependencies": {
-                "@internationalized/date": "^3.5.3",
-                "@internationalized/number": "^3.5.2",
-                "@internationalized/string": "^3.2.2",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/form": "^3.0.4",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/label": "^3.7.7",
-                "@react-aria/spinbutton": "^3.6.4",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/datepicker": "^3.9.3",
-                "@react-stately/form": "^3.0.2",
-                "@react-types/button": "^3.9.3",
-                "@react-types/calendar": "^3.4.5",
-                "@react-types/datepicker": "^3.7.3",
-                "@react-types/dialog": "^3.5.9",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
+        "node_modules/@npmcli/config/node_modules/nopt": {
+            "version": "7.2.1",
+            "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+            "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+            "dependencies": {
+                "abbrev": "^2.0.0"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
-                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            "bin": {
+                "nopt": "bin/nopt.js"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/@react-aria/dialog": {
-            "version": "3.5.13",
-            "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.13.tgz",
-            "integrity": "sha512-GUwY7sQtPMtO6LFHyoIGFMEv8tEBrNCrSNwEKilFLxvNUCo/1sY3N+7L2TcoeyDkcRWBJ9Uz9iR0iJ6EsCBWng==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/overlays": "^3.22.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/dialog": "^3.5.9",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
+        "node_modules/@npmcli/config/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
-                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            "engines": {
+                "node": ">=10"
             }
         },
-        "node_modules/@react-aria/dnd": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/dnd/-/dnd-3.6.0.tgz",
-            "integrity": "sha512-uIM54sUr4NpSdvxWozNKGqSNSTe9ir/sO+QFGtGAF5dbjMX7FN/7sVVrtmB8UHKC+fwfs+Ml3kjJgHbm10/Qmg==",
-            "dependencies": {
-                "@internationalized/string": "^3.2.2",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/live-announcer": "^3.3.3",
-                "@react-aria/overlays": "^3.22.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/dnd": "^3.3.0",
-                "@react-types/button": "^3.9.3",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
+        "node_modules/@npmcli/fs": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
+            "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
+            "dependencies": {
+                "semver": "^7.3.5"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
-                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/@react-aria/focus": {
-            "version": "3.17.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.17.0.tgz",
-            "integrity": "sha512-aRzBw1WTUkcIV3xFrqPA6aB8ZVt3XyGpTaSHAypU0Pgoy2wRq9YeJYpbunsKj9CJmskuffvTqXwAjTcaQish1Q==",
-            "dependencies": {
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0",
-                "clsx": "^2.0.0"
+        "node_modules/@npmcli/fs/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            "engines": {
+                "node": ">=10"
             }
         },
-        "node_modules/@react-aria/form": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.0.4.tgz",
-            "integrity": "sha512-wWfW9Hv+OWIUbJ0QYzJ4EO5Yt7xZD1i+XNZG9pKGBiREi7dYBo7Y7lbqlWc3pJASSE+6aP9HzhK18dMPtGluVA==",
+        "node_modules/@npmcli/git": {
+            "version": "5.0.7",
+            "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.7.tgz",
+            "integrity": "sha512-WaOVvto604d5IpdCRV2KjQu8PzkfE96d50CQGKgywXh2GxXmDeUO5EWcBC4V57uFyrNqx83+MewuJh3WTR3xPA==",
             "dependencies": {
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/form": "^3.0.2",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
+                "@npmcli/promise-spawn": "^7.0.0",
+                "lru-cache": "^10.0.1",
+                "npm-pick-manifest": "^9.0.0",
+                "proc-log": "^4.0.0",
+                "promise-inflight": "^1.0.1",
+                "promise-retry": "^2.0.1",
+                "semver": "^7.3.5",
+                "which": "^4.0.0"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/@react-aria/grid": {
-            "version": "3.9.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.9.0.tgz",
-            "integrity": "sha512-jNg7haMptmeTKR7/ZomIjWZMLB6jWalBkl5in2JdU9Hc4pY5EKqD/7PSprr9SjOzCr5O+4MSiRDvw+Tu7xHevQ==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/live-announcer": "^3.3.3",
-                "@react-aria/selection": "^3.18.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/grid": "^3.8.6",
-                "@react-stately/selection": "^3.15.0",
-                "@react-stately/virtualizer": "^3.7.0",
-                "@react-types/checkbox": "^3.8.0",
-                "@react-types/grid": "^3.2.5",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
-            },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
-                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+        "node_modules/@npmcli/git/node_modules/isexe": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+            "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+            "engines": {
+                "node": ">=16"
             }
         },
-        "node_modules/@react-aria/gridlist": {
-            "version": "3.8.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/gridlist/-/gridlist-3.8.0.tgz",
-            "integrity": "sha512-2iPBtpYZdTVij6XcqFsRsjzItjgg7FhFRPUEgD62mCyYd6NJIDkCxLuL97hkZ5BbXNxsr2jgVEns5Z4UzW//IQ==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/grid": "^3.9.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/selection": "^3.18.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/list": "^3.10.4",
-                "@react-stately/tree": "^3.8.0",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
-            },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
-                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+        "node_modules/@npmcli/git/node_modules/lru-cache": {
+            "version": "10.2.2",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
+            "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+            "engines": {
+                "node": "14 || >=16.14"
             }
         },
-        "node_modules/@react-aria/i18n": {
-            "version": "3.11.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.11.0.tgz",
-            "integrity": "sha512-dnopopsYKy2cd2dB2LdnmdJ58evKKcNCtiscWl624XFSbq2laDrYIQ4umrMhBxaKD7nDQkqydVBe6HoQKPzvJw==",
-            "dependencies": {
-                "@internationalized/date": "^3.5.3",
-                "@internationalized/message": "^3.1.3",
-                "@internationalized/number": "^3.5.2",
-                "@internationalized/string": "^3.2.2",
-                "@react-aria/ssr": "^3.9.3",
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
+        "node_modules/@npmcli/git/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            "engines": {
+                "node": ">=10"
             }
         },
-        "node_modules/@react-aria/interactions": {
-            "version": "3.21.2",
-            "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.21.2.tgz",
-            "integrity": "sha512-Ju706DtoEmI/2vsfu9DCEIjDqsRBVLm/wmt2fr0xKbBca7PtmK8daajxFWz+eTq+EJakvYfLr7gWgLau9HyWXg==",
+        "node_modules/@npmcli/git/node_modules/which": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+            "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
             "dependencies": {
-                "@react-aria/ssr": "^3.9.3",
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
+                "isexe": "^3.1.1"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            "bin": {
+                "node-which": "bin/which.js"
+            },
+            "engines": {
+                "node": "^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/@react-aria/label": {
-            "version": "3.7.7",
-            "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.7.tgz",
-            "integrity": "sha512-0MDIu4SbagwsYzkprcCzi1Z0V/t2K/5Dd30eSTL2zanXMa+/85MVGSQjXI0vPrXMOXSNqp0R/aMxcqcgJ59yRA==",
+        "node_modules/@npmcli/installed-package-contents": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz",
+            "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==",
             "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
+                "npm-bundled": "^3.0.0",
+                "npm-normalize-package-bin": "^3.0.0"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            "bin": {
+                "installed-package-contents": "bin/index.js"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/@react-aria/link": {
-            "version": "3.7.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.7.0.tgz",
-            "integrity": "sha512-gkF7KpDR+ApcMY5HS3xVKHrxRcwSP9TRPoySWEMBE4GPWvEK1Bk/On9EM1vRzeEibCZ5L6gKuLEEKLVSGbBMWg==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/link": "^3.5.4",
-                "@react-types/shared": "^3.23.0",
-                "@swc/helpers": "^0.5.0"
+        "node_modules/@npmcli/map-workspaces": {
+            "version": "3.0.6",
+            "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz",
+            "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==",
+            "dependencies": {
+                "@npmcli/name-from-folder": "^2.0.0",
+                "glob": "^10.2.2",
+                "minimatch": "^9.0.0",
+                "read-package-json-fast": "^3.0.0"
             },
-            "peerDependencies": {
-                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@npmcli/metavuln-calculator": {
+            "version": "7.1.1",
+            "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz",
+            "integrity": "sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==",
+            "dependencies": {
+                "cacache": "^18.0.0",
+                "json-parse-even-better-errors": "^3.0.0",
+                "pacote": "^18.0.0",
+                "proc-log": "^4.1.0",
+                "semver": "^7.3.5"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@npmcli/metavuln-calculator/node_modules/json-parse-even-better-errors": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
+            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@npmcli/metavuln-calculator/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/@npmcli/name-from-folder": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz",
+            "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@npmcli/node-gyp": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz",
+            "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@npmcli/package-json": {
+            "version": "5.1.0",
+            "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.1.0.tgz",
+            "integrity": "sha512-1aL4TuVrLS9sf8quCLerU3H9J4vtCtgu8VauYozrmEyU57i/EdKleCnsQ7vpnABIH6c9mnTxcH5sFkO3BlV8wQ==",
+            "dependencies": {
+                "@npmcli/git": "^5.0.0",
+                "glob": "^10.2.2",
+                "hosted-git-info": "^7.0.0",
+                "json-parse-even-better-errors": "^3.0.0",
+                "normalize-package-data": "^6.0.0",
+                "proc-log": "^4.0.0",
+                "semver": "^7.5.3"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
+            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@npmcli/package-json/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/@npmcli/promise-spawn": {
+            "version": "7.0.2",
+            "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz",
+            "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==",
+            "dependencies": {
+                "which": "^4.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@npmcli/promise-spawn/node_modules/isexe": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+            "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+            "engines": {
+                "node": ">=16"
+            }
+        },
+        "node_modules/@npmcli/promise-spawn/node_modules/which": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+            "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+            "dependencies": {
+                "isexe": "^3.1.1"
+            },
+            "bin": {
+                "node-which": "bin/which.js"
+            },
+            "engines": {
+                "node": "^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@npmcli/query": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.1.0.tgz",
+            "integrity": "sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==",
+            "dependencies": {
+                "postcss-selector-parser": "^6.0.10"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@npmcli/redact": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.0.tgz",
+            "integrity": "sha512-SEjCPAVHWYUIQR+Yn03kJmrJjZDtJLYpj300m3HV9OTRZNpC5YpbMsM3eTkECyT4aWj8lDr9WeY6TWefpubtYQ==",
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@npmcli/run-script": {
+            "version": "8.1.0",
+            "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz",
+            "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==",
+            "dependencies": {
+                "@npmcli/node-gyp": "^3.0.0",
+                "@npmcli/package-json": "^5.0.0",
+                "@npmcli/promise-spawn": "^7.0.0",
+                "node-gyp": "^10.0.0",
+                "proc-log": "^4.0.0",
+                "which": "^4.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@npmcli/run-script/node_modules/isexe": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+            "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+            "engines": {
+                "node": ">=16"
+            }
+        },
+        "node_modules/@npmcli/run-script/node_modules/which": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+            "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+            "dependencies": {
+                "isexe": "^3.1.1"
+            },
+            "bin": {
+                "node-which": "bin/which.js"
+            },
+            "engines": {
+                "node": "^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@octokit/auth-token": {
+            "version": "5.1.1",
+            "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz",
+            "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==",
+            "engines": {
+                "node": ">= 18"
+            }
+        },
+        "node_modules/@octokit/core": {
+            "version": "6.1.2",
+            "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.2.tgz",
+            "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==",
+            "dependencies": {
+                "@octokit/auth-token": "^5.0.0",
+                "@octokit/graphql": "^8.0.0",
+                "@octokit/request": "^9.0.0",
+                "@octokit/request-error": "^6.0.1",
+                "@octokit/types": "^13.0.0",
+                "before-after-hook": "^3.0.2",
+                "universal-user-agent": "^7.0.0"
+            },
+            "engines": {
+                "node": ">= 18"
+            }
+        },
+        "node_modules/@octokit/endpoint": {
+            "version": "10.1.1",
+            "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz",
+            "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==",
+            "dependencies": {
+                "@octokit/types": "^13.0.0",
+                "universal-user-agent": "^7.0.2"
+            },
+            "engines": {
+                "node": ">= 18"
+            }
+        },
+        "node_modules/@octokit/graphql": {
+            "version": "8.1.1",
+            "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.1.tgz",
+            "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==",
+            "dependencies": {
+                "@octokit/request": "^9.0.0",
+                "@octokit/types": "^13.0.0",
+                "universal-user-agent": "^7.0.0"
+            },
+            "engines": {
+                "node": ">= 18"
+            }
+        },
+        "node_modules/@octokit/openapi-types": {
+            "version": "22.2.0",
+            "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
+            "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg=="
+        },
+        "node_modules/@octokit/request": {
+            "version": "9.1.1",
+            "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.1.tgz",
+            "integrity": "sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw==",
+            "dependencies": {
+                "@octokit/endpoint": "^10.0.0",
+                "@octokit/request-error": "^6.0.1",
+                "@octokit/types": "^13.1.0",
+                "universal-user-agent": "^7.0.2"
+            },
+            "engines": {
+                "node": ">= 18"
+            }
+        },
+        "node_modules/@octokit/request-error": {
+            "version": "6.1.1",
+            "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.1.tgz",
+            "integrity": "sha512-1mw1gqT3fR/WFvnoVpY/zUM2o/XkMs/2AszUUG9I69xn0JFLv6PGkPhNk5lbfvROs79wiS0bqiJNxfCZcRJJdg==",
+            "dependencies": {
+                "@octokit/types": "^13.0.0"
+            },
+            "engines": {
+                "node": ">= 18"
+            }
+        },
+        "node_modules/@octokit/types": {
+            "version": "13.5.0",
+            "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
+            "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
+            "dependencies": {
+                "@octokit/openapi-types": "^22.2.0"
+            }
+        },
+        "node_modules/@opentelemetry/api": {
+            "version": "1.8.0",
+            "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz",
+            "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==",
+            "engines": {
+                "node": ">=8.0.0"
+            }
+        },
+        "node_modules/@pkgjs/parseargs": {
+            "version": "0.11.0",
+            "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+            "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+            "optional": true,
+            "engines": {
+                "node": ">=14"
+            }
+        },
+        "node_modules/@pkgr/core": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
+            "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+            "dev": true,
+            "engines": {
+                "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://opencollective.com/unts"
+            }
+        },
+        "node_modules/@popperjs/core": {
+            "version": "2.11.8",
+            "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+            "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/popperjs"
+            }
+        },
+        "node_modules/@react-aria/actiongroup": {
+            "version": "3.7.5",
+            "resolved": "https://registry.npmjs.org/@react-aria/actiongroup/-/actiongroup-3.7.5.tgz",
+            "integrity": "sha512-asJk6WN6MhtwqWzVx7zkakhTbrpk1XhJbxF2piGlk2pTCh8zUCnMjvFAmMdQN+voj5lEW4/CZNfrblNDwzCimQ==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/list": "^3.10.5",
+                "@react-types/actiongroup": "^3.4.9",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/breadcrumbs": {
+            "version": "3.5.13",
+            "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.13.tgz",
+            "integrity": "sha512-G1Gqf/P6kVdfs94ovwP18fTWuIxadIQgHsXS08JEVcFVYMjb9YjqnEBaohUxD1tq2WldMbYw53ahQblT4NTG+g==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/link": "^3.7.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/breadcrumbs": "^3.7.5",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/button": {
+            "version": "3.9.5",
+            "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.9.5.tgz",
+            "integrity": "sha512-dgcYR6j8WDOMLKuVrtxzx4jIC05cVKDzc+HnPO8lNkBAOfjcuN5tkGRtIjLtqjMvpZHhQT5aDbgFpIaZzxgFIg==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/toggle": "^3.7.4",
+                "@react-types/button": "^3.9.4",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/calendar": {
+            "version": "3.5.8",
+            "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.5.8.tgz",
+            "integrity": "sha512-Whlp4CeAA5/ZkzrAHUv73kgIRYjw088eYGSc+cvSOCxfrc/2XkBm9rNrnSBv0DvhJ8AG0Fjz3vYakTmF3BgZBw==",
+            "dependencies": {
+                "@internationalized/date": "^3.5.4",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/live-announcer": "^3.3.4",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/calendar": "^3.5.1",
+                "@react-types/button": "^3.9.4",
+                "@react-types/calendar": "^3.4.6",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/checkbox": {
+            "version": "3.14.3",
+            "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.14.3.tgz",
+            "integrity": "sha512-EtBJL6iu0gvrw3A4R7UeVLR6diaVk/mh4kFBc7c8hQjpEJweRr4hmJT3hrNg3MBcTWLxFiMEXPGgWEwXDBygtA==",
+            "dependencies": {
+                "@react-aria/form": "^3.0.5",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/label": "^3.7.8",
+                "@react-aria/toggle": "^3.10.4",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/checkbox": "^3.6.5",
+                "@react-stately/form": "^3.0.3",
+                "@react-stately/toggle": "^3.7.4",
+                "@react-types/checkbox": "^3.8.1",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/color": {
+            "version": "3.0.0-beta.33",
+            "resolved": "https://registry.npmjs.org/@react-aria/color/-/color-3.0.0-beta.33.tgz",
+            "integrity": "sha512-nhqnIHYm5p6MbuF3cC6lnqzG7MjwBsBd0DtpO+ByFYO+zxpMMbeC5R+1SFxvapR4uqmAzTotbtiUCGsG+SUaIg==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/numberfield": "^3.11.3",
+                "@react-aria/slider": "^3.7.8",
+                "@react-aria/spinbutton": "^3.6.5",
+                "@react-aria/textfield": "^3.14.5",
+                "@react-aria/utils": "^3.24.1",
+                "@react-aria/visually-hidden": "^3.8.12",
+                "@react-stately/color": "^3.6.1",
+                "@react-stately/form": "^3.0.3",
+                "@react-types/color": "3.0.0-beta.25",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/combobox": {
+            "version": "3.9.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.9.1.tgz",
+            "integrity": "sha512-SpK92dCmT8qn8aEcUAihRQrBb5LZUhwIbDExFII8PvUvEFy/PoQHXIo3j1V29WkutDBDpMvBv/6XRCHGXPqrhQ==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/listbox": "^3.12.1",
+                "@react-aria/live-announcer": "^3.3.4",
+                "@react-aria/menu": "^3.14.1",
+                "@react-aria/overlays": "^3.22.1",
+                "@react-aria/selection": "^3.18.1",
+                "@react-aria/textfield": "^3.14.5",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/combobox": "^3.8.4",
+                "@react-stately/form": "^3.0.3",
+                "@react-types/button": "^3.9.4",
+                "@react-types/combobox": "^3.11.1",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/datepicker": {
+            "version": "3.10.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.10.1.tgz",
+            "integrity": "sha512-4HZL593nrNMa1GjBmWEN/OTvNS6d3/16G1YJWlqiUlv11ADulSbqBIjMmkgwrJVFcjrgqtXFy+yyrTA/oq94Zw==",
+            "dependencies": {
+                "@internationalized/date": "^3.5.4",
+                "@internationalized/number": "^3.5.3",
+                "@internationalized/string": "^3.2.3",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/form": "^3.0.5",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/label": "^3.7.8",
+                "@react-aria/spinbutton": "^3.6.5",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/datepicker": "^3.9.4",
+                "@react-stately/form": "^3.0.3",
+                "@react-types/button": "^3.9.4",
+                "@react-types/calendar": "^3.4.6",
+                "@react-types/datepicker": "^3.7.4",
+                "@react-types/dialog": "^3.5.10",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/dialog": {
+            "version": "3.5.14",
+            "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.14.tgz",
+            "integrity": "sha512-oqDCjQ8hxe3GStf48XWBf2CliEnxlR9GgSYPHJPUc69WBj68D9rVcCW3kogJnLAnwIyf3FnzbX4wSjvUa88sAQ==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/overlays": "^3.22.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/dialog": "^3.5.10",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/dnd": {
+            "version": "3.6.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/dnd/-/dnd-3.6.1.tgz",
+            "integrity": "sha512-6WnujUTD+cIYZVF/B+uXdHyJ+WSpbYa8jH282epvY4FUAq1qLmen12/HHcoj/5dswKQe8X6EM3OhkQM89d9vFw==",
+            "dependencies": {
+                "@internationalized/string": "^3.2.3",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/live-announcer": "^3.3.4",
+                "@react-aria/overlays": "^3.22.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/dnd": "^3.3.1",
+                "@react-types/button": "^3.9.4",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/focus": {
+            "version": "3.17.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.17.1.tgz",
+            "integrity": "sha512-FLTySoSNqX++u0nWZJPPN5etXY0WBxaIe/YuL/GTEeuqUIuC/2bJSaw5hlsM6T2yjy6Y/VAxBcKSdAFUlU6njQ==",
+            "dependencies": {
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0",
+                "clsx": "^2.0.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/form": {
+            "version": "3.0.5",
+            "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.0.5.tgz",
+            "integrity": "sha512-n290jRwrrRXO3fS82MyWR+OKN7yznVesy5Q10IclSTVYHHI3VI53xtAPr/WzNjJR1um8aLhOcDNFKwnNIUUCsQ==",
+            "dependencies": {
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/form": "^3.0.3",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/grid": {
+            "version": "3.9.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.9.1.tgz",
+            "integrity": "sha512-fGEZqAEaS8mqzV/II3N4ndoNWegIcbh+L3PmKbXdpKKUP8VgMs/WY5rYl5WAF0f5RoFwXqx3ibDLeR9tKj/bOg==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/live-announcer": "^3.3.4",
+                "@react-aria/selection": "^3.18.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/grid": "^3.8.7",
+                "@react-stately/selection": "^3.15.1",
+                "@react-stately/virtualizer": "^3.7.1",
+                "@react-types/checkbox": "^3.8.1",
+                "@react-types/grid": "^3.2.6",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/gridlist": {
+            "version": "3.8.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/gridlist/-/gridlist-3.8.1.tgz",
+            "integrity": "sha512-vVPkkA+Ct0NDcpnNm/tnYaBumg0fP9pXxsPLqL1rxvsTyj1PaIpFTZ4corabPTbTDExZwUSTS3LG1n+o1OvBtQ==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/grid": "^3.9.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/selection": "^3.18.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/list": "^3.10.5",
+                "@react-stately/tree": "^3.8.1",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/i18n": {
+            "version": "3.11.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.11.1.tgz",
+            "integrity": "sha512-vuiBHw1kZruNMYeKkTGGnmPyMnM5T+gT8bz97H1FqIq1hQ6OPzmtBZ6W6l6OIMjeHI5oJo4utTwfZl495GALFQ==",
+            "dependencies": {
+                "@internationalized/date": "^3.5.4",
+                "@internationalized/message": "^3.1.4",
+                "@internationalized/number": "^3.5.3",
+                "@internationalized/string": "^3.2.3",
+                "@react-aria/ssr": "^3.9.4",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/interactions": {
+            "version": "3.21.3",
+            "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.21.3.tgz",
+            "integrity": "sha512-BWIuf4qCs5FreDJ9AguawLVS0lV9UU+sK4CCnbCNNmYqOWY+1+gRXCsnOM32K+oMESBxilAjdHW5n1hsMqYMpA==",
+            "dependencies": {
+                "@react-aria/ssr": "^3.9.4",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/label": {
+            "version": "3.7.8",
+            "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.8.tgz",
+            "integrity": "sha512-MzgTm5+suPA3KX7Ug6ZBK2NX9cin/RFLsv1BdafJ6CZpmUSpWnGE/yQfYUB7csN7j31OsZrD3/P56eShYWAQfg==",
+            "dependencies": {
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+            }
+        },
+        "node_modules/@react-aria/link": {
+            "version": "3.7.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.7.1.tgz",
+            "integrity": "sha512-a4IaV50P3fXc7DQvEIPYkJJv26JknFbRzFT5MJOMgtzuhyJoQdILEUK6XHYjcSSNCA7uLgzpojArVk5Hz3lCpw==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/link": "^3.5.5",
+                "@react-types/shared": "^3.23.1",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-aria/listbox": {
-            "version": "3.12.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.12.0.tgz",
-            "integrity": "sha512-Cy+UcfXU4MrOBMBnaB+kqG8bajeS3T1ZN8L7PXSTpmFS9jShFMhYkNz5gXpI+0SS4dgbHtkq/YDFJvu+bxFvdg==",
-            "dependencies": {
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/label": "^3.7.7",
-                "@react-aria/selection": "^3.18.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/list": "^3.10.4",
-                "@react-types/listbox": "^3.4.8",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.12.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.12.1.tgz",
+            "integrity": "sha512-7JiUp0NGykbv/HgSpmTY1wqhuf/RmjFxs1HZcNaTv8A+DlzgJYc7yQqFjP3ZA/z5RvJFuuIxggIYmgIFjaRYdA==",
+            "dependencies": {
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/label": "^3.7.8",
+                "@react-aria/selection": "^3.18.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/list": "^3.10.5",
+                "@react-types/listbox": "^3.4.9",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4469,30 +5000,30 @@
             }
         },
         "node_modules/@react-aria/live-announcer": {
-            "version": "3.3.3",
-            "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.3.3.tgz",
-            "integrity": "sha512-sMaBzzIgDPBDCeZ/UFbuXR/UnXikcE7t4OJ4cESzmUq6r6LvxzmZnG9ocwpH75n7udmUbINycKD082fneryHlg==",
+            "version": "3.3.4",
+            "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.3.4.tgz",
+            "integrity": "sha512-w8lxs35QrRrn6pBNzVfyGOeqWdxeVKf9U6bXIVwhq7rrTqRULL8jqy8RJIMfIs1s8G5FpwWYjyBOjl2g5Cu1iA==",
             "dependencies": {
                 "@swc/helpers": "^0.5.0"
             }
         },
         "node_modules/@react-aria/menu": {
-            "version": "3.14.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.14.0.tgz",
-            "integrity": "sha512-veZIpwKPKDIX1xpUzvGnxSVTmMfpRjPQUi1v+hMgqgdjBKedKI2LkprLABo9grggjqV9c2xT4XUXDk6xH3r8eA==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/overlays": "^3.22.0",
-                "@react-aria/selection": "^3.18.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/menu": "^3.7.0",
-                "@react-stately/tree": "^3.8.0",
-                "@react-types/button": "^3.9.3",
-                "@react-types/menu": "^3.9.8",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.14.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.14.1.tgz",
+            "integrity": "sha512-BYliRb38uAzq05UOFcD5XkjA5foQoXRbcH3ZufBsc4kvh79BcP1PMW6KsXKGJ7dC/PJWUwCui6QL1kUg8PqMHA==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/overlays": "^3.22.1",
+                "@react-aria/selection": "^3.18.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/menu": "^3.7.1",
+                "@react-stately/tree": "^3.8.1",
+                "@react-types/button": "^3.9.4",
+                "@react-types/menu": "^3.9.9",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4501,13 +5032,13 @@
             }
         },
         "node_modules/@react-aria/meter": {
-            "version": "3.4.12",
-            "resolved": "https://registry.npmjs.org/@react-aria/meter/-/meter-3.4.12.tgz",
-            "integrity": "sha512-Ofgy3SHBjNLrc0mzuEKfn5ozOyrLudzcpw1cP5BFgtYs8BDdUx2/e33+2sm1+Pm3M/AhBrV/9LGyOE2JCtb8pg==",
+            "version": "3.4.13",
+            "resolved": "https://registry.npmjs.org/@react-aria/meter/-/meter-3.4.13.tgz",
+            "integrity": "sha512-oG6KvHQM3ri93XkYQkgEaMKSMO9KNDVpcW1MUqFfqyUXHFBRZRrJB4BTXMZ4nyjheFVQjVboU51fRwoLjOzThg==",
             "dependencies": {
-                "@react-aria/progress": "^3.4.12",
-                "@react-types/meter": "^3.4.0",
-                "@react-types/shared": "^3.23.0",
+                "@react-aria/progress": "^3.4.13",
+                "@react-types/meter": "^3.4.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4515,20 +5046,20 @@
             }
         },
         "node_modules/@react-aria/numberfield": {
-            "version": "3.11.2",
-            "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.11.2.tgz",
-            "integrity": "sha512-PPCRLhAnCz3/mbv/EXoG3mY8lUvaOnZdGZf0ufb1VS4K/wKtb8z3sCTDiu1hi7nFo1YYqynb8mKue4Es5jUwSw==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/spinbutton": "^3.6.4",
-                "@react-aria/textfield": "^3.14.4",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/form": "^3.0.2",
-                "@react-stately/numberfield": "^3.9.2",
-                "@react-types/button": "^3.9.3",
-                "@react-types/numberfield": "^3.8.2",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.11.3",
+            "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.11.3.tgz",
+            "integrity": "sha512-QQ9ZTzBbRI8d9ksaBWm6YVXbgv+5zzUsdxVxwzJVXLznvivoORB8rpdFJzUEWVCo25lzoBxluCEPYtLOxP1B0w==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/spinbutton": "^3.6.5",
+                "@react-aria/textfield": "^3.14.5",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/form": "^3.0.3",
+                "@react-stately/numberfield": "^3.9.3",
+                "@react-types/button": "^3.9.4",
+                "@react-types/numberfield": "^3.8.3",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4537,20 +5068,20 @@
             }
         },
         "node_modules/@react-aria/overlays": {
-            "version": "3.22.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.22.0.tgz",
-            "integrity": "sha512-M3Iayc2Hf9vJ4JJ8K/zh+Ct6aymDLmBbo686ChV3AtGOc254RyyzqnVSNuMs3j5QVBsDUKihHZQfl4E9RCwd+w==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/ssr": "^3.9.3",
-                "@react-aria/utils": "^3.24.0",
-                "@react-aria/visually-hidden": "^3.8.11",
-                "@react-stately/overlays": "^3.6.6",
-                "@react-types/button": "^3.9.3",
-                "@react-types/overlays": "^3.8.6",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.22.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.22.1.tgz",
+            "integrity": "sha512-GHiFMWO4EQ6+j6b5QCnNoOYiyx1Gk8ZiwLzzglCI4q1NY5AG2EAmfU4Z1+Gtrf2S5Y0zHbumC7rs9GnPoGLUYg==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/ssr": "^3.9.4",
+                "@react-aria/utils": "^3.24.1",
+                "@react-aria/visually-hidden": "^3.8.12",
+                "@react-stately/overlays": "^3.6.7",
+                "@react-types/button": "^3.9.4",
+                "@react-types/overlays": "^3.8.7",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4559,15 +5090,15 @@
             }
         },
         "node_modules/@react-aria/progress": {
-            "version": "3.4.12",
-            "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.12.tgz",
-            "integrity": "sha512-Wlz7VNFEzcLSawhZwWTKgJPM/IUKFiKJJG7KGcsT2biIlu6Yp60xj08hDZkCrLq3XsLLCRmweHlVfLFjG3AK9w==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/label": "^3.7.7",
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/progress": "^3.5.3",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.4.13",
+            "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.13.tgz",
+            "integrity": "sha512-YBV9bOO5JzKvG8QCI0IAA00o6FczMgIDiK8Q9p5gKorFMatFUdRayxlbIPoYHMi+PguLil0jHgC7eOyaUcrZ0g==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/label": "^3.7.8",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/progress": "^3.5.4",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4575,19 +5106,19 @@
             }
         },
         "node_modules/@react-aria/radio": {
-            "version": "3.10.3",
-            "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.10.3.tgz",
-            "integrity": "sha512-9noof5jyHE8iiFEUE7xCAHvCjG7EkZ/bZHh2+ZtrLlTFZmjpEbRbpZMw6QMKC8uzREPsmERBXjbd/6NyXH6mEQ==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/form": "^3.0.4",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/label": "^3.7.7",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/radio": "^3.10.3",
-                "@react-types/radio": "^3.8.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.10.4",
+            "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.10.4.tgz",
+            "integrity": "sha512-3fmoMcQtCpgjTwJReFjnvIE/C7zOZeCeWUn4JKDqz9s1ILYsC3Rk5zZ4q66tFn6v+IQnecrKT52wH6+hlVLwTA==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/form": "^3.0.5",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/label": "^3.7.8",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/radio": "^3.10.4",
+                "@react-types/radio": "^3.8.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4595,17 +5126,17 @@
             }
         },
         "node_modules/@react-aria/searchfield": {
-            "version": "3.7.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/searchfield/-/searchfield-3.7.4.tgz",
-            "integrity": "sha512-92TR4M6/lBKkIp6l3Fl/Sqjjo++bDceIZEOKC62/cuYjLm9RRWl4tLlKIR1GN3IH1vJJStKj+TB/SjlWbPuwiA==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/textfield": "^3.14.4",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/searchfield": "^3.5.2",
-                "@react-types/button": "^3.9.3",
-                "@react-types/searchfield": "^3.5.4",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.7.5",
+            "resolved": "https://registry.npmjs.org/@react-aria/searchfield/-/searchfield-3.7.5.tgz",
+            "integrity": "sha512-h1sMUOWjhevaKKUHab/luHbM6yiyeN57L4RxZU0IIc9Ww0h5Rp2GUuKZA3pcdPiExHje0aijcImL3wBHEbKAzw==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/textfield": "^3.14.5",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/searchfield": "^3.5.3",
+                "@react-types/button": "^3.9.4",
+                "@react-types/searchfield": "^3.5.5",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4613,23 +5144,23 @@
             }
         },
         "node_modules/@react-aria/select": {
-            "version": "3.14.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/select/-/select-3.14.4.tgz",
-            "integrity": "sha512-MeFN8pw9liXwejkJS+hg0fDqGa3oW/mIwZYx8CrZZLbPnEcjZ9NI4ZXSxJaMOHEIQj/RXQ3Fpu0Sunu9FVpYXQ==",
-            "dependencies": {
-                "@react-aria/form": "^3.0.4",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/label": "^3.7.7",
-                "@react-aria/listbox": "^3.12.0",
-                "@react-aria/menu": "^3.14.0",
-                "@react-aria/selection": "^3.18.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-aria/visually-hidden": "^3.8.11",
-                "@react-stately/select": "^3.6.3",
-                "@react-types/button": "^3.9.3",
-                "@react-types/select": "^3.9.3",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.14.5",
+            "resolved": "https://registry.npmjs.org/@react-aria/select/-/select-3.14.5.tgz",
+            "integrity": "sha512-s8jixBuTUNdKWRHe2tIJqp55ORHeUObGMw1s7PQRRVrrHPdNSYseAOI9B2W7qpl3hKhvjJg40UW+45mcb1WKbw==",
+            "dependencies": {
+                "@react-aria/form": "^3.0.5",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/label": "^3.7.8",
+                "@react-aria/listbox": "^3.12.1",
+                "@react-aria/menu": "^3.14.1",
+                "@react-aria/selection": "^3.18.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-aria/visually-hidden": "^3.8.12",
+                "@react-stately/select": "^3.6.4",
+                "@react-types/button": "^3.9.4",
+                "@react-types/select": "^3.9.4",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4638,16 +5169,16 @@
             }
         },
         "node_modules/@react-aria/selection": {
-            "version": "3.18.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.18.0.tgz",
-            "integrity": "sha512-6ZvRuS9OHe56UVTb/qnsZ1TOxpZH9gRlX6eGG3Pt4LZK12wcvs13Uz2OvB2aYQHu0KPAua9ACnPh94xvXzQIlQ==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/selection": "^3.15.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.18.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.18.1.tgz",
+            "integrity": "sha512-GSqN2jX6lh7v+ldqhVjAXDcrWS3N4IsKXxO6L6Ygsye86Q9q9Mq9twWDWWu5IjHD6LoVZLUBCMO+ENGbOkyqeQ==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/selection": "^3.15.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4656,12 +5187,12 @@
             }
         },
         "node_modules/@react-aria/separator": {
-            "version": "3.3.12",
-            "resolved": "https://registry.npmjs.org/@react-aria/separator/-/separator-3.3.12.tgz",
-            "integrity": "sha512-KXeHynxek/DlAmjmry+M2KVRq+j75LqWFysX4x7t+OSbGR4t3bu5HRDd9bvDe9lsW8OKxlX3+hWTY7vsOL/HDA==",
+            "version": "3.3.13",
+            "resolved": "https://registry.npmjs.org/@react-aria/separator/-/separator-3.3.13.tgz",
+            "integrity": "sha512-hofA6JCPnAOqSE9vxnq7Dkazr7Kb2A0I5sR16fOG7ddjYRc/YEY5Nv7MWfKUGU0kNFHkgNjsDAILERtLechzeA==",
             "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/shared": "^3.23.0",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4669,18 +5200,18 @@
             }
         },
         "node_modules/@react-aria/slider": {
-            "version": "3.7.7",
-            "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.7.7.tgz",
-            "integrity": "sha512-7tOJyR4ZZoSMKcVomC6DZxyYuXQqQopi9mPW2J1fViD1R5iO8YVmoX/ALXnokzi8GPuMA0c38i2Cmnecm30ZXA==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/label": "^3.7.7",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/slider": "^3.5.3",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/slider": "^3.7.2",
+            "version": "3.7.8",
+            "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.7.8.tgz",
+            "integrity": "sha512-MYvPcM0K8jxEJJicUK2+WxUkBIM/mquBxOTOSSIL3CszA80nXIGVnLlCUnQV3LOUzpWtabbWaZokSPtGgOgQOw==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/label": "^3.7.8",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/slider": "^3.5.4",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/slider": "^3.7.3",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4688,15 +5219,15 @@
             }
         },
         "node_modules/@react-aria/spinbutton": {
-            "version": "3.6.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.6.4.tgz",
-            "integrity": "sha512-KMnwm3bEM83g8MILGt6irbvAG7DNphkq6O0ePt7L1m6QZhWK3hbI2RNlxYMF1OKIDTAOhnEjR6IdMCWt9TuXvQ==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/live-announcer": "^3.3.3",
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/button": "^3.9.3",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.6.5",
+            "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.6.5.tgz",
+            "integrity": "sha512-0aACBarF/Xr/7ixzjVBTQ0NBwwwsoGkf5v6AVFVMTC0uYMXHTALvRs+ULHjHMa5e/cX/aPlEvaVT7jfSs+Xy9Q==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/live-announcer": "^3.3.4",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/button": "^3.9.4",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4705,9 +5236,9 @@
             }
         },
         "node_modules/@react-aria/ssr": {
-            "version": "3.9.3",
-            "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.3.tgz",
-            "integrity": "sha512-5bUZ93dmvHFcmfUcEN7qzYe8yQQ8JY+nHN6m9/iSDCQ/QmCiE0kWXYwhurjw5ch6I8WokQzx66xKIMHBAa4NNA==",
+            "version": "3.9.4",
+            "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.4.tgz",
+            "integrity": "sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==",
             "dependencies": {
                 "@swc/helpers": "^0.5.0"
             },
@@ -4719,13 +5250,13 @@
             }
         },
         "node_modules/@react-aria/switch": {
-            "version": "3.6.3",
-            "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.6.3.tgz",
-            "integrity": "sha512-UBWbTEnnlTDT/dFOEpGKfX5ngPTIOVDLX1ltUhDHHk6SrgSnvYxTPTZAo+ujHIUSBFHOuxmvVYG7y54rk168mg==",
+            "version": "3.6.4",
+            "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.6.4.tgz",
+            "integrity": "sha512-2nVqz4ZuJyof47IpGSt3oZRmp+EdS8wzeDYgf42WHQXrx4uEOk1mdLJ20+NnsYhj/2NHZsvXVrjBeKMjlMs+0w==",
             "dependencies": {
-                "@react-aria/toggle": "^3.10.3",
-                "@react-stately/toggle": "^3.7.3",
-                "@react-types/switch": "^3.5.2",
+                "@react-aria/toggle": "^3.10.4",
+                "@react-stately/toggle": "^3.7.4",
+                "@react-types/switch": "^3.5.3",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4733,25 +5264,25 @@
             }
         },
         "node_modules/@react-aria/table": {
-            "version": "3.14.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.14.0.tgz",
-            "integrity": "sha512-IwBmzeIxeZjWlOlmMXVj/L64FbYm3qUh7v3VRgU98BVOdvgUyEKBDIwi6SuOV4FwbXKrCPZbXPU/k+KQU4tUoQ==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/grid": "^3.9.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/live-announcer": "^3.3.3",
-                "@react-aria/utils": "^3.24.0",
-                "@react-aria/visually-hidden": "^3.8.11",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/flags": "^3.0.2",
-                "@react-stately/table": "^3.11.7",
-                "@react-stately/virtualizer": "^3.7.0",
-                "@react-types/checkbox": "^3.8.0",
-                "@react-types/grid": "^3.2.5",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/table": "^3.9.4",
+            "version": "3.14.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.14.1.tgz",
+            "integrity": "sha512-WaPgQe4zQF5OaluO5rm+Y2nEoFR63vsLd4BT4yjK1uaFhKhDY2Zk+1SCVQvBLLKS4WK9dhP05nrNzT0vp/ZPOw==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/grid": "^3.9.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/live-announcer": "^3.3.4",
+                "@react-aria/utils": "^3.24.1",
+                "@react-aria/visually-hidden": "^3.8.12",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/flags": "^3.0.3",
+                "@react-stately/table": "^3.11.8",
+                "@react-stately/virtualizer": "^3.7.1",
+                "@react-types/checkbox": "^3.8.1",
+                "@react-types/grid": "^3.2.6",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/table": "^3.9.5",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4760,17 +5291,17 @@
             }
         },
         "node_modules/@react-aria/tabs": {
-            "version": "3.9.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.9.0.tgz",
-            "integrity": "sha512-E4IHOO9ejEXNeSnpeThu79pDpNySHHYz3txr9ngtH6tp097k/I1auSqbGJPy/kwLj6MCPEt86dNJDXE2X0AcFw==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/selection": "^3.18.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/tabs": "^3.6.5",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/tabs": "^3.3.6",
+            "version": "3.9.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.9.1.tgz",
+            "integrity": "sha512-S5v/0sRcOaSXaJYZuuy1ZVzYc7JD4sDyseG1133GjyuNjJOFHgoWMb+b4uxNIJbZxnLgynn/ZDBZSO+qU+fIxw==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/selection": "^3.18.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/tabs": "^3.6.6",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/tabs": "^3.3.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4779,19 +5310,19 @@
             }
         },
         "node_modules/@react-aria/tag": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/tag/-/tag-3.4.0.tgz",
-            "integrity": "sha512-kTrj0zEIyABgdASZMM7qxe0LAEePAxlg4OmfjZfkiAYYV32liY4EPER7ocE0OhOXo6TeOYYIvpEcr0z/4PjCpw==",
-            "dependencies": {
-                "@react-aria/gridlist": "^3.8.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/label": "^3.7.7",
-                "@react-aria/selection": "^3.18.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/list": "^3.10.4",
-                "@react-types/button": "^3.9.3",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.4.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/tag/-/tag-3.4.1.tgz",
+            "integrity": "sha512-gcIGPYZ2OBwMT4IHnlczEezKlxr0KRPL/mSfm2Q91GE027ZGOJnqusH9az6DX1qxrQx8x3vRdqYT2KmuefkrBQ==",
+            "dependencies": {
+                "@react-aria/gridlist": "^3.8.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/label": "^3.7.8",
+                "@react-aria/selection": "^3.18.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/list": "^3.10.5",
+                "@react-types/button": "^3.9.4",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4800,18 +5331,18 @@
             }
         },
         "node_modules/@react-aria/textfield": {
-            "version": "3.14.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.14.4.tgz",
-            "integrity": "sha512-fdZChDyTRA4BPqbyDeD9gSw6rVeIAl7eG38osRwr0mzcKTiS/AyV3jiRwnHsBO9brU8RdViJFri4emVDuxSjag==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/form": "^3.0.4",
-                "@react-aria/label": "^3.7.7",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/form": "^3.0.2",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/textfield": "^3.9.2",
+            "version": "3.14.5",
+            "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.14.5.tgz",
+            "integrity": "sha512-hj7H+66BjB1iTKKaFXwSZBZg88YT+wZboEXZ0DNdQB2ytzoz/g045wBItUuNi4ZjXI3P+0AOZznVMYadWBAmiA==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/form": "^3.0.5",
+                "@react-aria/label": "^3.7.8",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/form": "^3.0.3",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/textfield": "^3.9.3",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4819,15 +5350,15 @@
             }
         },
         "node_modules/@react-aria/toggle": {
-            "version": "3.10.3",
-            "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.10.3.tgz",
-            "integrity": "sha512-QtufHlWczMcTGmRxF7RCEgfMKpUPivyXJWZsQ1HSlknjRJPzf4uc3mSR62hq2sZ0VN9zXEpUsoixbEDB87TnGg==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/toggle": "^3.7.3",
-                "@react-types/checkbox": "^3.8.0",
+            "version": "3.10.4",
+            "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.10.4.tgz",
+            "integrity": "sha512-bRk+CdB8QzrSyGNjENXiTWxfzYKRw753iwQXsEAU7agPCUdB8cZJyrhbaUoD0rwczzTp2zDbZ9rRbUPdsBE2YQ==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/toggle": "^3.7.4",
+                "@react-types/checkbox": "^3.8.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4835,14 +5366,14 @@
             }
         },
         "node_modules/@react-aria/toolbar": {
-            "version": "3.0.0-beta.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/toolbar/-/toolbar-3.0.0-beta.4.tgz",
-            "integrity": "sha512-nerKAoHwHFTvf25DDtj8d/zlDaZHaTPWvL4gweTm3hu9ztisE58CoVUqzqH+VNiYjcrWr2PYgLbNLsuOzk0q1Q==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.0.0-beta.5",
+            "resolved": "https://registry.npmjs.org/@react-aria/toolbar/-/toolbar-3.0.0-beta.5.tgz",
+            "integrity": "sha512-c8spY7aeLI6L+ygdXvEbAzaT41vExsxZ1Ld0t7BB+6iEF3nyBNJHshjkgdR7nv8FLgNk0no4tj0GTq4Jj4UqHQ==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4850,16 +5381,16 @@
             }
         },
         "node_modules/@react-aria/tooltip": {
-            "version": "3.7.3",
-            "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.7.3.tgz",
-            "integrity": "sha512-uF2J/GRKTHSeEYMwvXTu7oK710nov/NRbY7db2Hh7yXluGmjJORXb5wxsy+lqHaWqPKBbkhmxBJYeJJpAqlZ5g==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/tooltip": "^3.4.8",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/tooltip": "^3.4.8",
+            "version": "3.7.4",
+            "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.7.4.tgz",
+            "integrity": "sha512-+XRx4HlLYqWY3fB8Z60bQi/rbWDIGlFUtXYbtoa1J+EyRWfhpvsYImP8qeeNO/vgjUtDy1j9oKa8p6App9mBMQ==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/tooltip": "^3.4.9",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/tooltip": "^3.4.9",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4867,17 +5398,17 @@
             }
         },
         "node_modules/@react-aria/tree": {
-            "version": "3.0.0-alpha.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/tree/-/tree-3.0.0-alpha.0.tgz",
-            "integrity": "sha512-/5dqWjSHEMlrvoJTsQuGHrtKRoxYco5OKrdIf5UQq5wHB/quUD6ZexEfn9/NzflyoHVz2zPIm7RU8J9WuZugNw==",
-            "dependencies": {
-                "@react-aria/gridlist": "^3.8.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/selection": "^3.18.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/tree": "^3.8.0",
-                "@react-types/button": "^3.9.3",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.0.0-alpha.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/tree/-/tree-3.0.0-alpha.1.tgz",
+            "integrity": "sha512-CucyeJ4VeAvWO5UJHt/l9JO65CVtsOVUctMOVNCQS77Isqp3olX9pvfD3LXt8fD5Ph2g0Q/b7siVpX5ieVB32g==",
+            "dependencies": {
+                "@react-aria/gridlist": "^3.8.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/selection": "^3.18.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/tree": "^3.8.1",
+                "@react-types/button": "^3.9.4",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4886,13 +5417,13 @@
             }
         },
         "node_modules/@react-aria/utils": {
-            "version": "3.24.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.24.0.tgz",
-            "integrity": "sha512-JAxkPhK5fCvFVNY2YG3TW3m1nTzwRcbz7iyTSkUzLFat4N4LZ7Kzh7NMHsgeE/oMOxd8zLY+XsUxMu/E/2GujA==",
+            "version": "3.24.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.24.1.tgz",
+            "integrity": "sha512-O3s9qhPMd6n42x9sKeJ3lhu5V1Tlnzhu6Yk8QOvDuXf7UGuUjXf9mzfHJt1dYzID4l9Fwm8toczBzPM9t0jc8Q==",
             "dependencies": {
-                "@react-aria/ssr": "^3.9.3",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/shared": "^3.23.0",
+                "@react-aria/ssr": "^3.9.4",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0",
                 "clsx": "^2.0.0"
             },
@@ -4901,15 +5432,15 @@
             }
         },
         "node_modules/@react-aria/virtualizer": {
-            "version": "3.10.0",
-            "resolved": "https://registry.npmjs.org/@react-aria/virtualizer/-/virtualizer-3.10.0.tgz",
-            "integrity": "sha512-bxpWicfmsipPnzXp6pSv6Xmo2yLZI5Np4sPDRVTNrsi41ecm295AjPTRLgf/A7Rni0xgyWhUS0FkS7JXTQEv+A==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/virtualizer": "^3.7.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.10.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/virtualizer/-/virtualizer-3.10.1.tgz",
+            "integrity": "sha512-y34w+n/B3nwwj18QHIZlkNj5Fn2rt5CbQE4BBWAM8jYZ5ypwF77i2toxhGTuk1Oo1/hgTX7JYIgDIAQbNraBcg==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/virtualizer": "^3.7.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4918,13 +5449,13 @@
             }
         },
         "node_modules/@react-aria/visually-hidden": {
-            "version": "3.8.11",
-            "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.11.tgz",
-            "integrity": "sha512-1JFruyAatoKnC18qrix8Q1gyUNlizWZvYdPADgB5btakMy0PEGTWPmFRK5gFsO+N0CZLCFTCip0dkUv6rrp31w==",
+            "version": "3.8.12",
+            "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.12.tgz",
+            "integrity": "sha512-Bawm+2Cmw3Xrlr7ARzl2RLtKh0lNUdJ0eNqzWcyx4c0VHUAWtThmH5l+HRqFUGzzutFZVo89SAy40BAbd0gjVw==",
             "dependencies": {
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/shared": "^3.23.0",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4959,24 +5490,24 @@
             "integrity": "sha512-x9ibmsP0ZVqzyCo1Pitbw+4b6iEXRw/r1TCy3vOUR3eKrzWLnHYZMR325BkZW2r8fnuWE/V3Fp4QZOP9qYORCw=="
         },
         "node_modules/@react-spectrum/actionbar": {
-            "version": "3.4.4",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/actionbar/-/actionbar-3.4.4.tgz",
-            "integrity": "sha512-Kao7LhiYcRjMRIdhRiYUDTdwALAMdHCEIVTbKYJ+OBbEy3Tzw382p+cogiBtwlcEI6/hVK+JdVyxgfsfZsalPg==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/live-announcer": "^3.3.3",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/actiongroup": "^3.10.4",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/overlays": "^5.6.0",
-                "@react-spectrum/text": "^3.5.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/collections": "^3.10.6",
-                "@react-types/actionbar": "^3.1.6",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.4.5",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/actionbar/-/actionbar-3.4.5.tgz",
+            "integrity": "sha512-9+b3B5he/zwyk+1pHc5l8/q6mBy+zKkphha2kBScbj/2XRHTwwlcamBJMANMYfVirQT9UP5FHGhHV6OiRgZLrA==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/live-announcer": "^3.3.4",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/actiongroup": "^3.10.5",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/overlays": "^5.6.1",
+                "@react-spectrum/text": "^3.5.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/collections": "^3.10.7",
+                "@react-types/actionbar": "^3.1.7",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -4986,25 +5517,25 @@
             }
         },
         "node_modules/@react-spectrum/actiongroup": {
-            "version": "3.10.4",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/actiongroup/-/actiongroup-3.10.4.tgz",
-            "integrity": "sha512-TY9DA+YFBqq+QnzJV1jnJ9vW3xDje5ZdU/WTlU8VBvxZrg9V0Qco1rWA2YSqAsTBOZQJ0iP5V7IvDjAoPrt5Kw==",
-            "dependencies": {
-                "@react-aria/actiongroup": "^3.7.4",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/menu": "^3.19.0",
-                "@react-spectrum/text": "^3.5.4",
-                "@react-spectrum/tooltip": "^3.6.6",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/list": "^3.10.4",
-                "@react-types/actiongroup": "^3.4.8",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
-                "@spectrum-icons/workflow": "^4.2.11",
+            "version": "3.10.5",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/actiongroup/-/actiongroup-3.10.5.tgz",
+            "integrity": "sha512-KHSuZvCD5XyOA4wz2iu85JQem2Y01pniWTfhzGLPfJG+1OdOCt+C0mO/jU0DL4NM6UwzdLy4JfvUij/xBsLrRw==",
+            "dependencies": {
+                "@react-aria/actiongroup": "^3.7.5",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/menu": "^3.19.1",
+                "@react-spectrum/text": "^3.5.5",
+                "@react-spectrum/tooltip": "^3.6.7",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/list": "^3.10.5",
+                "@react-types/actiongroup": "^3.4.9",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
+                "@spectrum-icons/workflow": "^4.2.12",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5014,14 +5545,14 @@
             }
         },
         "node_modules/@react-spectrum/avatar": {
-            "version": "3.0.11",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/avatar/-/avatar-3.0.11.tgz",
-            "integrity": "sha512-DwLXGiJHDB6XA0KpFD70gU4y3PyaYctCo8GqKbpgerMQJTeE3xZbzlZvt9XvBYx+BrOPA6T0/xpBmxGDaYDDBA==",
-            "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/avatar": "^3.0.6",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.0.12",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/avatar/-/avatar-3.0.12.tgz",
+            "integrity": "sha512-H5dZG+mPiSHlST2TBMfMR7mOf+g5C0i9Q2+aMMQ8khphXLFL4fj5GqxgEE7Mi5efS+raofwXJ/dM+AedsSl6WQ==",
+            "dependencies": {
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/avatar": "^3.0.7",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5030,15 +5561,15 @@
             }
         },
         "node_modules/@react-spectrum/badge": {
-            "version": "3.1.12",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/badge/-/badge-3.1.12.tgz",
-            "integrity": "sha512-iWj5mqj3MQ+UOksTuy9JMA+MTvOD33uzcsCKKhJPZZEHqfHMNE1shqaZCUuFCQ7Gmw/KbSDC2B2de1CL6fxjmw==",
-            "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/text": "^3.5.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/badge": "^3.1.8",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.1.13",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/badge/-/badge-3.1.13.tgz",
+            "integrity": "sha512-zfsmbw3hxYWxuySQZTMNkxI5vD1XktHNIBqDUYNaDu8A+GVaORI9pcrua4T2YXyQrw1hYXbqVAmeISJYURajjA==",
+            "dependencies": {
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/text": "^3.5.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/badge": "^3.1.9",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5047,22 +5578,22 @@
             }
         },
         "node_modules/@react-spectrum/breadcrumbs": {
-            "version": "3.9.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/breadcrumbs/-/breadcrumbs-3.9.6.tgz",
-            "integrity": "sha512-7bxRj3DlUC/TBTOtNY0rVktNTPlmWPD1AonPA0Ot+Hgm0S+eTdqPqvqJGTz6sFZx1vPgGTnp+RIg6sf5b/liGA==",
-            "dependencies": {
-                "@react-aria/breadcrumbs": "^3.5.12",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/menu": "^3.19.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/collections": "^3.10.6",
-                "@react-types/breadcrumbs": "^3.7.4",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.9.7",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/breadcrumbs/-/breadcrumbs-3.9.7.tgz",
+            "integrity": "sha512-1wA9cgSugaplYmT4z/WiUAZsOcXPWN+8sx43Wc5foS3qUSOLpW4+43sjDTVmzVlbXYuZ4byxf1nrXZNEqCWZXA==",
+            "dependencies": {
+                "@react-aria/breadcrumbs": "^3.5.13",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/menu": "^3.19.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/collections": "^3.10.7",
+                "@react-types/breadcrumbs": "^3.7.5",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5072,22 +5603,22 @@
             }
         },
         "node_modules/@react-spectrum/button": {
-            "version": "3.16.3",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/button/-/button-3.16.3.tgz",
-            "integrity": "sha512-cywlxV2N9cyffu9oGU45wVaOm9U0WNPGE+8978W2tmQMIFUBkQHRM2m7o9qr1C6T7D9hQhzXL0X5LQpTUj9PEQ==",
-            "dependencies": {
-                "@react-aria/button": "^3.9.4",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/progress": "^3.7.6",
-                "@react-spectrum/text": "^3.5.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/toggle": "^3.7.3",
-                "@react-types/button": "^3.9.3",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.16.4",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/button/-/button-3.16.4.tgz",
+            "integrity": "sha512-ksPZkmhkz8fJuu+cC9GM5e1pJ0d2sWmkU9sqKn5SNfWh9ngemgvShtkqkuQoz6ThH+MI3n/n4JhFd+UhJ/lILA==",
+            "dependencies": {
+                "@react-aria/button": "^3.9.5",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/progress": "^3.7.7",
+                "@react-spectrum/text": "^3.5.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/toggle": "^3.7.4",
+                "@react-types/button": "^3.9.4",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5096,14 +5627,14 @@
             }
         },
         "node_modules/@react-spectrum/buttongroup": {
-            "version": "3.6.12",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/buttongroup/-/buttongroup-3.6.12.tgz",
-            "integrity": "sha512-eCK+8DzzVO137IjNtdDX9UUMfKWDq4JYMMsGNHO7U146OYC8VnPHb1cdnfR0Pg7I9jefvwOeT0KKxwGenuuXfw==",
-            "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/buttongroup": "^3.3.8",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.6.13",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/buttongroup/-/buttongroup-3.6.13.tgz",
+            "integrity": "sha512-QUNTtDMiY/ydrpUYq8fO0kkssdnTEJsIxlfhbQa3ZEpEObjgt9XbAehNKPelWATwLNQ/gY8o21m9GT1m7J/8zg==",
+            "dependencies": {
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/buttongroup": "^3.3.9",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5112,25 +5643,25 @@
             }
         },
         "node_modules/@react-spectrum/calendar": {
-            "version": "3.4.8",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/calendar/-/calendar-3.4.8.tgz",
-            "integrity": "sha512-Ge8FryNtBvPhQch2678s5j6BuTipK4VdrSstZvG+Zq8QcHP3ksRwF2q1DifNS8iukZSEAS3lgl3Q2RhWXZKanw==",
-            "dependencies": {
-                "@internationalized/date": "^3.5.3",
-                "@react-aria/calendar": "^3.5.7",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-aria/visually-hidden": "^3.8.11",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/label": "^3.16.5",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/calendar": "^3.5.0",
-                "@react-types/button": "^3.9.3",
-                "@react-types/calendar": "^3.4.5",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.4.9",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/calendar/-/calendar-3.4.9.tgz",
+            "integrity": "sha512-5546bmMQ/v3dscTDFx0llEQ3jA23vkcjbiY7hIad5a9bpXHPQSuIeREelFPtsVUzsD3f3v2BL2nDAt6SPLVqCA==",
+            "dependencies": {
+                "@internationalized/date": "^3.5.4",
+                "@react-aria/calendar": "^3.5.8",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-aria/visually-hidden": "^3.8.12",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/label": "^3.16.6",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/calendar": "^3.5.1",
+                "@react-types/button": "^3.9.4",
+                "@react-types/calendar": "^3.4.6",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5140,23 +5671,23 @@
             }
         },
         "node_modules/@react-spectrum/checkbox": {
-            "version": "3.9.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/checkbox/-/checkbox-3.9.5.tgz",
-            "integrity": "sha512-M8ZwVohk9986IVVfnhjC++WzXNfeUTj8we5Ud1DnetA3vqpmCoBA5/ym0Ey5LCTizDnTu/9i9NwdxPr2vIDpsw==",
-            "dependencies": {
-                "@react-aria/checkbox": "^3.14.2",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-spectrum/form": "^3.7.5",
-                "@react-spectrum/label": "^3.16.5",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/checkbox": "^3.6.4",
-                "@react-stately/toggle": "^3.7.3",
-                "@react-types/checkbox": "^3.8.0",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.9.6",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/checkbox/-/checkbox-3.9.6.tgz",
+            "integrity": "sha512-aU4bDFwaiC2hpqOFv9vbUw20V6VlMO7pn1P8Q/qUfNxWVzPY03rJC0Gqcq8NQy2zofmm4tDBJKKOF1F4amGTyw==",
+            "dependencies": {
+                "@react-aria/checkbox": "^3.14.3",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-spectrum/form": "^3.7.6",
+                "@react-spectrum/label": "^3.16.6",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/checkbox": "^3.6.5",
+                "@react-stately/toggle": "^3.7.4",
+                "@react-types/checkbox": "^3.8.1",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0",
-                "react-aria-components": "^1.2.0"
+                "react-aria-components": "^1.2.1"
             },
             "peerDependencies": {
                 "@react-spectrum/provider": "^3.0.0",
@@ -5164,34 +5695,34 @@
             }
         },
         "node_modules/@react-spectrum/combobox": {
-            "version": "3.12.4",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/combobox/-/combobox-3.12.4.tgz",
-            "integrity": "sha512-Xw/QiT3DPaJiGvUkLTYmYRBqNcjpAWS2A40GuMCeDm2idJM6GBWy1k8xwzb0L08HInDCkIV6amqqwV6Et65Pnw==",
-            "dependencies": {
-                "@react-aria/button": "^3.9.4",
-                "@react-aria/combobox": "^3.9.0",
-                "@react-aria/dialog": "^3.5.13",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/form": "^3.0.4",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/label": "^3.7.7",
-                "@react-aria/overlays": "^3.22.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/form": "^3.7.5",
-                "@react-spectrum/label": "^3.16.5",
-                "@react-spectrum/listbox": "^3.12.8",
-                "@react-spectrum/overlays": "^5.6.0",
-                "@react-spectrum/progress": "^3.7.6",
-                "@react-spectrum/textfield": "^3.12.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/combobox": "^3.8.3",
-                "@react-types/button": "^3.9.3",
-                "@react-types/combobox": "^3.11.0",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.12.5",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/combobox/-/combobox-3.12.5.tgz",
+            "integrity": "sha512-S6TA8FrPm0ibLkeulki2S0DsUqy/hEcTVTvvic7qIRyURN/J+DQMQDWmy+Zzz9mxJr8qdJAoWSArBVWtxKhMKg==",
+            "dependencies": {
+                "@react-aria/button": "^3.9.5",
+                "@react-aria/combobox": "^3.9.1",
+                "@react-aria/dialog": "^3.5.14",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/form": "^3.0.5",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/label": "^3.7.8",
+                "@react-aria/overlays": "^3.22.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/form": "^3.7.6",
+                "@react-spectrum/label": "^3.16.6",
+                "@react-spectrum/listbox": "^3.12.9",
+                "@react-spectrum/overlays": "^5.6.1",
+                "@react-spectrum/progress": "^3.7.7",
+                "@react-spectrum/textfield": "^3.12.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/combobox": "^3.8.4",
+                "@react-types/button": "^3.9.4",
+                "@react-types/combobox": "^3.11.1",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5201,18 +5732,18 @@
             }
         },
         "node_modules/@react-spectrum/contextualhelp": {
-            "version": "3.6.10",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/contextualhelp/-/contextualhelp-3.6.10.tgz",
-            "integrity": "sha512-wj3HSNBaFY77hs2MvFDDNw6W9J6XEttS2G/ISC7d4ZjCTuBapj+0PwVM1rGjf5k95FlorSj8jwRZQog8/hXCpw==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/dialog": "^3.8.10",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/contextualhelp": "^3.2.9",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/workflow": "^4.2.11",
+            "version": "3.6.11",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/contextualhelp/-/contextualhelp-3.6.11.tgz",
+            "integrity": "sha512-mQimyXdwXyZWFWO/7BdHZ46YzCQThjnHGGMmlv2y+YfqaOqoP3UTQb4D6noSbV1M6zKJgMq5timhVo81Sujk9Q==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/dialog": "^3.8.11",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/contextualhelp": "^3.2.10",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/workflow": "^4.2.12",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5222,29 +5753,29 @@
             }
         },
         "node_modules/@react-spectrum/datepicker": {
-            "version": "3.9.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/datepicker/-/datepicker-3.9.5.tgz",
-            "integrity": "sha512-MTOhAuhjX9PKioqGPWksPZgeGiVZesRi26WNUefu1hCrVbmfGXJcL17MNnJbq4bGtMfvaYPOze05OOpka30V8g==",
-            "dependencies": {
-                "@internationalized/date": "^3.5.3",
-                "@react-aria/datepicker": "^3.10.0",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/calendar": "^3.4.8",
-                "@react-spectrum/dialog": "^3.8.10",
-                "@react-spectrum/form": "^3.7.5",
-                "@react-spectrum/label": "^3.16.5",
-                "@react-spectrum/layout": "^3.6.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-spectrum/view": "^3.6.9",
-                "@react-stately/datepicker": "^3.9.3",
-                "@react-types/datepicker": "^3.7.3",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
-                "@spectrum-icons/workflow": "^4.2.11",
+            "version": "3.9.6",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/datepicker/-/datepicker-3.9.6.tgz",
+            "integrity": "sha512-MeLle/V2t3dBe7wq/qkc39hJyV6NTZncCZnBfPHnTcLXeZl8sfTf4rt11JS3Y4JOOtM3jiuw1oMpZ7wv+h6hOA==",
+            "dependencies": {
+                "@internationalized/date": "^3.5.4",
+                "@react-aria/datepicker": "^3.10.1",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/calendar": "^3.4.9",
+                "@react-spectrum/dialog": "^3.8.11",
+                "@react-spectrum/form": "^3.7.6",
+                "@react-spectrum/label": "^3.16.6",
+                "@react-spectrum/layout": "^3.6.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-spectrum/view": "^3.6.10",
+                "@react-stately/datepicker": "^3.9.4",
+                "@react-types/datepicker": "^3.7.4",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
+                "@spectrum-icons/workflow": "^4.2.12",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5254,28 +5785,28 @@
             }
         },
         "node_modules/@react-spectrum/dialog": {
-            "version": "3.8.10",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/dialog/-/dialog-3.8.10.tgz",
-            "integrity": "sha512-IcgLn7/ULwwBT41m4QOxqVXu58UG0N9Gm6jo7iAeOnYZHLdp31MEAxmvCUvd3xa4B5wTCG1AxMIQUZnuAac15g==",
-            "dependencies": {
-                "@react-aria/dialog": "^3.5.13",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/overlays": "^3.22.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/buttongroup": "^3.6.12",
-                "@react-spectrum/divider": "^3.5.12",
-                "@react-spectrum/layout": "^3.6.4",
-                "@react-spectrum/overlays": "^5.6.0",
-                "@react-spectrum/text": "^3.5.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-spectrum/view": "^3.6.9",
-                "@react-stately/overlays": "^3.6.6",
-                "@react-types/button": "^3.9.3",
-                "@react-types/dialog": "^3.5.9",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.8.11",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/dialog/-/dialog-3.8.11.tgz",
+            "integrity": "sha512-/ng49paipA3MHC5nVbfDlZL6QXFJWCrSDgQ4fXon5q6gB+94d2DvkZ+CvnLZ5oo0Bpkws/vT3jxcG0hsBz1f6g==",
+            "dependencies": {
+                "@react-aria/dialog": "^3.5.14",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/overlays": "^3.22.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/buttongroup": "^3.6.13",
+                "@react-spectrum/divider": "^3.5.13",
+                "@react-spectrum/layout": "^3.6.5",
+                "@react-spectrum/overlays": "^5.6.1",
+                "@react-spectrum/text": "^3.5.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-spectrum/view": "^3.6.10",
+                "@react-stately/overlays": "^3.6.7",
+                "@react-types/button": "^3.9.4",
+                "@react-types/dialog": "^3.5.10",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5285,14 +5816,14 @@
             }
         },
         "node_modules/@react-spectrum/divider": {
-            "version": "3.5.12",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/divider/-/divider-3.5.12.tgz",
-            "integrity": "sha512-EVd/0chomjZni+5OZMrlG6Rqd0VLO3aTyNvvckS28A62hIk/zCGJzJZdPCsK0RZu5P6M61SdW3epUScX7nqO1A==",
-            "dependencies": {
-                "@react-aria/separator": "^3.3.12",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/divider": "^3.3.8",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.5.13",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/divider/-/divider-3.5.13.tgz",
+            "integrity": "sha512-7LoOTj+qs3yTBZiWudgU5TpzLREApMt0rwzalyq9ORRQrE8C0YXUxlSLPizyUmQeP4Rj8p3lCdUNWAe1cAn1tQ==",
+            "dependencies": {
+                "@react-aria/separator": "^3.3.13",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/divider": "^3.3.9",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5300,13 +5831,13 @@
             }
         },
         "node_modules/@react-spectrum/dnd": {
-            "version": "3.3.9",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/dnd/-/dnd-3.3.9.tgz",
-            "integrity": "sha512-o2SE26LgZ2+FRAY8mXbKyyf5BCawx7sSq/9oeZhi9wb9T+SSgGq7Ab0bYcq5MEn5Q1QIB1MaGczIM8nZfd+Wtw==",
+            "version": "3.3.10",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/dnd/-/dnd-3.3.10.tgz",
+            "integrity": "sha512-Qp+Fp6BnMgrp5G18IAcbEUetf2YWelRugYJr8TH8h236n8lariyUpri1Mj604DV/UqNoK6f6k6ocY8JBmvOd9Q==",
             "dependencies": {
-                "@react-aria/dnd": "^3.6.0",
-                "@react-stately/dnd": "^3.3.0",
-                "@react-types/shared": "^3.23.0",
+                "@react-aria/dnd": "^3.6.1",
+                "@react-stately/dnd": "^3.3.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5316,16 +5847,16 @@
             }
         },
         "node_modules/@react-spectrum/dropzone": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/dropzone/-/dropzone-3.0.0.tgz",
-            "integrity": "sha512-ptMmfMwMx0LLTg6QzXCyqv4ffuYh+Y13srqnPZKDiHK5LP+lYRUNT250bFVEqxO6F4LYQrmet6dUaRrMOILn2w==",
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/dropzone/-/dropzone-3.0.1.tgz",
+            "integrity": "sha512-8hEu6mF1ExJMc+Pv5lk3YHz3yZcRy4FkjKgBMXWWn8kxT2DEIK5hONspECBmlsNtUHuk1QQFFSISMGgsMZFQVw==",
             "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/shared": "^3.23.0",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0",
-                "react-aria-components": "^1.2.0"
+                "react-aria-components": "^1.2.1"
             },
             "peerDependencies": {
                 "@react-spectrum/provider": "^3.0.0",
@@ -5333,12 +5864,12 @@
             }
         },
         "node_modules/@react-spectrum/filetrigger": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/filetrigger/-/filetrigger-3.0.0.tgz",
-            "integrity": "sha512-PH5gX+KYTRKO2R3XZB0KUvQssoQLifdvJV3hAeNCl8XgAioPkyVJsxO7SLNmIqShI/lyv9jgqPne3gI5m7pDYg==",
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/filetrigger/-/filetrigger-3.0.1.tgz",
+            "integrity": "sha512-9PfhjeGdHjyumlzdvrFNumKnGeaK41kYragnDMSD3KNH0XWu2kVUTB7eUbA9d6FLL/+g8tyPx+wDo0ZJW79Fpg==",
             "dependencies": {
                 "@swc/helpers": "^0.5.0",
-                "react-aria-components": "^1.2.0"
+                "react-aria-components": "^1.2.1"
             },
             "peerDependencies": {
                 "@react-spectrum/provider": "^3.0.0",
@@ -5346,15 +5877,15 @@
             }
         },
         "node_modules/@react-spectrum/form": {
-            "version": "3.7.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/form/-/form-3.7.5.tgz",
-            "integrity": "sha512-lVqtZCgGNyw75MvDO6Okh0lK1bXWvm0+V03rMWiBcXDABHWxSVKfgY31qXGXhptukc1DDRIcNLuXJR9joLMKpg==",
-            "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/form": "^3.0.2",
-                "@react-types/form": "^3.7.3",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.7.6",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/form/-/form-3.7.6.tgz",
+            "integrity": "sha512-uh/r3d3haWGjdxh++HCCbezWRiw7PGDStvOHEVLCVz/cN0lrUb77dwx5E4jMvY+oLkaBv05R3UtdMxNdXV1DZQ==",
+            "dependencies": {
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/form": "^3.0.3",
+                "@react-types/form": "^3.7.4",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5363,13 +5894,13 @@
             }
         },
         "node_modules/@react-spectrum/icon": {
-            "version": "3.7.12",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/icon/-/icon-3.7.12.tgz",
-            "integrity": "sha512-fdDiAFdiES02mDl2NgJuWjbYfwSxQQQo0zNlfzvqwa6gs0OKDf+0Oi+h764Z0prDEUGHLy/cGe1L1olhuQprVw==",
+            "version": "3.7.13",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/icon/-/icon-3.7.13.tgz",
+            "integrity": "sha512-hbd1OZ2UOOZ807zkU/ay8TWQOSnB56cj9HHm3FzUBjpTwpt849Pvk4TBO5K2SAmuQi4gslmvFGmd8BoOEoEcjg==",
             "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/shared": "^3.23.0",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5378,15 +5909,15 @@
             }
         },
         "node_modules/@react-spectrum/illustratedmessage": {
-            "version": "3.5.0",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/illustratedmessage/-/illustratedmessage-3.5.0.tgz",
-            "integrity": "sha512-L994E940uDdXu0gcRlwZ8IMIVSjP3sfdRLH98RD1pPT+MYbzT7NN/Xj+YistaEG9D9J43liGY5R3fY39Njep0g==",
-            "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/layout": "^3.6.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/illustratedmessage": "^3.3.8",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.5.1",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/illustratedmessage/-/illustratedmessage-3.5.1.tgz",
+            "integrity": "sha512-HpTueLW3duV1TE3sYw5WeBaGECqS0RVEXr2UaXDXSLteY238Oc7prli2qPk2xaGeRKgh97jsfySDBOvedCuZJQ==",
+            "dependencies": {
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/layout": "^3.6.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/illustratedmessage": "^3.3.9",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5395,14 +5926,14 @@
             }
         },
         "node_modules/@react-spectrum/image": {
-            "version": "3.5.0",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/image/-/image-3.5.0.tgz",
-            "integrity": "sha512-r+vPqssEqRtrwi9gC1KhCN0wQCODGwrx9luVlxhXyBJzhQLVyb4vcDbtcVZ8HwZ8iOObjblX96ITmk6QGGDVaw==",
-            "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/image": "^3.4.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.5.1",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/image/-/image-3.5.1.tgz",
+            "integrity": "sha512-MFl2WkMT224L4v1M9n4ZGkkXhBqecQ6uWZfxHBURrTXFMgPq5sxWY7qw42pc3mAX339kNiLZXTCTA5mKyiqxnQ==",
+            "dependencies": {
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/image": "^3.4.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5411,17 +5942,17 @@
             }
         },
         "node_modules/@react-spectrum/inlinealert": {
-            "version": "3.2.4",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/inlinealert/-/inlinealert-3.2.4.tgz",
-            "integrity": "sha512-dTfCQMtv+mfdtixHDRBFwhtk7K0fLIoArGaYJOcifxRBmRWVB8np6rizpe/e89AECW4eyGeAJbvKgl8CcrFxwg==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/layout": "^3.6.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.2.5",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/inlinealert/-/inlinealert-3.2.5.tgz",
+            "integrity": "sha512-D9EF8pIQME6GHpvk7HR8/Qr3g79l78EsvczL0wGOzdcMt+LoV9F6RNJSobrI+dgzX0RcbqRyWsdCixboFrfefg==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/layout": "^3.6.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5430,18 +5961,18 @@
             }
         },
         "node_modules/@react-spectrum/label": {
-            "version": "3.16.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/label/-/label-3.16.5.tgz",
-            "integrity": "sha512-357dr3Yjkxs8oKVWwiVyoVyvsLeDre64/N5Td8KKV0vcI8DCfEXMCh8bFvEkD/NUoiNdgBjyGBwbNmG7eneWow==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/form": "^3.7.5",
-                "@react-spectrum/layout": "^3.6.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/label": "^3.9.2",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.16.6",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/label/-/label-3.16.6.tgz",
+            "integrity": "sha512-RF1YqQOKpDYqnSxM+TK/4gZGBsoKjfaZYsOvjya90LvUO8/2Va8Ux0bwHlqtOxu46yjxPLflpt0u9rl9ce+Ubg==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/form": "^3.7.6",
+                "@react-spectrum/layout": "^3.6.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/label": "^3.9.3",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5450,16 +5981,16 @@
             }
         },
         "node_modules/@react-spectrum/labeledvalue": {
-            "version": "3.1.13",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/labeledvalue/-/labeledvalue-3.1.13.tgz",
-            "integrity": "sha512-gokBp4CkV1Btn86w/yrKiqwfwiGND2CnIzx1dEXZLBdBCFCt9bE09YfGvQXeYO2GDj+q/WEBuCfWMKhcOdIQDw==",
-            "dependencies": {
-                "@internationalized/date": "^3.5.3",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/label": "^3.16.5",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.1.14",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/labeledvalue/-/labeledvalue-3.1.14.tgz",
+            "integrity": "sha512-JeZHCRRmSPShgOozHs31+e0NnN4S3+SP0NpPGFUo0itPHvOcJSV9aoRCefdMTdXbUupIi5h1EM5Ty0owdy8y0w==",
+            "dependencies": {
+                "@internationalized/date": "^3.5.4",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/label": "^3.16.6",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5468,14 +5999,14 @@
             }
         },
         "node_modules/@react-spectrum/layout": {
-            "version": "3.6.4",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/layout/-/layout-3.6.4.tgz",
-            "integrity": "sha512-GY2O4IDbeEJHjxs6kp6WKnrFDTV/74HkCWjqwlYdYauSOIwldg1Kz2NBeJ3NpcM6zrXTdtoXXJcmv0+wu4sF4Q==",
+            "version": "3.6.5",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/layout/-/layout-3.6.5.tgz",
+            "integrity": "sha512-kl/vZue7ZQZtkypPeOPZ3WENk4Mn9aYsjSBFZP+3GVRGPi0GBlhVOSicraio7UD3oGz1Xkhy5WZg01s3zQC0zg==",
             "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/layout": "^3.3.14",
-                "@react-types/shared": "^3.23.0",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/layout": "^3.3.15",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5484,16 +6015,16 @@
             }
         },
         "node_modules/@react-spectrum/link": {
-            "version": "3.6.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/link/-/link-3.6.6.tgz",
-            "integrity": "sha512-zTMd2EgMbFom8mi/kwGxD7c39MP2bYuYX3agAuT3YiC2Mr6YVh2w6HWMn+jMc4HX9gzQvF69CDX4DnRi284xgQ==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/link": "^3.7.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/link": "^3.5.4",
+            "version": "3.6.7",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/link/-/link-3.6.7.tgz",
+            "integrity": "sha512-g9yWHXO8OdoOnUH0xAIek5wDHDi0gYmEL3hqqKwzfMvkmQQCQjVS+D/9IlkxKT5LaumUiHdHDiA2PL1voPUh0g==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/link": "^3.7.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/link": "^3.5.5",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5502,30 +6033,30 @@
             }
         },
         "node_modules/@react-spectrum/list": {
-            "version": "3.7.9",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/list/-/list-3.7.9.tgz",
-            "integrity": "sha512-dlmaeH4/64URHOrNBh8LrUAjyUMvHpPAwGnmLQ1oPGIUHJ8rwpc68K+RdpyZ/riuIHqWe/HqcLmnIlHSoSJEAw==",
-            "dependencies": {
-                "@react-aria/button": "^3.9.4",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/gridlist": "^3.8.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-aria/virtualizer": "^3.10.0",
-                "@react-aria/visually-hidden": "^3.8.11",
-                "@react-spectrum/checkbox": "^3.9.5",
-                "@react-spectrum/dnd": "^3.3.9",
-                "@react-spectrum/layout": "^3.6.4",
-                "@react-spectrum/progress": "^3.7.6",
-                "@react-spectrum/text": "^3.5.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/layout": "^3.13.8",
-                "@react-stately/list": "^3.10.4",
-                "@react-types/grid": "^3.2.5",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.7.10",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/list/-/list-3.7.10.tgz",
+            "integrity": "sha512-UxS+pXgJGaTeLP+KQdq7IQsaJN1tq6tpqFXFKXdrXGnLZPd9GtBT3zYP2Rnb9r/6Vm67D+pewF6tVKLzctE1sw==",
+            "dependencies": {
+                "@react-aria/button": "^3.9.5",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/gridlist": "^3.8.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-aria/virtualizer": "^3.10.1",
+                "@react-aria/visually-hidden": "^3.8.12",
+                "@react-spectrum/checkbox": "^3.9.6",
+                "@react-spectrum/dnd": "^3.3.10",
+                "@react-spectrum/layout": "^3.6.5",
+                "@react-spectrum/progress": "^3.7.7",
+                "@react-spectrum/text": "^3.5.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/layout": "^3.13.9",
+                "@react-stately/list": "^3.10.5",
+                "@react-types/grid": "^3.2.6",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0",
                 "react-transition-group": "^4.4.5"
             },
@@ -5536,27 +6067,27 @@
             }
         },
         "node_modules/@react-spectrum/listbox": {
-            "version": "3.12.8",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/listbox/-/listbox-3.12.8.tgz",
-            "integrity": "sha512-ZfUZRxzbXkmRRsC90dQsVYCqYxVjBb/8QHqFMKzSSARHmJCv57abCdqAS2eRPrfvoZVzIa1DsIVe1jq5mP5s0g==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/listbox": "^3.12.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-aria/virtualizer": "^3.10.0",
-                "@react-spectrum/layout": "^3.6.4",
-                "@react-spectrum/progress": "^3.7.6",
-                "@react-spectrum/text": "^3.5.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/layout": "^3.13.8",
-                "@react-stately/list": "^3.10.4",
-                "@react-stately/virtualizer": "^3.7.0",
-                "@react-types/listbox": "^3.4.8",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.12.9",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/listbox/-/listbox-3.12.9.tgz",
+            "integrity": "sha512-9adZJtEtAVwNtJEU70edZOlx+LfBOeVpWCOXoAJ+5iU+rNrQER7bEpFj15GlJOL+vcwFuCPoIsDBKSxygJANLw==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/listbox": "^3.12.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-aria/virtualizer": "^3.10.1",
+                "@react-spectrum/layout": "^3.6.5",
+                "@react-spectrum/progress": "^3.7.7",
+                "@react-spectrum/text": "^3.5.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/layout": "^3.13.9",
+                "@react-stately/list": "^3.10.5",
+                "@react-stately/virtualizer": "^3.7.1",
+                "@react-types/listbox": "^3.4.9",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5566,31 +6097,31 @@
             }
         },
         "node_modules/@react-spectrum/menu": {
-            "version": "3.19.0",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/menu/-/menu-3.19.0.tgz",
-            "integrity": "sha512-4UCxuX2t/qJFoCV430lSIZC1PUh1hgcULfTMv0u2S5Lz8DJfFH5tYfI2ChN/XeYqb8AwmjCWov6muH922ADwhw==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/menu": "^3.14.0",
-                "@react-aria/overlays": "^3.22.0",
-                "@react-aria/separator": "^3.3.12",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/layout": "^3.6.4",
-                "@react-spectrum/overlays": "^5.6.0",
-                "@react-spectrum/text": "^3.5.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/menu": "^3.7.0",
-                "@react-stately/overlays": "^3.6.6",
-                "@react-stately/tree": "^3.8.0",
-                "@react-types/menu": "^3.9.8",
-                "@react-types/overlays": "^3.8.6",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
-                "@spectrum-icons/workflow": "^4.2.11",
+            "version": "3.19.1",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/menu/-/menu-3.19.1.tgz",
+            "integrity": "sha512-/bpqSPef1UvoaIwd5GVrqMt8LiByi5rV9yh0K+SSzZ5uY/w4zRQN9y14XnLf4P53R67DpSqAqk3JoWOLFj0Zcg==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/menu": "^3.14.1",
+                "@react-aria/overlays": "^3.22.1",
+                "@react-aria/separator": "^3.3.13",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/layout": "^3.6.5",
+                "@react-spectrum/overlays": "^5.6.1",
+                "@react-spectrum/text": "^3.5.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/menu": "^3.7.1",
+                "@react-stately/overlays": "^3.6.7",
+                "@react-stately/tree": "^3.8.1",
+                "@react-types/menu": "^3.9.9",
+                "@react-types/overlays": "^3.8.7",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
+                "@spectrum-icons/workflow": "^4.2.12",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5600,15 +6131,15 @@
             }
         },
         "node_modules/@react-spectrum/meter": {
-            "version": "3.5.0",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/meter/-/meter-3.5.0.tgz",
-            "integrity": "sha512-AsBXu6+ZwVj8/pwXRiI8qkOl8KDUE6dLvhjfkuX5POh7T2yjHrZbrHtKplzcU6Bb2OrgW+EZEbCWqs6uHDIqHg==",
-            "dependencies": {
-                "@react-aria/meter": "^3.4.12",
-                "@react-spectrum/progress": "^3.7.6",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/meter": "^3.4.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.5.1",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/meter/-/meter-3.5.1.tgz",
+            "integrity": "sha512-xmQwPDmT8hfkEuyUrijpe2xXyzWlFErrnKpQIf49Lql/GudeGHIvtekx3Qj2kvhwLpHKeOOECk35PufCJmwF2A==",
+            "dependencies": {
+                "@react-aria/meter": "^3.4.13",
+                "@react-spectrum/progress": "^3.7.7",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/meter": "^3.4.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5617,26 +6148,26 @@
             }
         },
         "node_modules/@react-spectrum/numberfield": {
-            "version": "3.9.2",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/numberfield/-/numberfield-3.9.2.tgz",
-            "integrity": "sha512-eLHxVYYc2JqcImIr4vj/HzWRFTe1R2O+v7rJpStCUGWu4pSgElSCY6tHmn1woCF4AxSxsLviemwZ+oaz+42iWQ==",
-            "dependencies": {
-                "@react-aria/button": "^3.9.4",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/numberfield": "^3.11.2",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/form": "^3.7.5",
-                "@react-spectrum/label": "^3.16.5",
-                "@react-spectrum/textfield": "^3.12.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/numberfield": "^3.9.2",
-                "@react-types/button": "^3.9.3",
-                "@react-types/numberfield": "^3.8.2",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
-                "@spectrum-icons/workflow": "^4.2.11",
+            "version": "3.9.3",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/numberfield/-/numberfield-3.9.3.tgz",
+            "integrity": "sha512-t3LllH5NkaqlwkvfFVizmzp4+MhMCqooLlUsBIbDgqyNCWEbxiC16ZqPOPkZkBDFio1aKX0zzSb9SiuUFw2ZwA==",
+            "dependencies": {
+                "@react-aria/button": "^3.9.5",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/numberfield": "^3.11.3",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/form": "^3.7.6",
+                "@react-spectrum/label": "^3.16.6",
+                "@react-spectrum/textfield": "^3.12.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/numberfield": "^3.9.3",
+                "@react-types/button": "^3.9.4",
+                "@react-types/numberfield": "^3.8.3",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
+                "@spectrum-icons/workflow": "^4.2.12",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5646,17 +6177,17 @@
             }
         },
         "node_modules/@react-spectrum/overlays": {
-            "version": "5.6.0",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/overlays/-/overlays-5.6.0.tgz",
-            "integrity": "sha512-cP2SWSZ8US3+NtiFtkKn6yVNrra4wX59hliSrBijfFRHs1OFGSx3yLJfZtjibfEcdCj/0OPHyJvXRlxgG+vu4A==",
-            "dependencies": {
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/overlays": "^3.22.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/overlays": "^3.6.6",
-                "@react-types/overlays": "^3.8.6",
-                "@react-types/shared": "^3.23.0",
+            "version": "5.6.1",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/overlays/-/overlays-5.6.1.tgz",
+            "integrity": "sha512-ABacMG1V6gHCHHHtD01xt9RjTCu51Kytr/oHdUPEFd5Zvh8m/O7j3IQI4nSj5a5kDoj73NAkENq9Cq12gjwL4g==",
+            "dependencies": {
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/overlays": "^3.22.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/overlays": "^3.6.7",
+                "@react-types/overlays": "^3.8.7",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0",
                 "react-transition-group": "^4.4.5"
             },
@@ -5667,27 +6198,27 @@
             }
         },
         "node_modules/@react-spectrum/picker": {
-            "version": "3.14.4",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/picker/-/picker-3.14.4.tgz",
-            "integrity": "sha512-JM0cYnq0mGsOUwnbhRNWQ9jzi73Ub3S6+v5bzjyKps+96BYdW8Wr+KY/tQg49UCAcwcY0g30tbyEzqXzTpPkdA==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/select": "^3.14.4",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/form": "^3.7.5",
-                "@react-spectrum/label": "^3.16.5",
-                "@react-spectrum/listbox": "^3.12.8",
-                "@react-spectrum/overlays": "^5.6.0",
-                "@react-spectrum/progress": "^3.7.6",
-                "@react-spectrum/text": "^3.5.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/select": "^3.6.3",
-                "@react-types/select": "^3.9.3",
-                "@react-types/shared": "^3.23.0",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.14.5",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/picker/-/picker-3.14.5.tgz",
+            "integrity": "sha512-FBCMibgStP62XKS2yJWHtn+XOLsxuzs0pl0jHkozuBaqC42H6fkDcINgQ08wbS2PlEEJSOYIkeL3LXFcxuewEA==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/select": "^3.14.5",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/form": "^3.7.6",
+                "@react-spectrum/label": "^3.16.6",
+                "@react-spectrum/listbox": "^3.12.9",
+                "@react-spectrum/overlays": "^5.6.1",
+                "@react-spectrum/progress": "^3.7.7",
+                "@react-spectrum/text": "^3.5.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/select": "^3.6.4",
+                "@react-types/select": "^3.9.4",
+                "@react-types/shared": "^3.23.1",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5697,15 +6228,15 @@
             }
         },
         "node_modules/@react-spectrum/progress": {
-            "version": "3.7.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/progress/-/progress-3.7.6.tgz",
-            "integrity": "sha512-LlU8F43jWCse+3FgWPJNMb5wGQmk643ppbl2frxPHMiTb2YpaZYd+9vr2EndOrZpenjO2oTvDidgeprbm53LLA==",
-            "dependencies": {
-                "@react-aria/progress": "^3.4.12",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/progress": "^3.5.3",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.7.7",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/progress/-/progress-3.7.7.tgz",
+            "integrity": "sha512-FI/oc9hEQqbv00VJbaxqFTncBDDbxWN9cbvNNrPoROBQWL3NgB3tvEqY/fm5IXtDeFEV/U+tSm8BnZTGn6Mdxg==",
+            "dependencies": {
+                "@react-aria/progress": "^3.4.13",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/progress": "^3.5.4",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5714,16 +6245,16 @@
             }
         },
         "node_modules/@react-spectrum/provider": {
-            "version": "3.9.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/provider/-/provider-3.9.6.tgz",
-            "integrity": "sha512-BSjO2CeUognPEzyLhFu25aVsBbpeoRlinCdQ/oMzvQwGxlcf/OKR6fkZMKJrpMuhh155ilDZXe0UFzl1RcziYA==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/overlays": "^3.22.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/provider": "^3.8.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.9.7",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/provider/-/provider-3.9.7.tgz",
+            "integrity": "sha512-VRu8cOWrLJU/Krulo8njfPCMeJT+uu1k9GjFZ9Cw88mHGW7a3MK54IzI5p2evLPab7pgplPIoJcv3bC2XB+DAA==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/overlays": "^3.22.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/provider": "^3.8.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0",
                 "clsx": "^2.0.0"
             },
@@ -5733,19 +6264,19 @@
             }
         },
         "node_modules/@react-spectrum/radio": {
-            "version": "3.7.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/radio/-/radio-3.7.5.tgz",
-            "integrity": "sha512-g2Neh30G4UwOVBGVxvYxE+Bx+bVNFNOtK/MHCw+0tYZ0ysVYKVqqoNvQBmKNcqrDJaulnLwB9Igcm6SDjesGFA==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/radio": "^3.10.3",
-                "@react-spectrum/form": "^3.7.5",
-                "@react-spectrum/label": "^3.16.5",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/radio": "^3.10.3",
-                "@react-types/radio": "^3.8.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.7.6",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/radio/-/radio-3.7.6.tgz",
+            "integrity": "sha512-KRtipJfIkRWbnvhS/zZ7j3ltEQXrQeVNhmIWChuP+sC5hdA3N8llMgf30Xa9PqtFhGH4CvUlXC9NA/rhLWnm4w==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/radio": "^3.10.4",
+                "@react-spectrum/form": "^3.7.6",
+                "@react-spectrum/label": "^3.16.6",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/radio": "^3.10.4",
+                "@react-types/radio": "^3.8.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5754,19 +6285,19 @@
             }
         },
         "node_modules/@react-spectrum/searchfield": {
-            "version": "3.8.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/searchfield/-/searchfield-3.8.5.tgz",
-            "integrity": "sha512-yhV5DBcI0gztcXamW1EYgr0SjVNjytUoEeR620IBb0Ta0g3XJOufVdmgJsW6114WMqQIXpiUq/Em8+Dy+iGqCg==",
-            "dependencies": {
-                "@react-aria/searchfield": "^3.7.4",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/form": "^3.7.5",
-                "@react-spectrum/textfield": "^3.12.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/searchfield": "^3.5.2",
-                "@react-types/searchfield": "^3.5.4",
-                "@react-types/textfield": "^3.9.2",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.8.6",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/searchfield/-/searchfield-3.8.6.tgz",
+            "integrity": "sha512-RU928ZeQsqPGMsNVtoLvahHmuRC3OAW9im5W0/CVgglINn2IapF2U0oxHVw6ymzx1NyCYrYR8pO9skMF0E68/Q==",
+            "dependencies": {
+                "@react-aria/searchfield": "^3.7.5",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/form": "^3.7.6",
+                "@react-spectrum/textfield": "^3.12.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/searchfield": "^3.5.3",
+                "@react-types/searchfield": "^3.5.5",
+                "@react-types/textfield": "^3.9.3",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5775,20 +6306,20 @@
             }
         },
         "node_modules/@react-spectrum/slider": {
-            "version": "3.6.8",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/slider/-/slider-3.6.8.tgz",
-            "integrity": "sha512-P+0wtr4WePMU1CSW2AEGgm7l07EoC0lJGOrvQ4bif2Q56yE+QDQClXk6RAFY9eckK9dgMCXmYd5+pT8p4pZ24w==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/slider": "^3.7.7",
-                "@react-aria/utils": "^3.24.0",
-                "@react-aria/visually-hidden": "^3.8.11",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/slider": "^3.5.3",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/slider": "^3.7.2",
+            "version": "3.6.9",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/slider/-/slider-3.6.9.tgz",
+            "integrity": "sha512-2X6qxlyObfowb8uZQ8UXEozozcfGLzhQI9BS9DS9Kste/REXMTcRDzFygP1D1HdkvRaWmYRNoYhi/Jl2Kkw7Eg==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/slider": "^3.7.8",
+                "@react-aria/utils": "^3.24.1",
+                "@react-aria/visually-hidden": "^3.8.12",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/slider": "^3.5.4",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/slider": "^3.7.3",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5797,14 +6328,14 @@
             }
         },
         "node_modules/@react-spectrum/statuslight": {
-            "version": "3.5.12",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/statuslight/-/statuslight-3.5.12.tgz",
-            "integrity": "sha512-1I5RaE1dCtmxCzUisE2xtQiD++8C2fzgyb0ayP554HSzsP+ZCE0mUxpW7DtoujASyR8h7E7M7wxP1SFEKgI3bA==",
-            "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/statuslight": "^3.3.8",
+            "version": "3.5.13",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/statuslight/-/statuslight-3.5.13.tgz",
+            "integrity": "sha512-FvvsDVs9lapRf5zmOq3g8ZRpAxOTVRfhG9WyehIqgaRPtqqNpQhAGSXWz0ErXF3zV8AwVvjD70g0atcDCoDeBQ==",
+            "dependencies": {
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/statuslight": "^3.3.9",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5813,17 +6344,17 @@
             }
         },
         "node_modules/@react-spectrum/switch": {
-            "version": "3.5.4",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/switch/-/switch-3.5.4.tgz",
-            "integrity": "sha512-8efBXAL2AR2+Vicazyc3z/Us4/dkm2Gi/CpCBhAEDZne2fnNM6X7zFXHEDhMgPn4oDZeUj76VwmBM4MEr+3m3g==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/switch": "^3.6.3",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/toggle": "^3.7.3",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/switch": "^3.5.2",
+            "version": "3.5.5",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/switch/-/switch-3.5.5.tgz",
+            "integrity": "sha512-IIVctsGXnChqMlvf2/pMRkI84vyjf0gMsBXEgky8h8s4i91wxQvl6800/4I9rCSQdAAnQYb+Nd3St8Ik7BupQg==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/switch": "^3.6.4",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/toggle": "^3.7.4",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/switch": "^3.5.3",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5832,34 +6363,34 @@
             }
         },
         "node_modules/@react-spectrum/table": {
-            "version": "3.12.9",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/table/-/table-3.12.9.tgz",
-            "integrity": "sha512-lFEkHLuMd5owB9vQjeGDOiBah/xOn4zUBtieMKHP6xLh7vUG27zr6vcQzpizNsHT3273Rktr34IjRf/U26Mu4w==",
-            "dependencies": {
-                "@react-aria/button": "^3.9.4",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/overlays": "^3.22.0",
-                "@react-aria/table": "^3.14.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-aria/virtualizer": "^3.10.0",
-                "@react-aria/visually-hidden": "^3.8.11",
-                "@react-spectrum/checkbox": "^3.9.5",
-                "@react-spectrum/dnd": "^3.3.9",
-                "@react-spectrum/layout": "^3.6.4",
-                "@react-spectrum/menu": "^3.19.0",
-                "@react-spectrum/progress": "^3.7.6",
-                "@react-spectrum/tooltip": "^3.6.6",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/flags": "^3.0.2",
-                "@react-stately/layout": "^3.13.8",
-                "@react-stately/table": "^3.11.7",
-                "@react-stately/virtualizer": "^3.7.0",
-                "@react-types/grid": "^3.2.5",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/table": "^3.9.4",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.12.10",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/table/-/table-3.12.10.tgz",
+            "integrity": "sha512-a9Qa/1uuoChRez6GncmYdkDgSS4MDXzV4Cl/BrO44Dnph1ygXiJGmBgAvmtevcbndfuERGHoIYqzklIr6veArg==",
+            "dependencies": {
+                "@react-aria/button": "^3.9.5",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/overlays": "^3.22.1",
+                "@react-aria/table": "^3.14.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-aria/virtualizer": "^3.10.1",
+                "@react-aria/visually-hidden": "^3.8.12",
+                "@react-spectrum/checkbox": "^3.9.6",
+                "@react-spectrum/dnd": "^3.3.10",
+                "@react-spectrum/layout": "^3.6.5",
+                "@react-spectrum/menu": "^3.19.1",
+                "@react-spectrum/progress": "^3.7.7",
+                "@react-spectrum/tooltip": "^3.6.7",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/flags": "^3.0.3",
+                "@react-stately/layout": "^3.13.9",
+                "@react-stately/table": "^3.11.8",
+                "@react-stately/virtualizer": "^3.7.1",
+                "@react-types/grid": "^3.2.6",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/table": "^3.9.5",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5869,24 +6400,24 @@
             }
         },
         "node_modules/@react-spectrum/tabs": {
-            "version": "3.8.9",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/tabs/-/tabs-3.8.9.tgz",
-            "integrity": "sha512-7lgM47iEVNrz6c4XLU6IOivWyh22lmuq0AGCKIel8tJgWM137qEnHkqKmHg9VWAueaKbxW6iWEYuQX6InEeFwA==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/tabs": "^3.9.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/picker": "^3.14.4",
-                "@react-spectrum/text": "^3.5.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/list": "^3.10.4",
-                "@react-stately/tabs": "^3.6.5",
-                "@react-types/select": "^3.9.3",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/tabs": "^3.3.6",
+            "version": "3.8.10",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/tabs/-/tabs-3.8.10.tgz",
+            "integrity": "sha512-LoNkxalAbOjKgbF/x3NU5zhvhUgAEqJvEwzKLVSr+KDQlMAFe9LZ+HOH2NRiWR8ak9BkW3RR6C8cGo7G7fdrfA==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/tabs": "^3.9.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/picker": "^3.14.5",
+                "@react-spectrum/text": "^3.5.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/list": "^3.10.5",
+                "@react-stately/tabs": "^3.6.6",
+                "@react-types/select": "^3.9.4",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/tabs": "^3.3.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5896,24 +6427,24 @@
             }
         },
         "node_modules/@react-spectrum/tag": {
-            "version": "3.2.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/tag/-/tag-3.2.5.tgz",
-            "integrity": "sha512-/DbGrTX0OovTrxYjUM3L+2RXIGJMO0srI5jGd0dA6uzs8t7fA1GUySarpSpttiZqQDyrasNA3+mnG5xVfcRoPw==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/selection": "^3.18.0",
-                "@react-aria/tag": "^3.4.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/button": "^3.16.3",
-                "@react-spectrum/form": "^3.7.5",
-                "@react-spectrum/label": "^3.16.5",
-                "@react-spectrum/text": "^3.5.4",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/list": "^3.10.4",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.2.6",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/tag/-/tag-3.2.6.tgz",
+            "integrity": "sha512-OSGIL2fYLMmiPRCEGvdrQVazS6/S0nhzf/FO52pAAjDZHkd4RDlHHY00Yv/2GPJKroa4e5jdyd5NHCxlW5Vbaw==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/selection": "^3.18.1",
+                "@react-aria/tag": "^3.4.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/button": "^3.16.4",
+                "@react-spectrum/form": "^3.7.6",
+                "@react-spectrum/label": "^3.16.6",
+                "@react-spectrum/text": "^3.5.5",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/list": "^3.10.5",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5923,16 +6454,16 @@
             }
         },
         "node_modules/@react-spectrum/text": {
-            "version": "3.5.4",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/text/-/text-3.5.4.tgz",
-            "integrity": "sha512-VsCsuHxpycvKWUkwZKBIg0Seu3ylaGtgkDDKgw5uyIKENdhz/W9h6FXnKm4O3VgI8snIySnnHGSa00Z4b6hMig==",
-            "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/text": "^3.3.8",
+            "version": "3.5.5",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/text/-/text-3.5.5.tgz",
+            "integrity": "sha512-MSRMUNWjuqjAH0eRjSw0fOCvM7haqgfy3HgwHpB5czpeUtR1p22e+UWA9gHior7S57zrQN1WotpeWZ1AmnzvWg==",
+            "dependencies": {
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/text": "^3.3.9",
                 "@swc/helpers": "^0.5.0",
-                "react-aria-components": "^1.2.0"
+                "react-aria-components": "^1.2.1"
             },
             "peerDependencies": {
                 "@react-spectrum/provider": "^3.0.0",
@@ -5940,21 +6471,21 @@
             }
         },
         "node_modules/@react-spectrum/textfield": {
-            "version": "3.12.0",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/textfield/-/textfield-3.12.0.tgz",
-            "integrity": "sha512-ZupbZ/cyIFMyxb2rCcy+4FQ8lsh/I3AXrsZ9VNE1KjEklR5s8In7cIjFtlfJlk8CX8B5KL69crhyLoe2hUxX5g==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/textfield": "^3.14.4",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/form": "^3.7.5",
-                "@react-spectrum/label": "^3.16.5",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/textfield": "^3.9.2",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.12.1",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/textfield/-/textfield-3.12.1.tgz",
+            "integrity": "sha512-ehvStKrduGo71SfEieodw6NHBDvyE5wYYZh1uLwbde9hjfyOf2q56lfMdSQiBSJ5pDnpS0ToLpoomoPz315u+Q==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/textfield": "^3.14.5",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/form": "^3.7.6",
+                "@react-spectrum/label": "^3.16.6",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/textfield": "^3.9.3",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5963,11 +6494,11 @@
             }
         },
         "node_modules/@react-spectrum/theme-dark": {
-            "version": "3.5.9",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/theme-dark/-/theme-dark-3.5.9.tgz",
-            "integrity": "sha512-9aHHosP1X+qGIgQLXCg4tb/8g+UA5YDhAXSoa7T2fem+V/SZtTv0TqUPZZpyUlMXM0DoDlGmN7BFpG5S7vm6+A==",
+            "version": "3.5.10",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/theme-dark/-/theme-dark-3.5.10.tgz",
+            "integrity": "sha512-xDzuWY9Vtd0X7Ww5fBvhbTq7oM0PiNtKlT+cPVnKm4YmJB5RvVG/m6jYF4/9GN36NAyiRnNRdBCs7SUuKEfTkA==",
             "dependencies": {
-                "@react-types/provider": "^3.8.0",
+                "@react-types/provider": "^3.8.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5975,11 +6506,11 @@
             }
         },
         "node_modules/@react-spectrum/theme-default": {
-            "version": "3.5.9",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/theme-default/-/theme-default-3.5.9.tgz",
-            "integrity": "sha512-+Ebngv8waP3sGsGUFtr1py61T0Iv79YJz6YB2geJbPeFbrtiTxaTxFoJLsaHCRFcgcJFxAu4hrNT+brR/UMt4w==",
+            "version": "3.5.10",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/theme-default/-/theme-default-3.5.10.tgz",
+            "integrity": "sha512-qCGce11d5p0Ce4nSz25vRYoMZycb8oxbgMUM9YXXHgUBDbRRB/s0JNUXxlyikENtaNWiCyeWzVm80bJKmmIijw==",
             "dependencies": {
-                "@react-types/provider": "^3.8.0",
+                "@react-types/provider": "^3.8.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5987,11 +6518,11 @@
             }
         },
         "node_modules/@react-spectrum/theme-light": {
-            "version": "3.4.9",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/theme-light/-/theme-light-3.4.9.tgz",
-            "integrity": "sha512-ZlImejzK+yAEWjxV2hqo8cdqHQc/y+ZOexF30lR6fez6O59nrNC0ETJqBTYEMWqrCHiqJk+2MD+uZf5RNHeyxg==",
+            "version": "3.4.10",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/theme-light/-/theme-light-3.4.10.tgz",
+            "integrity": "sha512-MKHxBlfawja16hBlcBTFD72B+luPwhCG/pTY35WMy+gCVWUeYEwJU8ijOhG7A7a7KkrLpHgebpHojxEXYkmFIA==",
             "dependencies": {
-                "@react-types/provider": "^3.8.0",
+                "@react-types/provider": "^3.8.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -5999,21 +6530,21 @@
             }
         },
         "node_modules/@react-spectrum/tooltip": {
-            "version": "3.6.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/tooltip/-/tooltip-3.6.6.tgz",
-            "integrity": "sha512-xqqu8dNoSHOXrjczH3IzplDy+mB8hZb0/vk0IB61xJr+O8hjfN4jlgBrKqbuzxeZyFLKV5GY7b9D8jkLE/9v3w==",
-            "dependencies": {
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/overlays": "^3.22.0",
-                "@react-aria/tooltip": "^3.7.3",
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/overlays": "^5.6.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-stately/tooltip": "^3.4.8",
-                "@react-types/overlays": "^3.8.6",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/tooltip": "^3.4.8",
-                "@spectrum-icons/ui": "^3.6.6",
+            "version": "3.6.7",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/tooltip/-/tooltip-3.6.7.tgz",
+            "integrity": "sha512-kJDFY7G5MGuKc5e4K24ftYbzFLt9ugO5zbGMAg6Zbz79+ER8jTsbGNVupK3E7m9uSimF/aPRRwf2p8UdoksH6Q==",
+            "dependencies": {
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/overlays": "^3.22.1",
+                "@react-aria/tooltip": "^3.7.4",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/overlays": "^5.6.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-stately/tooltip": "^3.4.9",
+                "@react-types/overlays": "^3.8.7",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/tooltip": "^3.4.9",
+                "@spectrum-icons/ui": "^3.6.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6023,14 +6554,14 @@
             }
         },
         "node_modules/@react-spectrum/utils": {
-            "version": "3.11.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/utils/-/utils-3.11.6.tgz",
-            "integrity": "sha512-CAjPqeP9haHmU60WE3lAWNMSx9B80LT/umNETC7YWkryT1cxMi4nn+jPXhYzozvDrrbGSTjdcuMo203Ywmj+tw==",
-            "dependencies": {
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/ssr": "^3.9.3",
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.11.7",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/utils/-/utils-3.11.7.tgz",
+            "integrity": "sha512-o/9zTvUor0EaRwKZWVlgOcyvH+/JIBsNxuvhDgCP5lD868KoZePmx1L64TejUqK/swwH8jr35gyULpYU2kQXRw==",
+            "dependencies": {
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/ssr": "^3.9.4",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0",
                 "clsx": "^2.0.0"
             },
@@ -6039,14 +6570,14 @@
             }
         },
         "node_modules/@react-spectrum/view": {
-            "version": "3.6.9",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/view/-/view-3.6.9.tgz",
-            "integrity": "sha512-auIXiyfMK+BjqCvGTPb9uENPed26byr4mL8MW89NW2x39jaRejLyLUNKuElIE4PkGCJQA5CHNOmObAHZR/XA8Q==",
+            "version": "3.6.10",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/view/-/view-3.6.10.tgz",
+            "integrity": "sha512-AbvwyORDzntt9XiP9Soc5mCuYsYOJKj+4mwX0ugZZi9I18g1JVeSPnGG/myYdHr2xXNC00pgVILOLA/B0JWMXw==",
             "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/view": "^3.4.8",
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/view": "^3.4.9",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6055,14 +6586,14 @@
             }
         },
         "node_modules/@react-spectrum/well": {
-            "version": "3.4.12",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/well/-/well-3.4.12.tgz",
-            "integrity": "sha512-/3msBtaiKge9K0nAua4K2YFYXZiYHCcnY2dWzlLrov75uQPaRiTyzxXYqRT+OQ62vPHtu1FQ5BsJDecoM8jedw==",
-            "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-spectrum/utils": "^3.11.6",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/well": "^3.3.8",
+            "version": "3.4.13",
+            "resolved": "https://registry.npmjs.org/@react-spectrum/well/-/well-3.4.13.tgz",
+            "integrity": "sha512-zKJsaWnndRvCK4crkZ/Jt5uUk5Jwkx+pRaVu40BEK41aOfavQ44GR90uLogrvDuw2LDZ9mdTj/H7bCVNjkLkgA==",
+            "dependencies": {
+                "@react-aria/utils": "^3.24.1",
+                "@react-spectrum/utils": "^3.11.7",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/well": "^3.3.9",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6116,7 +6647,6 @@
         },
         "node_modules/@react-spring/web": {
             "version": "9.7.3",
-            "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.3.tgz",
             "integrity": "sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==",
             "dependencies": {
                 "@react-spring/animated": "~9.7.3",
@@ -6130,14 +6660,14 @@
             }
         },
         "node_modules/@react-stately/calendar": {
-            "version": "3.5.0",
-            "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.5.0.tgz",
-            "integrity": "sha512-tINxgGAeZ9KsYNomuR50PljG2mN9C9FWQ8zyvATfFq44EFcjjdXCMNWV+qgIRKGKLwrSJhu3boPaiHVIpUxrXA==",
-            "dependencies": {
-                "@internationalized/date": "^3.5.3",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/calendar": "^3.4.5",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.5.1",
+            "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.5.1.tgz",
+            "integrity": "sha512-7l7QhqGUJ5AzWHfvZzbTe3J4t72Ht5BmhW4hlVI7flQXtfrmYkVtl3ZdytEZkkHmWGYZRW9b4IQTQGZxhtlElA==",
+            "dependencies": {
+                "@internationalized/date": "^3.5.4",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/calendar": "^3.4.6",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6145,14 +6675,14 @@
             }
         },
         "node_modules/@react-stately/checkbox": {
-            "version": "3.6.4",
-            "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.4.tgz",
-            "integrity": "sha512-gecaRtWeQNoJuSl3AtfV6z6LjaUV578Kzbag8d3pTPbGXl8komTtTj/26nIEPsmf/L8jZ3kCscDGxGTKr+7sqg==",
+            "version": "3.6.5",
+            "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.5.tgz",
+            "integrity": "sha512-IXV3f9k+LtmfQLE+DKIN41Q5QB/YBLDCB1YVx5PEdRp52S9+EACD5683rjVm8NVRDwjMi2SP6RnFRk7fVb5Azg==",
             "dependencies": {
-                "@react-stately/form": "^3.0.2",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/checkbox": "^3.8.0",
-                "@react-types/shared": "^3.23.0",
+                "@react-stately/form": "^3.0.3",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/checkbox": "^3.8.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6160,11 +6690,11 @@
             }
         },
         "node_modules/@react-stately/collections": {
-            "version": "3.10.6",
-            "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.10.6.tgz",
-            "integrity": "sha512-hb/yzxQnZaSRu43iR6ftkCJIqD4Qu5WUjl4ASBn2EGb9TmipA7bFnYVqSH4xFPCCTZ68Qxh95dOcxYBHlHeWZQ==",
+            "version": "3.10.7",
+            "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.10.7.tgz",
+            "integrity": "sha512-KRo5O2MWVL8n3aiqb+XR3vP6akmHLhLWYZEmPKjIv0ghQaEebBTrN3wiEjtd6dzllv0QqcWvDLM1LntNfJ2TsA==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6172,19 +6702,19 @@
             }
         },
         "node_modules/@react-stately/color": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/@react-stately/color/-/color-3.6.0.tgz",
-            "integrity": "sha512-sjQDjE1zBAnaJaqssP4Ep63Pd32xvLOwcfUmXAOua6s+8CKVlKQqr5BoBiBnqvGGmy7oTlEJd1dkfZA+bvh/zw==",
-            "dependencies": {
-                "@internationalized/number": "^3.5.2",
-                "@internationalized/string": "^3.2.2",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-stately/form": "^3.0.2",
-                "@react-stately/numberfield": "^3.9.2",
-                "@react-stately/slider": "^3.5.3",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/color": "3.0.0-beta.24",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.6.1",
+            "resolved": "https://registry.npmjs.org/@react-stately/color/-/color-3.6.1.tgz",
+            "integrity": "sha512-iW0nAhl3+fUBegHMw5EcAbFVDpgwHBrivfC85pVoTM3pyzp66hqNN6R6xWxW6ETyljS8UOer59+/w4GDVGdPig==",
+            "dependencies": {
+                "@internationalized/number": "^3.5.3",
+                "@internationalized/string": "^3.2.3",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-stately/form": "^3.0.3",
+                "@react-stately/numberfield": "^3.9.3",
+                "@react-stately/slider": "^3.5.4",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/color": "3.0.0-beta.25",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6192,18 +6722,18 @@
             }
         },
         "node_modules/@react-stately/combobox": {
-            "version": "3.8.3",
-            "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.8.3.tgz",
-            "integrity": "sha512-lmwt2M39jHQUA9CWKhTc9MVoUBKuJM1Y+9GYPElON8P/guQL6G3bM1u8I4Hxf0zzGzAIW3ymV57bF9mcaA/nzA==",
-            "dependencies": {
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/form": "^3.0.2",
-                "@react-stately/list": "^3.10.4",
-                "@react-stately/overlays": "^3.6.6",
-                "@react-stately/select": "^3.6.3",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/combobox": "^3.11.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.8.4",
+            "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.8.4.tgz",
+            "integrity": "sha512-iLVGvKRRz0TeJXZhZyK783hveHpYA6xovOSdzSD+WGYpiPXo1QrcrNoH3AE0Z2sHtorU+8nc0j58vh5PB+m2AA==",
+            "dependencies": {
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/form": "^3.0.3",
+                "@react-stately/list": "^3.10.5",
+                "@react-stately/overlays": "^3.6.7",
+                "@react-stately/select": "^3.6.4",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/combobox": "^3.11.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6211,11 +6741,11 @@
             }
         },
         "node_modules/@react-stately/data": {
-            "version": "3.11.3",
-            "resolved": "https://registry.npmjs.org/@react-stately/data/-/data-3.11.3.tgz",
-            "integrity": "sha512-iyg27s3uUquxvX5AXckAgOPszG6uX7fCOIg0D/GJXxdFxLv1gFSupIeIJhM+kXufPgpaLiugaQxoYlO5y65shA==",
+            "version": "3.11.4",
+            "resolved": "https://registry.npmjs.org/@react-stately/data/-/data-3.11.4.tgz",
+            "integrity": "sha512-PbnUQxeE6AznSuEWYnRmrYQ9t5z1Asx98Jtrl96EeA6Iapt9kOjTN9ySqCxtPxMKleb1NIqG3+uHU3veIqmLsg==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6223,17 +6753,17 @@
             }
         },
         "node_modules/@react-stately/datepicker": {
-            "version": "3.9.3",
-            "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.9.3.tgz",
-            "integrity": "sha512-NjZ8uqxmKf7mGLNWSZsvm22xX46k+yo0QkPspONuorHFTf8qqCnp4i+bBpEpaVCwX5KVSRdjxJOk7XhvJF8q4w==",
-            "dependencies": {
-                "@internationalized/date": "^3.5.3",
-                "@internationalized/string": "^3.2.2",
-                "@react-stately/form": "^3.0.2",
-                "@react-stately/overlays": "^3.6.6",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/datepicker": "^3.7.3",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.9.4",
+            "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.9.4.tgz",
+            "integrity": "sha512-yBdX01jn6gq4NIVvHIqdjBUPo+WN8Bujc4OnPw+ZnfA4jI0eIgq04pfZ84cp1LVXW0IB0VaCu1AlQ/kvtZjfGA==",
+            "dependencies": {
+                "@internationalized/date": "^3.5.4",
+                "@internationalized/string": "^3.2.3",
+                "@react-stately/form": "^3.0.3",
+                "@react-stately/overlays": "^3.6.7",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/datepicker": "^3.7.4",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6241,12 +6771,12 @@
             }
         },
         "node_modules/@react-stately/dnd": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/@react-stately/dnd/-/dnd-3.3.0.tgz",
-            "integrity": "sha512-bHH3B4wFqfATpyxpP5Wdv/5uQdci4WvStJgeExj7Yy2UwYSsZEnS6Ky0MhLLFdIyUpragjiSCzYcYwwli6oHUQ==",
+            "version": "3.3.1",
+            "resolved": "https://registry.npmjs.org/@react-stately/dnd/-/dnd-3.3.1.tgz",
+            "integrity": "sha512-I/Ci5xB8hSgAXzoWYWScfMM9UK1MX/eTlARBhiSlfudewweOtNJAI+cXJgU7uiUnGjh4B4v3qDBtlAH1dWDCsw==",
             "dependencies": {
-                "@react-stately/selection": "^3.15.0",
-                "@react-types/shared": "^3.23.0",
+                "@react-stately/selection": "^3.15.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6254,28 +6784,19 @@
             }
         },
         "node_modules/@react-stately/flags": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.0.2.tgz",
-            "integrity": "sha512-/KyVJMND2WdkgoHpt+m+ash7h5q9pq91DLgyizQWcbf2xphicH9D1HKAB8co3Cfvq6T/QqjQEP8aBkheiPyfEg==",
-            "dependencies": {
-                "@swc/helpers": "^0.4.14"
-            }
-        },
-        "node_modules/@react-stately/flags/node_modules/@swc/helpers": {
-            "version": "0.4.36",
-            "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.36.tgz",
-            "integrity": "sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==",
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.0.3.tgz",
+            "integrity": "sha512-/ha7XFA0RZTQsbzSPwu3KkbNMgbvuM0GuMTYLTBWpgBrovBNTM+QqI/PfZTdHg8PwCYF4H5Y8gjdSpdulCvJFw==",
             "dependencies": {
-                "legacy-swc-helpers": "npm:@swc/helpers@=0.4.14",
-                "tslib": "^2.4.0"
+                "@swc/helpers": "^0.5.0"
             }
         },
         "node_modules/@react-stately/form": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.0.2.tgz",
-            "integrity": "sha512-MA4P9lHv770I3DJpJTQlkh5POVuklmeQuixwlbyKzlWT+KqFSOXvqaliszqU7gyDdVGAFksMa6E3mXbGbk1wuA==",
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.0.3.tgz",
+            "integrity": "sha512-92YYBvlHEWUGUpXgIaQ48J50jU9XrxfjYIN8BTvvhBHdD63oWgm8DzQnyT/NIAMzdLnhkg7vP+fjG8LjHeyIAg==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6283,14 +6804,14 @@
             }
         },
         "node_modules/@react-stately/grid": {
-            "version": "3.8.6",
-            "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.8.6.tgz",
-            "integrity": "sha512-XkxDfaIAWzbsb5pnL2IE4FqQbqegVzPnU+R2ZvDrJT7514I2usSMoJ2ZUUoy8DIYQomJHB5QKZeyQkGIelHMcg==",
-            "dependencies": {
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/selection": "^3.15.0",
-                "@react-types/grid": "^3.2.5",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.8.7",
+            "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.8.7.tgz",
+            "integrity": "sha512-he3TXCLAhF5C5z1/G4ySzcwyt7PEiWcVIupxebJQqRyFrNWemSuv+7tolnStmG8maMVIyV3P/3j4eRBbdSlOIg==",
+            "dependencies": {
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/selection": "^3.15.1",
+                "@react-types/grid": "^3.2.6",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6298,16 +6819,16 @@
             }
         },
         "node_modules/@react-stately/layout": {
-            "version": "3.13.8",
-            "resolved": "https://registry.npmjs.org/@react-stately/layout/-/layout-3.13.8.tgz",
-            "integrity": "sha512-WDusSjT8w6vgzgMS7Hwl5zx7rhivMIjFo0a0UqQahgF4kXYPqeEYMOgoczbFqCGgS/vQKOmMy5Rk6fzBb73bdA==",
-            "dependencies": {
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/table": "^3.11.7",
-                "@react-stately/virtualizer": "^3.7.0",
-                "@react-types/grid": "^3.2.5",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/table": "^3.9.4",
+            "version": "3.13.9",
+            "resolved": "https://registry.npmjs.org/@react-stately/layout/-/layout-3.13.9.tgz",
+            "integrity": "sha512-JCj2cnvRbBjah9LFZbBXMdKkoKuEpzn6hvYBw7h0fNIhNGISpiI1TW4ya1X34kD2vcv/3dc31KV/UqmI4hJCQw==",
+            "dependencies": {
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/table": "^3.11.8",
+                "@react-stately/virtualizer": "^3.7.1",
+                "@react-types/grid": "^3.2.6",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/table": "^3.9.5",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6315,14 +6836,14 @@
             }
         },
         "node_modules/@react-stately/list": {
-            "version": "3.10.4",
-            "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.10.4.tgz",
-            "integrity": "sha512-sj501OKcQr+1Zdo0m6NuvpZDHLE0tUdReSKcWqt35odzC6ic/qr7C7ozZ/5ay+nuHTryUUTC/mDQ0zlBmQX0dA==",
-            "dependencies": {
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/selection": "^3.15.0",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.10.5",
+            "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.10.5.tgz",
+            "integrity": "sha512-fV9plO+6QDHiewsYIhboxcDhF17GO95xepC5ki0bKXo44gr14g/LSo/BMmsaMnV+1BuGdBunB05bO4QOIaigXA==",
+            "dependencies": {
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/selection": "^3.15.1",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6330,13 +6851,13 @@
             }
         },
         "node_modules/@react-stately/menu": {
-            "version": "3.7.0",
-            "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.7.0.tgz",
-            "integrity": "sha512-8UJhvKEF+zaHXrwv0YhFr73OSEprzIs6xRNoV6F/omd4twy1ngPZrL1X8HNzaXsf5BrHuib2tbh81e/Z95D3nA==",
+            "version": "3.7.1",
+            "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.7.1.tgz",
+            "integrity": "sha512-mX1w9HHzt+xal1WIT2xGrTQsoLvDwuB2R1Er1MBABs//MsJzccycatcgV/J/28m6tO5M9iuFQQvLV+i1dCtodg==",
             "dependencies": {
-                "@react-stately/overlays": "^3.6.6",
-                "@react-types/menu": "^3.9.8",
-                "@react-types/shared": "^3.23.0",
+                "@react-stately/overlays": "^3.6.7",
+                "@react-types/menu": "^3.9.9",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6344,14 +6865,14 @@
             }
         },
         "node_modules/@react-stately/numberfield": {
-            "version": "3.9.2",
-            "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.9.2.tgz",
-            "integrity": "sha512-Sp+0MnqaqZ/Tu8qalZXbMIXyvZ7aXIny2PxNIxmnqxVHfxIzQCLJW5Y4bJr1yJIHH3QDZic5OyqS72MBWBXnIA==",
-            "dependencies": {
-                "@internationalized/number": "^3.5.2",
-                "@react-stately/form": "^3.0.2",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/numberfield": "^3.8.2",
+            "version": "3.9.3",
+            "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.9.3.tgz",
+            "integrity": "sha512-UlPTLSabhLEuHtgzM0PgfhtEaHy3yttbzcRb8yHNvGo4KbCHeHpTHd3QghKfTFm024Mug7+mVlWCmMtW0f5ttg==",
+            "dependencies": {
+                "@internationalized/number": "^3.5.3",
+                "@react-stately/form": "^3.0.3",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/numberfield": "^3.8.3",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6359,12 +6880,12 @@
             }
         },
         "node_modules/@react-stately/overlays": {
-            "version": "3.6.6",
-            "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.6.tgz",
-            "integrity": "sha512-NvzQXh4zYGZuUmZH5d3NmEDNr8r1hfub2s5w7WOeIG35xqIzoKGdFZ7LLWrie+4nxPmM+ckdfqOQ9pBZFNJypQ==",
+            "version": "3.6.7",
+            "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.7.tgz",
+            "integrity": "sha512-6zp8v/iNUm6YQap0loaFx6PlvN8C0DgWHNlrlzMtMmNuvjhjR0wYXVaTfNoUZBWj25tlDM81ukXOjpRXg9rLrw==",
             "dependencies": {
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/overlays": "^3.8.6",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/overlays": "^3.8.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6372,14 +6893,14 @@
             }
         },
         "node_modules/@react-stately/radio": {
-            "version": "3.10.3",
-            "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.3.tgz",
-            "integrity": "sha512-EWLLRgLQ9orI7G9uPuJv1bdZPu3OoRWy1TGSn+6G8b8rleNx3haI4eZUR+JGB0YNgemotMz/gbNTNG/wEIsRgw==",
-            "dependencies": {
-                "@react-stately/form": "^3.0.2",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/radio": "^3.8.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.10.4",
+            "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.4.tgz",
+            "integrity": "sha512-kCIc7tAl4L7Hu4Wt9l2jaa+MzYmAJm0qmC8G8yPMbExpWbLRu6J8Un80GZu+JxvzgDlqDyrVvyv9zFifwH/NkQ==",
+            "dependencies": {
+                "@react-stately/form": "^3.0.3",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/radio": "^3.8.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6387,12 +6908,12 @@
             }
         },
         "node_modules/@react-stately/searchfield": {
-            "version": "3.5.2",
-            "resolved": "https://registry.npmjs.org/@react-stately/searchfield/-/searchfield-3.5.2.tgz",
-            "integrity": "sha512-M73mhUCbY5aJAtVH8BF9TeBwOtEMC7G1N/W6j71V8f3MlN0ppN0n4pZWW3CMd2x0BKuYum8KPvcL1DgiXzoo5A==",
+            "version": "3.5.3",
+            "resolved": "https://registry.npmjs.org/@react-stately/searchfield/-/searchfield-3.5.3.tgz",
+            "integrity": "sha512-H0OvlgwPIFdc471ypw79MDjz3WXaVq9+THaY6JM4DIohEJNN5Dwei7O9g6r6m/GqPXJIn5TT3b74kJ2Osc00YQ==",
             "dependencies": {
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/searchfield": "^3.5.4",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/searchfield": "^3.5.5",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6400,15 +6921,15 @@
             }
         },
         "node_modules/@react-stately/select": {
-            "version": "3.6.3",
-            "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.6.3.tgz",
-            "integrity": "sha512-d/ha6j0oiEaw/F5hgPgCZg1e8LObNmvsocEebxXPToVdwHd9H55r2Fogi5nLoiX8geHKiYm0KPfSxs/oXbW/5Q==",
-            "dependencies": {
-                "@react-stately/form": "^3.0.2",
-                "@react-stately/list": "^3.10.4",
-                "@react-stately/overlays": "^3.6.6",
-                "@react-types/select": "^3.9.3",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.6.4",
+            "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.6.4.tgz",
+            "integrity": "sha512-whZgF1N53D0/dS8tOFdrswB0alsk5Q5620HC3z+5f2Hpi8gwgAZ8TYa+2IcmMYRiT+bxVuvEc/NirU9yPmqGbA==",
+            "dependencies": {
+                "@react-stately/form": "^3.0.3",
+                "@react-stately/list": "^3.10.5",
+                "@react-stately/overlays": "^3.6.7",
+                "@react-types/select": "^3.9.4",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6416,13 +6937,13 @@
             }
         },
         "node_modules/@react-stately/selection": {
-            "version": "3.15.0",
-            "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.15.0.tgz",
-            "integrity": "sha512-OtypXNtvRWLmpkaktluzCYEXKXAON16WIJv2mZ4cae3H0UVfWaFL9sD+ST9nj7UqYNTDXECug5ziIY+YKd7zvA==",
+            "version": "3.15.1",
+            "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.15.1.tgz",
+            "integrity": "sha512-6TQnN9L0UY9w19B7xzb1P6mbUVBtW840Cw1SjgNXCB3NPaCf59SwqClYzoj8O2ZFzMe8F/nUJtfU1NS65/OLlw==",
             "dependencies": {
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/shared": "^3.23.0",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6430,13 +6951,13 @@
             }
         },
         "node_modules/@react-stately/slider": {
-            "version": "3.5.3",
-            "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.5.3.tgz",
-            "integrity": "sha512-jA0XR7GjtwoucLw8kx/KB50pSGNUbR7xNfM9t5H8D7k3wd+j4yqfarWyNFyPX/X5MJez+/bd+BIDJUl3XGOWkA==",
+            "version": "3.5.4",
+            "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.5.4.tgz",
+            "integrity": "sha512-Jsf7K17dr93lkNKL9ij8HUcoM1sPbq8TvmibD6DhrK9If2lje+OOL8y4n4qreUnfMT56HCAeS9wCO3fg3eMyrw==",
             "dependencies": {
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/slider": "^3.7.2",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/slider": "^3.7.3",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6444,18 +6965,18 @@
             }
         },
         "node_modules/@react-stately/table": {
-            "version": "3.11.7",
-            "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.11.7.tgz",
-            "integrity": "sha512-VvazamtoXLENeWJAYF1fJzfIAXO2qbiXCfosRLgkEMtoU2kGqV8DHYQhIXuqwMRn8nO8GVw9hgAiQQcKghgCXA==",
-            "dependencies": {
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/flags": "^3.0.2",
-                "@react-stately/grid": "^3.8.6",
-                "@react-stately/selection": "^3.15.0",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/grid": "^3.2.5",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/table": "^3.9.4",
+            "version": "3.11.8",
+            "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.11.8.tgz",
+            "integrity": "sha512-EdyRW3lT1/kAVDp5FkEIi1BQ7tvmD2YgniGdLuW/l9LADo0T+oxZqruv60qpUS6sQap+59Riaxl91ClDxrJnpg==",
+            "dependencies": {
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/flags": "^3.0.3",
+                "@react-stately/grid": "^3.8.7",
+                "@react-stately/selection": "^3.15.1",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/grid": "^3.2.6",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/table": "^3.9.5",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6463,13 +6984,13 @@
             }
         },
         "node_modules/@react-stately/tabs": {
-            "version": "3.6.5",
-            "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.6.5.tgz",
-            "integrity": "sha512-z1saZgGRqb0AsoRi19iE4JOJaIRV73GjRnzUX9QSl3gpK75XsH31vbmtUYiXOXAd6Dt+1KFLgbyeCzMUlZEnMw==",
+            "version": "3.6.6",
+            "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.6.6.tgz",
+            "integrity": "sha512-sOLxorH2uqjAA+v1ppkMCc2YyjgqvSGeBDgtR/lyPSDd4CVMoTExszROX2dqG0c8il9RQvzFuufUtQWMY6PgSA==",
             "dependencies": {
-                "@react-stately/list": "^3.10.4",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/tabs": "^3.3.6",
+                "@react-stately/list": "^3.10.5",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/tabs": "^3.3.7",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6477,12 +6998,12 @@
             }
         },
         "node_modules/@react-stately/toggle": {
-            "version": "3.7.3",
-            "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.7.3.tgz",
-            "integrity": "sha512-4jW6wxTu7Gkq6/2mZWqtJoQ6ff27Cl6lnVMEXXM+M8HwK/3zHoMZhVz8EApwgOsRByxDQ76PNSGm3xKZAcqZNw==",
+            "version": "3.7.4",
+            "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.7.4.tgz",
+            "integrity": "sha512-CoYFe9WrhLkDP4HGDpJYQKwfiYCRBAeoBQHv+JWl5eyK61S8xSwoHsveYuEZ3bowx71zyCnNAqWRrmNOxJ4CKA==",
             "dependencies": {
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/checkbox": "^3.8.0",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/checkbox": "^3.8.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6490,12 +7011,12 @@
             }
         },
         "node_modules/@react-stately/tooltip": {
-            "version": "3.4.8",
-            "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.4.8.tgz",
-            "integrity": "sha512-0D3cCeQhX5DjDpeuzFJwfX8SxIOxdL2iWPPjpC3hIxkUKuItavSq2A7G2tO39vpiip3RBOaaQMUpnSmjRK5DAQ==",
+            "version": "3.4.9",
+            "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.4.9.tgz",
+            "integrity": "sha512-P7CDJsdoKarz32qFwf3VNS01lyC+63gXpDZG31pUu+EO5BeQd4WKN/AH1Beuswpr4GWzxzFc1aXQgERFGVzraA==",
             "dependencies": {
-                "@react-stately/overlays": "^3.6.6",
-                "@react-types/tooltip": "^3.4.8",
+                "@react-stately/overlays": "^3.6.7",
+                "@react-types/tooltip": "^3.4.9",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6503,14 +7024,14 @@
             }
         },
         "node_modules/@react-stately/tree": {
-            "version": "3.8.0",
-            "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.8.0.tgz",
-            "integrity": "sha512-7bfbCLjG8BTiWuo9GBE1A375PPI4S9r/rMtKQGLQvYAObgJb7C8P3svA9WKfryvl7M5iqaYrOVA0uzNSmeCNQQ==",
-            "dependencies": {
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/selection": "^3.15.0",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/shared": "^3.23.0",
+            "version": "3.8.1",
+            "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.8.1.tgz",
+            "integrity": "sha512-LOdkkruJWch3W89h4B/bXhfr0t0t1aRfEp+IMrrwdRAl23NaPqwl5ILHs4Xu5XDHqqhg8co73pHrJwUyiTWEjw==",
+            "dependencies": {
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/selection": "^3.15.1",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6518,9 +7039,9 @@
             }
         },
         "node_modules/@react-stately/utils": {
-            "version": "3.10.0",
-            "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.0.tgz",
-            "integrity": "sha512-nji2i9fTYg65ZWx/3r11zR1F2tGya+mBubRCbMTwHyRnsSLFZaeq/W6lmrOyIy1uMJKBNKLJpqfmpT4x7rw6pg==",
+            "version": "3.10.1",
+            "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.1.tgz",
+            "integrity": "sha512-VS/EHRyicef25zDZcM/ClpzYMC5i2YGN6uegOeQawmgfGjb02yaCX0F0zR69Pod9m2Hr3wunTbtpgVXvYbZItg==",
             "dependencies": {
                 "@swc/helpers": "^0.5.0"
             },
@@ -6529,12 +7050,12 @@
             }
         },
         "node_modules/@react-stately/virtualizer": {
-            "version": "3.7.0",
-            "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.7.0.tgz",
-            "integrity": "sha512-Wkh502y6mzUvjJJr30p5FLRwBaphnfmnoSnGwidamwo3HuyrDICBSlwFGPl0AmUHo1afSaLXl6j8smU48VcClA==",
+            "version": "3.7.1",
+            "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.7.1.tgz",
+            "integrity": "sha512-voHgE6EQ+oZaLv6u2umKxakvIKNkCQuUihqKACTjdslp7SJh4Mvs3oLBI0hf0JOh+rCcFIKDvQtFwy1fXFRYBA==",
             "dependencies": {
-                "@react-aria/utils": "^3.24.0",
-                "@react-types/shared": "^3.23.0",
+                "@react-aria/utils": "^3.24.1",
+                "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -6542,482 +7063,482 @@
             }
         },
         "node_modules/@react-types/actionbar": {
-            "version": "3.1.6",
-            "resolved": "https://registry.npmjs.org/@react-types/actionbar/-/actionbar-3.1.6.tgz",
-            "integrity": "sha512-P2yp2eM/x7Vjc/wFu+DGsKLTfIYIlUSKGN4Ao+xk6v0fleOHkcHOep1Y3fwOtc1WGHk7HSeoxScFiw5d3e73eg==",
+            "version": "3.1.7",
+            "resolved": "https://registry.npmjs.org/@react-types/actionbar/-/actionbar-3.1.7.tgz",
+            "integrity": "sha512-yohxM+R9o/HGADL7NdTH9tC9BnWrVYKsutobjWzVQZHGoaHEqBbz03dk3m9UvFMnw7g6kjtGxhOJQpztz7nk3Q==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/actiongroup": {
-            "version": "3.4.8",
-            "resolved": "https://registry.npmjs.org/@react-types/actiongroup/-/actiongroup-3.4.8.tgz",
-            "integrity": "sha512-IT3eSs1Lu9jN+EeoJL70f4VOXLeK5JlhtWjioPKz6JCmr/coUSHtFTLEgfUSzvCo98XJa4w8oC49ds7CkZBUGg==",
+            "version": "3.4.9",
+            "resolved": "https://registry.npmjs.org/@react-types/actiongroup/-/actiongroup-3.4.9.tgz",
+            "integrity": "sha512-n6lGBLm8HxLguG4om5ysMCexSdMWNhM5L0yGjA4pZxdoKZborPALDN/Ao57svnTwaSJmeExvTwHIFds1yr4AXQ==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/avatar": {
-            "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/@react-types/avatar/-/avatar-3.0.6.tgz",
-            "integrity": "sha512-hDCbtP0zU4H50psNiyhmyboT5UkwEK9EY0lxqKuBkF62kfP57d5dyS6TeD3XkdPbeCEOR06ttGjFQDwjFPrdvg==",
+            "version": "3.0.7",
+            "resolved": "https://registry.npmjs.org/@react-types/avatar/-/avatar-3.0.7.tgz",
+            "integrity": "sha512-FXws1/o0Vy3yJcBDdKYPElNzpcVjdkck6KHGQyxAkKe7vvtFUcHpzz9fxEO5kRLwTv6j7EahXsJeqsH9TpFWuA==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/badge": {
-            "version": "3.1.8",
-            "resolved": "https://registry.npmjs.org/@react-types/badge/-/badge-3.1.8.tgz",
-            "integrity": "sha512-rL/Qa3GpxYn6cFiI+oLWVuNQ45qOufCRejimWNMws+ieY4+lvxNEvZfbOPTEOT+2sdQG4i9QpV2eHuFL1mVK9w==",
+            "version": "3.1.9",
+            "resolved": "https://registry.npmjs.org/@react-types/badge/-/badge-3.1.9.tgz",
+            "integrity": "sha512-GNvg3cULRiUxXZYmOOIaua0KSL72jnLwv/2LLbQeYQystLaEmsibmdoRvfQN80mEQ1f3WFfhZogiG31+4MS/xg==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/breadcrumbs": {
-            "version": "3.7.4",
-            "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.4.tgz",
-            "integrity": "sha512-gQPLi71i+4zE6m5S74v7bpZ/yBERtlUt5qBcvB4C7gJu8aR4cFrv1YFZ//9f8uwlAHjau7XBpVlbBDlhfb2aOQ==",
+            "version": "3.7.5",
+            "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.5.tgz",
+            "integrity": "sha512-lV9IDYsMiu2TgdMIjEmsOE0YWwjb3jhUNK1DCZZfq6uWuiHLgyx2EncazJBUWSjHJ4ta32j7xTuXch+8Ai6u/A==",
             "dependencies": {
-                "@react-types/link": "^3.5.4",
-                "@react-types/shared": "^3.23.0"
+                "@react-types/link": "^3.5.5",
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/button": {
-            "version": "3.9.3",
-            "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.9.3.tgz",
-            "integrity": "sha512-YHlSeH85FhasJXOmkY4x+6If74ZpUh88C2fMlw0HUA/Bq/KGckUoriV8cnMqSnB1OwPqi8dpBZGfFVj6f6lh9A==",
+            "version": "3.9.4",
+            "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.9.4.tgz",
+            "integrity": "sha512-raeQBJUxBp0axNF74TXB8/H50GY8Q3eV6cEKMbZFP1+Dzr09Ngv0tJBeW0ewAxAguNH5DRoMUAUGIXtSXskVdA==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/buttongroup": {
-            "version": "3.3.8",
-            "resolved": "https://registry.npmjs.org/@react-types/buttongroup/-/buttongroup-3.3.8.tgz",
-            "integrity": "sha512-BlpLX8Qd2hlN9zWFqDEb3STR6gJF3ukDiLg/JjqTgWLPg7BK1t2MIk2zVr+Y2Wq5+jIq281+BvLP5NhYIcWJhA==",
+            "version": "3.3.9",
+            "resolved": "https://registry.npmjs.org/@react-types/buttongroup/-/buttongroup-3.3.9.tgz",
+            "integrity": "sha512-3hEWI/GOsY8Z3db8gjEXbxl+6E0ioBNMxfN8jIeiNnSWSDG56MLNArJLowylPrwlrp5SnxLh1WBj44OHqEE3Tg==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/calendar": {
-            "version": "3.4.5",
-            "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.5.tgz",
-            "integrity": "sha512-FAAUbqe8iPiNf/OtdxnpOuAEJzyeRgfK2QCzfb4BIVnNNaTDkbxGCI5wrqHfBQ4FASECJeNlkjYXtbvijaooyw==",
+            "version": "3.4.6",
+            "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.6.tgz",
+            "integrity": "sha512-WSntZPwtvsIYWvBQRAPvuCn55UTJBZroTvX0vQvWykJRQnPAI20G1hMQ3dNsnAL+gLZUYxBXn66vphmjUuSYew==",
             "dependencies": {
-                "@internationalized/date": "^3.5.3",
-                "@react-types/shared": "^3.23.0"
+                "@internationalized/date": "^3.5.4",
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/checkbox": {
-            "version": "3.8.0",
-            "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.8.0.tgz",
-            "integrity": "sha512-IBJ2bAsb3xoXaL+f0pwfRLDvRkhxfcX/q4NRJ2oT9jeHLU+j6svgK1Dqk8IGmY+vw1ltKbbMlIVeVonKQ3fgHw==",
+            "version": "3.8.1",
+            "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.8.1.tgz",
+            "integrity": "sha512-5/oVByPw4MbR/8QSdHCaalmyWC71H/QGgd4aduTJSaNi825o+v/hsN2/CH7Fq9atkLKsC8fvKD00Bj2VGaKriQ==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/color": {
-            "version": "3.0.0-beta.24",
-            "resolved": "https://registry.npmjs.org/@react-types/color/-/color-3.0.0-beta.24.tgz",
-            "integrity": "sha512-YSb/9ERmFp7JxC+vjhqpcYI8HUt92SSv6aDEB+e//4RzBnCxvy+YQAGei9tI6PYIgzGgMLwEMkgpgH/7UcFblA==",
+            "version": "3.0.0-beta.25",
+            "resolved": "https://registry.npmjs.org/@react-types/color/-/color-3.0.0-beta.25.tgz",
+            "integrity": "sha512-D24ASvLeSWouBwOBi4ftUe4/BhrZj5AiHV7tXwrVeMGOy9Z9jyeK65Xysq+R3ecaSONLXsgai5CQMvj13cOacA==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0",
-                "@react-types/slider": "^3.7.2"
+                "@react-types/shared": "^3.23.1",
+                "@react-types/slider": "^3.7.3"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/combobox": {
-            "version": "3.11.0",
-            "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.11.0.tgz",
-            "integrity": "sha512-L6EEcIUIk7lsVvhO1Z1bklgH5bM84fBht03TC+es9YvS2T1Z9hdtyjBFcH6b3lVW9RwAArdUTL82/RNtvgD0Eg==",
+            "version": "3.11.1",
+            "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.11.1.tgz",
+            "integrity": "sha512-UNc3OHt5cUt5gCTHqhQIqhaWwKCpaNciD8R7eQazmHiA9fq8ROlV+7l3gdNgdhJbTf5Bu/V5ISnN7Y1xwL3zqQ==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/contextualhelp": {
-            "version": "3.2.9",
-            "resolved": "https://registry.npmjs.org/@react-types/contextualhelp/-/contextualhelp-3.2.9.tgz",
-            "integrity": "sha512-/YN8e1ujYSY99dnF2x/+vDErx/LcuXJmoKhvQL0wWrQAOIiGCP4j/ifVLWSt6sKhLdkPPbCNHxAd6Jq2SbC8ng==",
+            "version": "3.2.10",
+            "resolved": "https://registry.npmjs.org/@react-types/contextualhelp/-/contextualhelp-3.2.10.tgz",
+            "integrity": "sha512-x4rODNQfAO2YeVumkztTsUieOt4z7OXolZY7BLJgT1qonfPwJGLqf+KUayqXuX9l2CHakcGYDGaUxTUvwINQdw==",
             "dependencies": {
-                "@react-types/overlays": "^3.8.6",
-                "@react-types/shared": "^3.23.0"
+                "@react-types/overlays": "^3.8.7",
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/datepicker": {
-            "version": "3.7.3",
-            "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.7.3.tgz",
-            "integrity": "sha512-SpA91itY03QaBvTAGP4X62SEAOoKJr91Av/U5DgH8gP7Ev4Ui+I3Aqh+w8Qw6nxKX4aAvDUx6wEHwLQLbvJUPA==",
+            "version": "3.7.4",
+            "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.7.4.tgz",
+            "integrity": "sha512-ZfvgscvNzBJpYyVWg3nstJtA/VlWLwErwSkd1ivZYam859N30w8yH+4qoYLa6FzWLCFlrsRHyvtxlEM7lUAt5A==",
             "dependencies": {
-                "@internationalized/date": "^3.5.3",
-                "@react-types/calendar": "^3.4.5",
-                "@react-types/overlays": "^3.8.6",
-                "@react-types/shared": "^3.23.0"
+                "@internationalized/date": "^3.5.4",
+                "@react-types/calendar": "^3.4.6",
+                "@react-types/overlays": "^3.8.7",
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/dialog": {
-            "version": "3.5.9",
-            "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.9.tgz",
-            "integrity": "sha512-8r9P1b1gq/cUv2bTPPNL3IFVEj9R5sIPACoSXznXkpXxh5FLU6yUPHDeQjvmM50q7KlEOgrPYhGl5pW525kLww==",
+            "version": "3.5.10",
+            "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.10.tgz",
+            "integrity": "sha512-S9ga+edOLNLZw7/zVOnZdT5T40etpzUYBXEKdFPbxyPYnERvRxJAsC1/ASuBU9fQAXMRgLZzADWV+wJoGS/X9g==",
             "dependencies": {
-                "@react-types/overlays": "^3.8.6",
-                "@react-types/shared": "^3.23.0"
+                "@react-types/overlays": "^3.8.7",
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/divider": {
-            "version": "3.3.8",
-            "resolved": "https://registry.npmjs.org/@react-types/divider/-/divider-3.3.8.tgz",
-            "integrity": "sha512-klWNt9vaSwNnIZo0D44Flk4oGWsHXdgpUwdCU94VPeJEm9DY20areIOuSPQXRcEazinEPGo+C+d6Ytxzy2pyfA==",
+            "version": "3.3.9",
+            "resolved": "https://registry.npmjs.org/@react-types/divider/-/divider-3.3.9.tgz",
+            "integrity": "sha512-SQ3XWS16j3VZg3MGByJ1CjWDfARn+viBDay6SibAFzMqlqVbSol2nw1hQ1JPaT3zeW8C/354q+OhBsIFDOaE7w==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/form": {
-            "version": "3.7.3",
-            "resolved": "https://registry.npmjs.org/@react-types/form/-/form-3.7.3.tgz",
-            "integrity": "sha512-RwVxgbuKuByIXTF9HnvIhc/KijzT10R8rnI2Hr/51nTH+QDkunmLtmzW279m4YJRT3Dlj94DRy/7SS/WNCT2FA==",
+            "version": "3.7.4",
+            "resolved": "https://registry.npmjs.org/@react-types/form/-/form-3.7.4.tgz",
+            "integrity": "sha512-HZojAWrb6feYnhDEOy3vBamDVAHDl0l2JQZ7aIDLHmeTAGQC3JNZcm2fLTxqLye46zz8w8l8OHgI+NdD4PHdOw==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/grid": {
-            "version": "3.2.5",
-            "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.5.tgz",
-            "integrity": "sha512-kvE3Y+i0/RGLrf8qn/uVK1nVxXygNf5Jm6h9S6UdZkEVsclcqHKIX8UzqQgEUTd99jMHZk7fbKPm/La8uJ9yFQ==",
+            "version": "3.2.6",
+            "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.6.tgz",
+            "integrity": "sha512-XfHenL2jEBUYrhKiPdeM24mbLRXUn79wVzzMhrNYh24nBwhsPPpxF+gjFddT3Cy8dt6tRInfT6pMEu9nsXwaHw==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/illustratedmessage": {
-            "version": "3.3.8",
-            "resolved": "https://registry.npmjs.org/@react-types/illustratedmessage/-/illustratedmessage-3.3.8.tgz",
-            "integrity": "sha512-AIQdkfMYPvhUp2rko5E/UXaKz+9cfsZAHpk0ff+7x3mYWxUTCDXk8LVN/f8avZVzfa4w1UyOtzzNo/BssdLpuA==",
+            "version": "3.3.9",
+            "resolved": "https://registry.npmjs.org/@react-types/illustratedmessage/-/illustratedmessage-3.3.9.tgz",
+            "integrity": "sha512-a/X+sGzUA+pkLkKDZzy/QpUtOY6qtFpsPs6lfY37TLwCEQmS8a1VKrc1ItlQVRgIvwuqJXKvrJpGOAw+RjVwHw==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/image": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/@react-types/image/-/image-3.4.0.tgz",
-            "integrity": "sha512-0zwHdfnbW5DjBaQ7s+SAiLJr0vPm+rzGEJUb+iXbgarPYYIHQpaJ/bPgvUU8BY1T95SQczB+AYownDJ+XESdsg==",
+            "version": "3.4.1",
+            "resolved": "https://registry.npmjs.org/@react-types/image/-/image-3.4.1.tgz",
+            "integrity": "sha512-6vA3vEzjXrr701i1J43DkyPziRN7jfKSdarGDP+61dOcvbiLnuTY9t+r/zXo1SdewbjF5RVliB2ys9Bb654YTg==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/label": {
-            "version": "3.9.2",
-            "resolved": "https://registry.npmjs.org/@react-types/label/-/label-3.9.2.tgz",
-            "integrity": "sha512-N7Sj4M9LHcMOTrq7DW4KcVl2DgcBIADTY6Ni50g5tN6o+TjVj3KDkX3ivsCNUHu/AJnJ8q7E+J74R4pDnQOAoQ==",
+            "version": "3.9.3",
+            "resolved": "https://registry.npmjs.org/@react-types/label/-/label-3.9.3.tgz",
+            "integrity": "sha512-PGVg/pBYNx3Ft59VNCvG5oqk4pXfS2Gs7t3TGnlBB1d+EXB9BbixJbOAO1PvRqt8SPCNvEAAAVfG6Vf+nOhSWw==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/layout": {
-            "version": "3.3.14",
-            "resolved": "https://registry.npmjs.org/@react-types/layout/-/layout-3.3.14.tgz",
-            "integrity": "sha512-PUxGdXXvRt8dQ5MOnxh8UkZjO3c89eWceLv4gtBizZKv+LRYfHof/eYH+9FtQkxGziWUJ6G7bzFt93Q9ydqH5Q==",
+            "version": "3.3.15",
+            "resolved": "https://registry.npmjs.org/@react-types/layout/-/layout-3.3.15.tgz",
+            "integrity": "sha512-Rj3M0TWmsag83gvFDY6UnfUkNPrA/FLuJ0kEiOryjjffoI0wTxmTAPpIgG4h7YSxpQJD6g6xQ8bkIWEMCXWyag==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/link": {
-            "version": "3.5.4",
-            "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.5.4.tgz",
-            "integrity": "sha512-5hVAlKE4wiEVHmkqQG9/G4sdar257CISmLzWh9xf8heq14a93MBIHm7S9mhHULk2a84EC9bNoTi8Hh6P6nnMEw==",
+            "version": "3.5.5",
+            "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.5.5.tgz",
+            "integrity": "sha512-G6P5WagHDR87npN7sEuC5IIgL1GsoY4WFWKO4734i2CXRYx24G9P0Su3AX4GA3qpspz8sK1AWkaCzBMmvnunfw==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/listbox": {
-            "version": "3.4.8",
-            "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.4.8.tgz",
-            "integrity": "sha512-HNLBvyhR02p8GaZsW8hAu4YwkDjaG/rcuCT/l4Sdxzsm7szPlFMEVBZ9Ji3Ffzj+9P20OgFJ+VylWs7EkUwJAA==",
+            "version": "3.4.9",
+            "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.4.9.tgz",
+            "integrity": "sha512-S5G+WmNKUIOPZxZ4svWwWQupP3C6LmVfnf8QQmPDvwYXGzVc0WovkqUWyhhjJirFDswTXRCO9p0yaTHHIlkdwQ==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/menu": {
-            "version": "3.9.8",
-            "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.8.tgz",
-            "integrity": "sha512-nkRCsfD3NXsJOv6mAnXCFyH2eGOFsmOOJOBQeOl9dj7BcdX9dcqp2PzUWPl33GrY9rYcXiRx4wsbUoqO1KVU4g==",
+            "version": "3.9.9",
+            "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.9.tgz",
+            "integrity": "sha512-FamUaPVs1Fxr4KOMI0YcR2rYZHoN7ypGtgiEiJ11v/tEPjPPGgeKDxii0McCrdOkjheatLN1yd2jmMwYj6hTDg==",
             "dependencies": {
-                "@react-types/overlays": "^3.8.6",
-                "@react-types/shared": "^3.23.0"
+                "@react-types/overlays": "^3.8.7",
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/meter": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/@react-types/meter/-/meter-3.4.0.tgz",
-            "integrity": "sha512-1czayiwMcg3QxRxQQSm9hvPbzPk1lyNmP68mDsWdVuY7fUTsUvItF05IkeJCkEB8tIqfBKnJHYAJN1XLY+5bfg==",
+            "version": "3.4.1",
+            "resolved": "https://registry.npmjs.org/@react-types/meter/-/meter-3.4.1.tgz",
+            "integrity": "sha512-AIJV4NDFAqKH94s02c5Da4TH2qgJjfrw978zuFM0KUBFD85WRPKh7MvgWpomvUgmzqE6lMCzIdi1KPKqrRabdw==",
             "dependencies": {
-                "@react-types/progress": "^3.5.3"
+                "@react-types/progress": "^3.5.4"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/numberfield": {
-            "version": "3.8.2",
-            "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.8.2.tgz",
-            "integrity": "sha512-2i7Je7fEYA4ousL9WhKZg+6Hejwgiq1AmoJpan6JfeIMQkvQ92q+klq02cih/lLXY/jvjd/KI3fa1fl3dfnaFw==",
+            "version": "3.8.3",
+            "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.8.3.tgz",
+            "integrity": "sha512-z5fGfVj3oh5bmkw9zDvClA1nDBSFL9affOuyk2qZ/M2SRUmykDAPCksbfcMndft0XULWKbF4s2CYbVI+E/yrUA==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/overlays": {
-            "version": "3.8.6",
-            "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.6.tgz",
-            "integrity": "sha512-7xBuroYqwADppt7IRGfM8lbxVwlZrhMtTzeIdUot595cqFdRlpd/XAo2sRnEeIjYW9OSI8I5v4kt3AG7bdCQlg==",
+            "version": "3.8.7",
+            "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.7.tgz",
+            "integrity": "sha512-zCOYvI4at2DkhVpviIClJ7bRrLXYhSg3Z3v9xymuPH3mkiuuP/dm8mUCtkyY4UhVeUTHmrQh1bzaOP00A+SSQA==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/progress": {
-            "version": "3.5.3",
-            "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.3.tgz",
-            "integrity": "sha512-IcICNYRPFHQxl6iXi5jDgSZ3I9k2UQ2rIFcnoGo43K0hekv6fRdbbXWJU9ndShs3OfCHTPHEV5ooYB3UujNOAQ==",
+            "version": "3.5.4",
+            "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.4.tgz",
+            "integrity": "sha512-JNc246sTjasPyx5Dp7/s0rp3Bz4qlu4LrZTulZlxWyb53WgBNL7axc26CCi+I20rWL9+c7JjhrRxnLl/1cLN5g==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/provider": {
-            "version": "3.8.0",
-            "resolved": "https://registry.npmjs.org/@react-types/provider/-/provider-3.8.0.tgz",
-            "integrity": "sha512-7iexxkfJtYBvpiv+fpuh7s62uQ5nzFbVNvgOHU1sBgXiyVGoA6QfTsybf6uQJ/S7yUgqoO5CrVqHKFa4MUxYIg==",
+            "version": "3.8.1",
+            "resolved": "https://registry.npmjs.org/@react-types/provider/-/provider-3.8.1.tgz",
+            "integrity": "sha512-Sm59ufxdHh6fGfeUbviNQhRvtI0FMEX1gn9Okc8nL7iTVbAAitT746x0itM+xwhFLDI6gSY8FILDWc5/kIxzxA==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/radio": {
-            "version": "3.8.0",
-            "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.8.0.tgz",
-            "integrity": "sha512-0gvG74lgiaRo0DO46hoB5NxGFXhq5DsHaPZcCcb9VZ8cCzZMrO7U/B3JhF82TI2DndSx/AoiAMOQsc0v4ZwiGg==",
+            "version": "3.8.1",
+            "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.8.1.tgz",
+            "integrity": "sha512-bK0gio/qj1+0Ldu/3k/s9BaOZvnnRgvFtL3u5ky479+aLG5qf1CmYed3SKz8ErZ70JkpuCSrSwSCFf0t1IHovw==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/searchfield": {
-            "version": "3.5.4",
-            "resolved": "https://registry.npmjs.org/@react-types/searchfield/-/searchfield-3.5.4.tgz",
-            "integrity": "sha512-D7tUwlbUxyTzxhMYWNMdY9lp/a/kdr9mIGB7K3j/QSQhTI2T9H3VPxEKXmYt33cE3T7Q1DDsII1SrChI/KEdxA==",
+            "version": "3.5.5",
+            "resolved": "https://registry.npmjs.org/@react-types/searchfield/-/searchfield-3.5.5.tgz",
+            "integrity": "sha512-T/NHg12+w23TxlXMdetogLDUldk1z5dDavzbnjKrLkajLb221bp8brlR/+O6C1CtFpuJGALqYHgTasU1qkQFSA==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0",
-                "@react-types/textfield": "^3.9.2"
+                "@react-types/shared": "^3.23.1",
+                "@react-types/textfield": "^3.9.3"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/select": {
-            "version": "3.9.3",
-            "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.9.3.tgz",
-            "integrity": "sha512-hK5RvA6frMbLdynRkegNW1lMOD0l9aFsW9X8WuTAg0zV6iZouU0hhSCT6JRDefJrv+m0X3fRdohMuVNZOhlA1g==",
+            "version": "3.9.4",
+            "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.9.4.tgz",
+            "integrity": "sha512-xI7dnOW2st91fPPcv6hdtrTdcfetYiqZuuVPZ5TRobY7Q10/Zqqe/KqtOw1zFKUj9xqNJe4Ov3xP5GSdcO60Eg==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/shared": {
-            "version": "3.23.0",
-            "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.23.0.tgz",
-            "integrity": "sha512-GQm/iPiii3ikcaMNR4WdVkJ4w0mKtV3mLqeSfSqzdqbPr6vONkqXbh3RhPlPmAJs1b4QHnexd/wZQP3U9DHOwQ==",
+            "version": "3.23.1",
+            "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.23.1.tgz",
+            "integrity": "sha512-5d+3HbFDxGZjhbMBeFHRQhexMFt4pUce3okyRtUVKbbedQFUrtXSBg9VszgF2RTeQDKDkMCIQDtz5ccP/Lk1gw==",
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/slider": {
-            "version": "3.7.2",
-            "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.7.2.tgz",
-            "integrity": "sha512-HvC/Mdt/z741xcU0ymeNxslnowQ5EAHOSzyf2JMgXmle+pEIbbepz5QUVaOmEveQHS3bjxE/+n2yBTKbxP8CJg==",
+            "version": "3.7.3",
+            "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.7.3.tgz",
+            "integrity": "sha512-F8qFQaD2mqug2D0XeWMmjGBikiwbdERFlhFzdvNGbypPLz3AZICBKp1ZLPWdl0DMuy03G/jy6Gl4mDobl7RT2g==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/statuslight": {
-            "version": "3.3.8",
-            "resolved": "https://registry.npmjs.org/@react-types/statuslight/-/statuslight-3.3.8.tgz",
-            "integrity": "sha512-6ByVj2LJBctiXU5UeEgoKoIhDkOkJu5pb2GYJR8Rd5hxj5keYTdfmY5d4zYlEA4hR2itm+8//3f9NgYdZqlFhw==",
+            "version": "3.3.9",
+            "resolved": "https://registry.npmjs.org/@react-types/statuslight/-/statuslight-3.3.9.tgz",
+            "integrity": "sha512-6nC17gluvrMCJkb0mihzqAaz8wn0ghfgk1ILkL8CUobsqJU6pW4eGJXNoZCd5wHT/YjwnupzfhHcbMj93AHzWQ==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/switch": {
-            "version": "3.5.2",
-            "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.2.tgz",
-            "integrity": "sha512-4i35eZ5GtVDgu9KFhlyLyXanspcQp5WEnPyaBKn3pDRDcpzAL7yNP/Rwqc/JDdcJWngV080o7loJCgEfJ6UFaQ==",
+            "version": "3.5.3",
+            "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.3.tgz",
+            "integrity": "sha512-Nb6+J5MrPaFa8ZNFKGMzAsen/NNzl5UG/BbC65SLGPy7O0VDa/sUpn7dcu8V2xRpRwwIN/Oso4v63bt2sgdkgA==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/table": {
-            "version": "3.9.4",
-            "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.9.4.tgz",
-            "integrity": "sha512-31EI0KAHwX7TbgERLBLVuD3nvpZUo0Wie7S7FEARmirIRfzm1fIkdDk5hfIHry2Lp4mq2/aqXLCY+oDR+lC2pw==",
+            "version": "3.9.5",
+            "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.9.5.tgz",
+            "integrity": "sha512-fgM2j9F/UR4Anmd28CueghCgBwOZoCVyN8fjaIFPd2MN4gCwUUfANwxLav65gZk4BpwUXGoQdsW+X50L3555mg==",
             "dependencies": {
-                "@react-types/grid": "^3.2.5",
-                "@react-types/shared": "^3.23.0"
+                "@react-types/grid": "^3.2.6",
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/tabs": {
-            "version": "3.3.6",
-            "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.6.tgz",
-            "integrity": "sha512-ubvB7pB4+e5OpIuYR1CYip53iW9rJRIWvioHTYfcX0DnMabEcVP6Ymdqr5bDh/VsBEhiddsNgMduQwJm6bUTew==",
+            "version": "3.3.7",
+            "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.7.tgz",
+            "integrity": "sha512-ZdLe5xOcFX6+/ni45Dl2jO0jFATpTnoSqj6kLIS/BYv8oh0n817OjJkLf+DS3CLfNjApJWrHqAk34xNh6nRnEg==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/text": {
-            "version": "3.3.8",
-            "resolved": "https://registry.npmjs.org/@react-types/text/-/text-3.3.8.tgz",
-            "integrity": "sha512-EXTXNdZWg8ggeaOV6isEmNxTzyb1/94BSyUQOSDbazl9OJRnMrC3LAmKDn/ck/LLI2rLpYJ+XfM84zI5ohVzKw==",
+            "version": "3.3.9",
+            "resolved": "https://registry.npmjs.org/@react-types/text/-/text-3.3.9.tgz",
+            "integrity": "sha512-JJTmUstFXikZHQhf+0VELODGz1jUcSgXOTYJxTMiMtSjLOSCW5G+pRhT80MRgxOeuD0Z7p0XghUXo3ruD694HA==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/textfield": {
-            "version": "3.9.2",
-            "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.9.2.tgz",
-            "integrity": "sha512-8UcabahYhKm3KTu9CQBhz745FioUWO6CWgYusBpxMDJ+HnlhCC2JWyQvqg5tT98sr5AeSek4Jt/XS3ovzrhCDg==",
+            "version": "3.9.3",
+            "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.9.3.tgz",
+            "integrity": "sha512-DoAY6cYOL0pJhgNGI1Rosni7g72GAt4OVr2ltEx2S9ARmFZ0DBvdhA9lL2nywcnKMf27PEJcKMXzXc10qaHsJw==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/tooltip": {
-            "version": "3.4.8",
-            "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.8.tgz",
-            "integrity": "sha512-6XVQ3cMaXVMif+F5PQCaVwxbgAL8HVRqVjt6DkHs8Xbae43hpEIwPrBYlWWMVpuZAcjXZLTGmmyPjYeORZZJ4A==",
+            "version": "3.4.9",
+            "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.9.tgz",
+            "integrity": "sha512-wZ+uF1+Zc43qG+cOJzioBmLUNjRa7ApdcT0LI1VvaYvH5GdfjzUJOorLX9V/vAci0XMJ50UZ+qsh79aUlw2yqg==",
             "dependencies": {
-                "@react-types/overlays": "^3.8.6",
-                "@react-types/shared": "^3.23.0"
+                "@react-types/overlays": "^3.8.7",
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/view": {
-            "version": "3.4.8",
-            "resolved": "https://registry.npmjs.org/@react-types/view/-/view-3.4.8.tgz",
-            "integrity": "sha512-MlaSm/lDuR8Q60RNWAi7Ygg9T7gPOgZJH/zgs6i7Z8kYZHjGEmU2zpHZLoTIMkyLAdbjNvv2Te4Od0MWNKWdYA==",
+            "version": "3.4.9",
+            "resolved": "https://registry.npmjs.org/@react-types/view/-/view-3.4.9.tgz",
+            "integrity": "sha512-HY969whOXKg10ZqIrXOF12wm3rDwNaKaK9fzqhhrUc94+JR4OPKQctps+HeonAXscxy2yMy8V1/2yjiEwluvAA==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/well": {
-            "version": "3.3.8",
-            "resolved": "https://registry.npmjs.org/@react-types/well/-/well-3.3.8.tgz",
-            "integrity": "sha512-0IDdmwrb9CMwTii/yJm45ctBwdjCuvA8Gp36idhaM3tD+MuMapHjy48frHhZAFhjSeljDeJTdG1aaHMfnmMW9Q==",
+            "version": "3.3.9",
+            "resolved": "https://registry.npmjs.org/@react-types/well/-/well-3.3.9.tgz",
+            "integrity": "sha512-3ZlxjkWXupxx0PaxpDc4Pqxxgnzp8iJkilbJ3LY5F+RJwqDm0gkKnWcFjlVJw9LkM7Emjrvm1R8naSGzJ7wJ2A==",
             "dependencies": {
-                "@react-types/shared": "^3.23.0"
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
@@ -7048,6 +7569,74 @@
                 "url": "https://ko-fi.com/killymxi"
             }
         },
+        "node_modules/@sigstore/bundle": {
+            "version": "2.3.2",
+            "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz",
+            "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==",
+            "dependencies": {
+                "@sigstore/protobuf-specs": "^0.3.2"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@sigstore/core": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz",
+            "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==",
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@sigstore/protobuf-specs": {
+            "version": "0.3.2",
+            "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz",
+            "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==",
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@sigstore/sign": {
+            "version": "2.3.2",
+            "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz",
+            "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==",
+            "dependencies": {
+                "@sigstore/bundle": "^2.3.2",
+                "@sigstore/core": "^1.0.0",
+                "@sigstore/protobuf-specs": "^0.3.2",
+                "make-fetch-happen": "^13.0.1",
+                "proc-log": "^4.2.0",
+                "promise-retry": "^2.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@sigstore/tuf": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.3.tgz",
+            "integrity": "sha512-agQhHNkIddXFslkudjV88vTXiAMEyUtso3at6ZHUNJ1agZb7Ze6VW/PddHipdWBu1t+8OWLW5X5yZOPiOnaWJQ==",
+            "dependencies": {
+                "@sigstore/protobuf-specs": "^0.3.0",
+                "tuf-js": "^2.2.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@sigstore/verify": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz",
+            "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==",
+            "dependencies": {
+                "@sigstore/bundle": "^2.3.2",
+                "@sigstore/core": "^1.1.0",
+                "@sigstore/protobuf-specs": "^0.3.2"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
         "node_modules/@sinclair/typebox": {
             "version": "0.27.8",
             "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
@@ -7070,12 +7659,12 @@
             "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="
         },
         "node_modules/@spectrum-icons/ui": {
-            "version": "3.6.6",
-            "resolved": "https://registry.npmjs.org/@spectrum-icons/ui/-/ui-3.6.6.tgz",
-            "integrity": "sha512-LQnrjGm1xUeeBJFv0Bxa4ZvqU9dtvyA5KMUHGQUXEgNXoBw4f9eE9kj9apZt6KdVuru1R7+iqNOFTUPlQHIybw==",
+            "version": "3.6.7",
+            "resolved": "https://registry.npmjs.org/@spectrum-icons/ui/-/ui-3.6.7.tgz",
+            "integrity": "sha512-l08Juk6w8UUpM+xXNVq9LBJ0pxMC1tynXBurTZ135twdtMwofrZmtSHUYdzaRJtm31S9E/+C1Toci1I8aw7Wlw==",
             "dependencies": {
                 "@adobe/react-spectrum-ui": "1.2.0",
-                "@react-spectrum/icon": "^3.7.12",
+                "@react-spectrum/icon": "^3.7.13",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -7084,12 +7673,12 @@
             }
         },
         "node_modules/@spectrum-icons/workflow": {
-            "version": "4.2.11",
-            "resolved": "https://registry.npmjs.org/@spectrum-icons/workflow/-/workflow-4.2.11.tgz",
-            "integrity": "sha512-ALKjJH1AGaUMNZOasnXw2A8SucB6w2wzCxp7j+ZUcX0Pg1PsAY+JFK+uR7hwr3iu4T1l0WkZsKxR/FTjhsPWLg==",
+            "version": "4.2.12",
+            "resolved": "https://registry.npmjs.org/@spectrum-icons/workflow/-/workflow-4.2.12.tgz",
+            "integrity": "sha512-xuyytdlM09DEZO7/vSp5z8Y2RYNXL4OOYSmOaWXeYgIa3iPNKz0HW+iVR2P+Ht0iBtKjPvRobbEFb0k280U4yQ==",
             "dependencies": {
                 "@adobe/react-spectrum-workflow": "2.3.4",
-                "@react-spectrum/icon": "^3.7.12",
+                "@react-spectrum/icon": "^3.7.13",
                 "@swc/helpers": "^0.5.0"
             },
             "peerDependencies": {
@@ -7145,6 +7734,26 @@
             "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
             "dev": true
         },
+        "node_modules/@tufjs/canonical-json": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz",
+            "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==",
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/@tufjs/models": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz",
+            "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==",
+            "dependencies": {
+                "@tufjs/canonical-json": "2.0.0",
+                "minimatch": "^9.0.4"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
         "node_modules/@turf/along": {
             "version": "6.5.0",
             "resolved": "https://registry.npmjs.org/@turf/along/-/along-6.5.0.tgz",
@@ -8791,7 +9400,6 @@
         },
         "node_modules/@types/chai": {
             "version": "4.3.16",
-            "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz",
             "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==",
             "dev": true
         },
@@ -8853,7 +9461,6 @@
         },
         "node_modules/@types/cookie-session": {
             "version": "2.0.49",
-            "resolved": "https://registry.npmjs.org/@types/cookie-session/-/cookie-session-2.0.49.tgz",
             "integrity": "sha512-4E/bBjlqLhU5l4iGPR+NkVJH593hpNsT4dC3DJDr+ODm6Qpe13kZQVkezRIb+TYDXaBMemS3yLQ+0leba3jlkQ==",
             "dev": true,
             "dependencies": {
@@ -9176,9 +9783,9 @@
             }
         },
         "node_modules/@types/express-serve-static-core": {
-            "version": "4.19.0",
-            "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz",
-            "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==",
+            "version": "4.19.1",
+            "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.1.tgz",
+            "integrity": "sha512-ej0phymbFLoCB26dbbq5PGScsf2JAJ4IJHjG10LalgUV36XKTmA4GdA+PVllKvRk0sEKt64X8975qFnkSi0hqA==",
             "dev": true,
             "dependencies": {
                 "@types/node": "*",
@@ -9319,7 +9926,6 @@
         },
         "node_modules/@types/jquery": {
             "version": "3.5.30",
-            "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz",
             "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==",
             "dev": true,
             "dependencies": {
@@ -9359,9 +9965,8 @@
             "dev": true
         },
         "node_modules/@types/libxmljs": {
-            "version": "0.18.12",
-            "resolved": "https://registry.npmjs.org/@types/libxmljs/-/libxmljs-0.18.12.tgz",
-            "integrity": "sha512-X4jjDalP9dc8MK+rZA4utk0H0NgtiFrAmUeR+qHdNkkLWEqzTm25Y/M9CKPiVQM3d7sxcPYYRL/S6gaaDd3jcQ==",
+            "version": "0.18.13",
+            "integrity": "sha512-0hBHqUYsKdEe15ZKDF/iihdhCLpaYYJ8jhEZMQoivGMkYUfUOXlKStjzs1NyV8kOyFCWZtFcddmjR07dM9FYug==",
             "dev": true,
             "dependencies": {
                 "@types/node": "*"
@@ -9369,7 +9974,6 @@
         },
         "node_modules/@types/lodash": {
             "version": "4.17.4",
-            "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz",
             "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==",
             "dev": true
         },
@@ -9440,7 +10044,6 @@
         },
         "node_modules/@types/nodemailer": {
             "version": "6.4.15",
-            "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.15.tgz",
             "integrity": "sha512-0EBJxawVNjPkng1zm2vopRctuWVCxk34JcIlRuXSf54habUWdz1FB7wHDqOqvDa8Mtpt0Q3LTXQkAs2LNyK5jQ==",
             "dev": true,
             "dependencies": {
@@ -9448,9 +10051,9 @@
             }
         },
         "node_modules/@types/oauth": {
-            "version": "0.9.4",
-            "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.4.tgz",
-            "integrity": "sha512-qk9orhti499fq5XxKCCEbd0OzdPZuancneyse3KtR+vgMiHRbh+mn8M4G6t64ob/Fg+GZGpa565MF/2dKWY32A==",
+            "version": "0.9.5",
+            "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.5.tgz",
+            "integrity": "sha512-+oQ3C2Zx6ambINOcdIARF5Z3Tu3x//HipE889/fqo3sgpQZbe9c6ExdQFtN6qlhpR7p83lTZfPJt0tCAW29dog==",
             "dev": true,
             "dependencies": {
                 "@types/node": "*"
@@ -9477,7 +10080,6 @@
         },
         "node_modules/@types/passport-google-oauth20": {
             "version": "2.0.16",
-            "resolved": "https://registry.npmjs.org/@types/passport-google-oauth20/-/passport-google-oauth20-2.0.16.tgz",
             "integrity": "sha512-ayXK2CJ7uVieqhYOc6k/pIr5pcQxOLB6kBev+QUGS7oEZeTgIs1odDobXRqgfBPvXzl0wXCQHftV5220czZCPA==",
             "dev": true,
             "dependencies": {
@@ -9550,9 +10152,9 @@
             }
         },
         "node_modules/@types/react": {
-            "version": "18.3.2",
-            "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz",
-            "integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==",
+            "version": "18.3.3",
+            "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
+            "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
             "dependencies": {
                 "@types/prop-types": "*",
                 "csstype": "^3.0.2"
@@ -9590,7 +10192,6 @@
         },
         "node_modules/@types/react-dom": {
             "version": "18.3.0",
-            "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
             "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
             "dev": true,
             "dependencies": {
@@ -9624,6 +10225,15 @@
                 "@types/react": "*"
             }
         },
+        "node_modules/@types/react-speech-recognition": {
+            "version": "3.9.5",
+            "resolved": "https://registry.npmjs.org/@types/react-speech-recognition/-/react-speech-recognition-3.9.5.tgz",
+            "integrity": "sha512-m3Sg3Xtj/YcEUu+nLPGwI6oq1wcSblsuyAmXgBfW6Nprfmtl+A+kH4ruPzzFKnFkq6WmmRxdsLvt0nLRAAJtBw==",
+            "dev": true,
+            "dependencies": {
+                "@types/dom-speech-recognition": "*"
+            }
+        },
         "node_modules/@types/react-transition-group": {
             "version": "4.4.10",
             "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz",
@@ -9697,12 +10307,6 @@
             "resolved": "https://registry.npmjs.org/@types/reveal/-/reveal-4.2.0.tgz",
             "integrity": "sha512-lhTCUrk8pU/9SWcqbLwCy/AFjCp9S2hcDGoKAIycWGcHujUrDKMXWVkOvbSWk/gohZwwfuxQxucBaqvYAM5DTQ=="
         },
-        "node_modules/@types/scheduler": {
-            "version": "0.16.8",
-            "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
-            "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
-            "optional": true
-        },
         "node_modules/@types/send": {
             "version": "0.17.4",
             "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
@@ -9815,7 +10419,6 @@
         },
         "node_modules/@types/web": {
             "version": "0.0.143",
-            "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.143.tgz",
             "integrity": "sha512-TazK16/OqeeqfQRB/Tv/NwzJagHbLi/w5g26FLbiFte/8LpPq6BuTyXHO/cpgwJpE6KGgFSNYb6Ap05Tz9XvCA=="
         },
         "node_modules/@types/webidl-conversions": {
@@ -9881,16 +10484,16 @@
             "dev": true
         },
         "node_modules/@typescript-eslint/eslint-plugin": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz",
-            "integrity": "sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==",
+            "version": "7.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.10.0.tgz",
+            "integrity": "sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==",
             "dev": true,
             "dependencies": {
                 "@eslint-community/regexpp": "^4.10.0",
-                "@typescript-eslint/scope-manager": "7.9.0",
-                "@typescript-eslint/type-utils": "7.9.0",
-                "@typescript-eslint/utils": "7.9.0",
-                "@typescript-eslint/visitor-keys": "7.9.0",
+                "@typescript-eslint/scope-manager": "7.10.0",
+                "@typescript-eslint/type-utils": "7.10.0",
+                "@typescript-eslint/utils": "7.10.0",
+                "@typescript-eslint/visitor-keys": "7.10.0",
                 "graphemer": "^1.4.0",
                 "ignore": "^5.3.1",
                 "natural-compare": "^1.4.0",
@@ -9914,14 +10517,13 @@
             }
         },
         "node_modules/@typescript-eslint/parser": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz",
-            "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==",
+            "version": "7.13.1",
+            "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==",
             "dependencies": {
-                "@typescript-eslint/scope-manager": "7.9.0",
-                "@typescript-eslint/types": "7.9.0",
-                "@typescript-eslint/typescript-estree": "7.9.0",
-                "@typescript-eslint/visitor-keys": "7.9.0",
+                "@typescript-eslint/scope-manager": "7.13.1",
+                "@typescript-eslint/types": "7.13.1",
+                "@typescript-eslint/typescript-estree": "7.13.1",
+                "@typescript-eslint/visitor-keys": "7.13.1",
                 "debug": "^4.3.4"
             },
             "engines": {
@@ -9940,13 +10542,96 @@
                 }
             }
         },
+        "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
+            "version": "7.13.1",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz",
+            "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==",
+            "dependencies": {
+                "@typescript-eslint/types": "7.13.1",
+                "@typescript-eslint/visitor-keys": "7.13.1"
+            },
+            "engines": {
+                "node": "^18.18.0 || >=20.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            }
+        },
+        "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
+            "version": "7.13.1",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz",
+            "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==",
+            "engines": {
+                "node": "^18.18.0 || >=20.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            }
+        },
+        "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
+            "version": "7.13.1",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz",
+            "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==",
+            "dependencies": {
+                "@typescript-eslint/types": "7.13.1",
+                "@typescript-eslint/visitor-keys": "7.13.1",
+                "debug": "^4.3.4",
+                "globby": "^11.1.0",
+                "is-glob": "^4.0.3",
+                "minimatch": "^9.0.4",
+                "semver": "^7.6.0",
+                "ts-api-utils": "^1.3.0"
+            },
+            "engines": {
+                "node": "^18.18.0 || >=20.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            },
+            "peerDependenciesMeta": {
+                "typescript": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
+            "version": "7.13.1",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz",
+            "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==",
+            "dependencies": {
+                "@typescript-eslint/types": "7.13.1",
+                "eslint-visitor-keys": "^3.4.3"
+            },
+            "engines": {
+                "node": "^18.18.0 || >=20.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            }
+        },
+        "node_modules/@typescript-eslint/parser/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
         "node_modules/@typescript-eslint/scope-manager": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz",
-            "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==",
+            "version": "7.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz",
+            "integrity": "sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==",
+            "dev": true,
             "dependencies": {
-                "@typescript-eslint/types": "7.9.0",
-                "@typescript-eslint/visitor-keys": "7.9.0"
+                "@typescript-eslint/types": "7.10.0",
+                "@typescript-eslint/visitor-keys": "7.10.0"
             },
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
@@ -9957,13 +10642,13 @@
             }
         },
         "node_modules/@typescript-eslint/type-utils": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz",
-            "integrity": "sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==",
+            "version": "7.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.10.0.tgz",
+            "integrity": "sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/typescript-estree": "7.9.0",
-                "@typescript-eslint/utils": "7.9.0",
+                "@typescript-eslint/typescript-estree": "7.10.0",
+                "@typescript-eslint/utils": "7.10.0",
                 "debug": "^4.3.4",
                 "ts-api-utils": "^1.3.0"
             },
@@ -9984,9 +10669,10 @@
             }
         },
         "node_modules/@typescript-eslint/types": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz",
-            "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==",
+            "version": "7.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.10.0.tgz",
+            "integrity": "sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==",
+            "dev": true,
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
             },
@@ -9996,12 +10682,13 @@
             }
         },
         "node_modules/@typescript-eslint/typescript-estree": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz",
-            "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==",
+            "version": "7.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz",
+            "integrity": "sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==",
+            "dev": true,
             "dependencies": {
-                "@typescript-eslint/types": "7.9.0",
-                "@typescript-eslint/visitor-keys": "7.9.0",
+                "@typescript-eslint/types": "7.10.0",
+                "@typescript-eslint/visitor-keys": "7.10.0",
                 "debug": "^4.3.4",
                 "globby": "^11.1.0",
                 "is-glob": "^4.0.3",
@@ -10026,6 +10713,7 @@
             "version": "7.6.2",
             "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
             "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "dev": true,
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -10034,15 +10722,15 @@
             }
         },
         "node_modules/@typescript-eslint/utils": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz",
-            "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==",
+            "version": "7.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.10.0.tgz",
+            "integrity": "sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==",
             "dev": true,
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.4.0",
-                "@typescript-eslint/scope-manager": "7.9.0",
-                "@typescript-eslint/types": "7.9.0",
-                "@typescript-eslint/typescript-estree": "7.9.0"
+                "@typescript-eslint/scope-manager": "7.10.0",
+                "@typescript-eslint/types": "7.10.0",
+                "@typescript-eslint/typescript-estree": "7.10.0"
             },
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
@@ -10056,11 +10744,12 @@
             }
         },
         "node_modules/@typescript-eslint/visitor-keys": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz",
-            "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==",
+            "version": "7.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz",
+            "integrity": "sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==",
+            "dev": true,
             "dependencies": {
-                "@typescript-eslint/types": "7.9.0",
+                "@typescript-eslint/types": "7.10.0",
                 "eslint-visitor-keys": "^3.4.3"
             },
             "engines": {
@@ -10394,7 +11083,6 @@
         },
         "node_modules/adm-zip": {
             "version": "0.5.12",
-            "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.12.tgz",
             "integrity": "sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==",
             "engines": {
                 "node": ">=6.0"
@@ -10422,6 +11110,18 @@
                 "node": ">= 8.0.0"
             }
         },
+        "node_modules/aggregate-error": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+            "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+            "dependencies": {
+                "clean-stack": "^2.0.0",
+                "indent-string": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
         "node_modules/ajv": {
             "version": "6.12.6",
             "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -10454,9 +11154,9 @@
             }
         },
         "node_modules/ajv-formats/node_modules/ajv": {
-            "version": "8.13.0",
-            "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz",
-            "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
+            "version": "8.16.0",
+            "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
+            "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
             "dependencies": {
                 "fast-deep-equal": "^3.1.3",
                 "json-schema-traverse": "^1.0.0",
@@ -10622,10 +11322,16 @@
                 "node": ">= 14"
             }
         },
+        "node_modules/archy": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+            "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw=="
+        },
         "node_modules/are-we-there-yet": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
             "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
+            "deprecated": "This package is no longer supported.",
             "dependencies": {
                 "delegates": "^1.0.0",
                 "readable-stream": "^3.6.0"
@@ -10647,6 +11353,14 @@
                 "node": ">= 6"
             }
         },
+        "node_modules/are-we-there-yet/node_modules/readable-stream/node_modules/string_decoder": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+            "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+            "dependencies": {
+                "safe-buffer": "~5.2.0"
+            }
+        },
         "node_modules/arg": {
             "version": "4.1.3",
             "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
@@ -10979,9 +11693,9 @@
             }
         },
         "node_modules/aws4": {
-            "version": "1.12.0",
-            "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
-            "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
+            "version": "1.13.0",
+            "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.0.tgz",
+            "integrity": "sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g=="
         },
         "node_modules/axe-core": {
             "version": "4.7.0",
@@ -10993,9 +11707,8 @@
             }
         },
         "node_modules/axios": {
-            "version": "1.7.1",
-            "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.1.tgz",
-            "integrity": "sha512-+LV37nQcd1EpFalkXksWNBiA17NZ5m5/WspmHGmZmdx1qBOg/VNq/c4eRJiA9VQQHBOs+N0ZhhdU10h2TyNK7Q==",
+            "version": "1.7.2",
+            "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
             "dependencies": {
                 "follow-redirects": "^1.15.6",
                 "form-data": "^4.0.0",
@@ -11123,22 +11836,6 @@
                 "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
             }
         },
-        "node_modules/babel-plugin-styled-components": {
-            "version": "2.1.4",
-            "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz",
-            "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==",
-            "peer": true,
-            "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.22.5",
-                "@babel/helper-module-imports": "^7.22.5",
-                "@babel/plugin-syntax-jsx": "^7.22.5",
-                "lodash": "^4.17.21",
-                "picomatch": "^2.3.1"
-            },
-            "peerDependencies": {
-                "styled-components": ">= 2"
-            }
-        },
         "node_modules/babel-runtime": {
             "version": "6.26.0",
             "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
@@ -11186,9 +11883,9 @@
             "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
         },
         "node_modules/bare-events": {
-            "version": "2.2.2",
-            "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz",
-            "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==",
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz",
+            "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==",
             "optional": true
         },
         "node_modules/Base64": {
@@ -11196,6 +11893,14 @@
             "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz",
             "integrity": "sha512-reGEWshDmTDQDsCec/HduOO9Wyj6yMOupMfhIf3ugN1TDlK2NQW4DDJSqNNtp380SNcvRfXtO8HSCQot0d0SMw=="
         },
+        "node_modules/base64-arraybuffer": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+            "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
+            "engines": {
+                "node": ">= 0.6.0"
+            }
+        },
         "node_modules/base64-js": {
             "version": "1.5.1",
             "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -11258,7 +11963,6 @@
         },
         "node_modules/better-react-mathjax": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/better-react-mathjax/-/better-react-mathjax-2.0.3.tgz",
             "integrity": "sha512-wfifT8GFOKb1TWm2+E50I6DJpLZ5kLbch283Lu043EJtwSv0XvZDjr4YfR4d2MjAhqP6SH4VjjrKgbX8R00oCQ==",
             "dependencies": {
                 "mathjax-full": "^3.2.2"
@@ -11297,6 +12001,20 @@
                 "node": "*"
             }
         },
+        "node_modules/bin-links": {
+            "version": "4.0.4",
+            "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz",
+            "integrity": "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==",
+            "dependencies": {
+                "cmd-shim": "^6.0.0",
+                "npm-normalize-package-bin": "^3.0.0",
+                "read-cmd-shim": "^4.0.0",
+                "write-file-atomic": "^5.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/binary-extensions": {
             "version": "2.3.0",
             "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -11409,11 +12127,11 @@
             }
         },
         "node_modules/braces": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+            "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
             "dependencies": {
-                "fill-range": "^7.0.1"
+                "fill-range": "^7.1.1"
             },
             "engines": {
                 "node": ">=8"
@@ -11429,7 +12147,6 @@
         },
         "node_modules/browndash-components": {
             "version": "0.1.44",
-            "resolved": "https://registry.npmjs.org/browndash-components/-/browndash-components-0.1.44.tgz",
             "integrity": "sha512-+QYEHDqd3iauijdKiVA0jXGFkOMEKn+qb7Y2iG+VK0xAh8Fho3rAUoSMv6snfg+kMc1oMGhACzJa5XauTtvguQ==",
             "dependencies": {
                 "@emotion/react": "^11.11.1",
@@ -11443,38 +12160,6 @@
                 "react-measure": "^2.5.2"
             }
         },
-        "node_modules/browndash-components/node_modules/@emotion/unitless": {
-            "version": "0.7.5",
-            "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
-            "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==",
-            "peer": true
-        },
-        "node_modules/browndash-components/node_modules/@mui/styled-engine-sc": {
-            "version": "5.14.12",
-            "resolved": "https://registry.npmjs.org/@mui/styled-engine-sc/-/styled-engine-sc-5.14.12.tgz",
-            "integrity": "sha512-FQ5KDd17OkRurE0ljR4Pddekv1uPSoJxcBqXa9tdoOETGULVCefM5Gd9CRGzT+alNPDyHBoUeEYKulIkDN9ytA==",
-            "dependencies": {
-                "@babel/runtime": "^7.23.1",
-                "csstype": "^3.1.2",
-                "prop-types": "^15.8.1"
-            },
-            "engines": {
-                "node": ">=12.0.0"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/mui"
-            },
-            "peerDependencies": {
-                "@types/styled-components": "^5.1.14",
-                "styled-components": "^5.3.1"
-            },
-            "peerDependenciesMeta": {
-                "@types/styled-components": {
-                    "optional": true
-                }
-            }
-        },
         "node_modules/browndash-components/node_modules/npm": {
             "version": "9.9.3",
             "resolved": "https://registry.npmjs.org/npm/-/npm-9.9.3.tgz",
@@ -14504,36 +15189,6 @@
                 "react": "*"
             }
         },
-        "node_modules/browndash-components/node_modules/styled-components": {
-            "version": "5.3.11",
-            "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz",
-            "integrity": "sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==",
-            "peer": true,
-            "dependencies": {
-                "@babel/helper-module-imports": "^7.0.0",
-                "@babel/traverse": "^7.4.5",
-                "@emotion/is-prop-valid": "^1.1.0",
-                "@emotion/stylis": "^0.8.4",
-                "@emotion/unitless": "^0.7.4",
-                "babel-plugin-styled-components": ">= 1.12.0",
-                "css-to-react-native": "^3.0.0",
-                "hoist-non-react-statics": "^3.0.0",
-                "shallowequal": "^1.1.0",
-                "supports-color": "^5.5.0"
-            },
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/styled-components"
-            },
-            "peerDependencies": {
-                "react": ">= 16.8.0",
-                "react-dom": ">= 16.8.0",
-                "react-is": ">= 16.8.0"
-            }
-        },
         "node_modules/browser-assert": {
             "version": "1.2.1",
             "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz",
@@ -14689,6 +15344,47 @@
                 "typewise-core": "^1.2"
             }
         },
+        "node_modules/cacache": {
+            "version": "18.0.3",
+            "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz",
+            "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==",
+            "dependencies": {
+                "@npmcli/fs": "^3.1.0",
+                "fs-minipass": "^3.0.0",
+                "glob": "^10.2.2",
+                "lru-cache": "^10.0.1",
+                "minipass": "^7.0.3",
+                "minipass-collect": "^2.0.1",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "p-map": "^4.0.0",
+                "ssri": "^10.0.0",
+                "tar": "^6.1.11",
+                "unique-filename": "^3.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/cacache/node_modules/fs-minipass": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
+            "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
+            "dependencies": {
+                "minipass": "^7.0.3"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/cacache/node_modules/lru-cache": {
+            "version": "10.2.2",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
+            "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+            "engines": {
+                "node": "14 || >=16.14"
+            }
+        },
         "node_modules/cacheable-lookup": {
             "version": "7.0.0",
             "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
@@ -14803,9 +15499,9 @@
             }
         },
         "node_modules/caniuse-lite": {
-            "version": "1.0.30001620",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz",
-            "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==",
+            "version": "1.0.30001621",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz",
+            "integrity": "sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==",
             "funding": [
                 {
                     "type": "opencollective",
@@ -14851,7 +15547,6 @@
         },
         "node_modules/chai": {
             "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz",
             "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==",
             "dev": true,
             "dependencies": {
@@ -14938,7 +15633,6 @@
         },
         "node_modules/chart.js": {
             "version": "4.4.3",
-            "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz",
             "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==",
             "dependencies": {
                 "@kurkle/color": "^0.3.0"
@@ -15030,6 +15724,17 @@
                 "node": ">=8"
             }
         },
+        "node_modules/cidr-regex": {
+            "version": "4.1.1",
+            "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-4.1.1.tgz",
+            "integrity": "sha512-ekKcVp+iRB9zlKFXyx7io7nINgb0oRjgRdXNEodp1OuxRui8FXr/CA40Tz1voWUp9DPPrMyQKy01vJhDo4N1lw==",
+            "dependencies": {
+                "ip-regex": "^5.0.0"
+            },
+            "engines": {
+                "node": ">=14"
+            }
+        },
         "node_modules/class-transformer": {
             "version": "0.5.1",
             "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
@@ -15059,6 +15764,44 @@
                 "node": ">=0.10.0"
             }
         },
+        "node_modules/clean-stack": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+            "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/cli-columns": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/cli-columns/-/cli-columns-4.0.0.tgz",
+            "integrity": "sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ==",
+            "dependencies": {
+                "string-width": "^4.2.3",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">= 10"
+            }
+        },
+        "node_modules/cli-columns/node_modules/emoji-regex": {
+            "version": "8.0.0",
+            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+        },
+        "node_modules/cli-columns/node_modules/string-width": {
+            "version": "4.2.3",
+            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+            "dependencies": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
         "node_modules/cli-cursor": {
             "version": "3.1.0",
             "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
@@ -15244,6 +15987,14 @@
                 "node": ">=6"
             }
         },
+        "node_modules/cmd-shim": {
+            "version": "6.0.3",
+            "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz",
+            "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/color": {
             "version": "4.2.3",
             "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
@@ -15357,6 +16108,11 @@
                 "node": ">= 10"
             }
         },
+        "node_modules/common-ancestor-path": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz",
+            "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="
+        },
         "node_modules/common-path-prefix": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
@@ -15439,7 +16195,6 @@
         },
         "node_modules/compute-cosine-similarity": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/compute-cosine-similarity/-/compute-cosine-similarity-1.1.0.tgz",
             "integrity": "sha512-FXhNx0ILLjGi9Z9+lglLzM12+0uoTnYkHm7GiadXDAr0HGVLm25OivUS1B/LPkbzzvlcXz/1EvWg9ZYyJSdhTw==",
             "dependencies": {
                 "compute-dot": "^1.1.0",
@@ -15775,10 +16530,17 @@
                 "node": ">=4"
             }
         },
+        "node_modules/css-line-break": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
+            "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+            "dependencies": {
+                "utrie": "^1.0.2"
+            }
+        },
         "node_modules/css-loader": {
-            "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.1.tgz",
-            "integrity": "sha512-OxIR5P2mjO1PSXk44bWuQ8XtMK4dpEqpIyERCx3ewOo3I8EmbcxMPUc5ScLtQfgXtOojoMv57So4V/C02HQLsw==",
+            "version": "7.1.2",
+            "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==",
             "dependencies": {
                 "icss-utils": "^5.1.0",
                 "postcss": "^8.4.33",
@@ -15953,12 +16715,10 @@
         },
         "node_modules/csv-stringify": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.5.0.tgz",
             "integrity": "sha512-edlXFVKcUx7r8Vx5zQucsuMg4wb/xT6qyz+Sr1vnLrdXqlLD1+UKyWNyZ9zn6mUW1ewmGxrpVwAcChGF0HQ/2Q=="
         },
         "node_modules/csvtojson": {
             "version": "2.0.10",
-            "resolved": "https://registry.npmjs.org/csvtojson/-/csvtojson-2.0.10.tgz",
             "integrity": "sha512-lUWFxGKyhraKCW8Qghz6Z0f2l/PqB1W3AO0HKJzGIQ5JRSlR651ekJDiGJbBT4sRNNv5ddnSGVEnsxP9XRCVpQ==",
             "dependencies": {
                 "bluebird": "^3.5.1",
@@ -16425,6 +17185,17 @@
                 "node": ">=12"
             }
         },
+        "node_modules/d3/node_modules/d3-array": {
+            "version": "3.2.4",
+            "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+            "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+            "dependencies": {
+                "internmap": "1 - 2"
+            },
+            "engines": {
+                "node": ">=12"
+            }
+        },
         "node_modules/d3/node_modules/d3-geo": {
             "version": "3.1.1",
             "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
@@ -16939,9 +17710,9 @@
             }
         },
         "node_modules/diff": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
-            "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+            "version": "5.2.0",
+            "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+            "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
             "engines": {
                 "node": ">=0.3.1"
             }
@@ -17130,9 +17901,9 @@
             "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
         },
         "node_modules/electron-to-chromium": {
-            "version": "1.4.774",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz",
-            "integrity": "sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg=="
+            "version": "1.4.782",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.782.tgz",
+            "integrity": "sha512-JUfU61e8tr+i5Y1FKXcKs+Xe+rJ+CEqm4cgv1kMihPE2EvYHmYyVr3Im/+1+Z5B29Be2EEGCZCwAc6Tazdl1Yg=="
         },
         "node_modules/elkjs": {
             "version": "0.9.3",
@@ -17160,6 +17931,27 @@
                 "node": ">= 0.8"
             }
         },
+        "node_modules/encoding": {
+            "version": "0.1.13",
+            "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+            "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+            "optional": true,
+            "dependencies": {
+                "iconv-lite": "^0.6.2"
+            }
+        },
+        "node_modules/encoding/node_modules/iconv-lite": {
+            "version": "0.6.3",
+            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+            "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+            "optional": true,
+            "dependencies": {
+                "safer-buffer": ">= 2.1.2 < 3.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
         "node_modules/engine.io": {
             "version": "6.5.4",
             "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz",
@@ -17263,6 +18055,14 @@
                 "url": "https://github.com/fb55/entities?sponsor=1"
             }
         },
+        "node_modules/env-paths": {
+            "version": "2.2.1",
+            "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+            "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+            "engines": {
+                "node": ">=6"
+            }
+        },
         "node_modules/envinfo": {
             "version": "7.13.0",
             "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
@@ -17274,6 +18074,11 @@
                 "node": ">=4"
             }
         },
+        "node_modules/err-code": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+            "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="
+        },
         "node_modules/error-ex": {
             "version": "1.3.2",
             "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -17784,6 +18589,7 @@
             "version": "7.2.3",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
             "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dev": true,
             "dependencies": {
                 "fs.realpath": "^1.0.0",
@@ -17921,6 +18727,7 @@
             "version": "2.6.3",
             "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
             "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+            "deprecated": "Rimraf versions prior to v4 are no longer supported",
             "dev": true,
             "dependencies": {
                 "glob": "^7.1.3"
@@ -18211,6 +19018,7 @@
             "version": "7.2.3",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
             "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dev": true,
             "dependencies": {
                 "fs.realpath": "^1.0.0",
@@ -18348,6 +19156,7 @@
             "version": "2.6.3",
             "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
             "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+            "deprecated": "Rimraf versions prior to v4 are no longer supported",
             "dev": true,
             "dependencies": {
                 "glob": "^7.1.3"
@@ -18456,7 +19265,6 @@
         },
         "node_modules/eslint-import-resolver-typescript": {
             "version": "3.6.1",
-            "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz",
             "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==",
             "dev": true,
             "dependencies": {
@@ -18739,7 +19547,6 @@
         },
         "node_modules/eslint-plugin-react": {
             "version": "7.34.1",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz",
             "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==",
             "dev": true,
             "dependencies": {
@@ -18771,7 +19578,6 @@
         },
         "node_modules/eslint-plugin-react-hooks": {
             "version": "4.6.2",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz",
             "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==",
             "dev": true,
             "engines": {
@@ -18893,7 +19699,6 @@
         },
         "node_modules/eslint-webpack-plugin": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-4.1.0.tgz",
             "integrity": "sha512-C3wAG2jyockIhN0YRLuKieKj2nx/gnE/VHmoHemD5ifnAtY6ZU+jNPfzPoX4Zd6RIbUyWTiZUh/ofUlBhoAX7w==",
             "dependencies": {
                 "@types/eslint": "^8.56.5",
@@ -19236,6 +20041,11 @@
                 "node": ">=0.10.0"
             }
         },
+        "node_modules/exponential-backoff": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz",
+            "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw=="
+        },
         "node_modules/express": {
             "version": "4.19.2",
             "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
@@ -19334,7 +20144,6 @@
         },
         "node_modules/express-validator": {
             "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-7.1.0.tgz",
             "integrity": "sha512-ePn6NXjHRZiZkwTiU1Rl2hy6aUqmi6Cb4/s8sfUsKH7j2yYl9azSpl8xEHcOj1grzzQ+UBEoLWtE1s6FDxW++g==",
             "dependencies": {
                 "lodash": "^4.17.21",
@@ -19397,7 +20206,6 @@
         },
         "node_modules/extract-colors": {
             "version": "4.0.6",
-            "resolved": "https://registry.npmjs.org/extract-colors/-/extract-colors-4.0.6.tgz",
             "integrity": "sha512-U+pYyQKXCSHOmtZPIEJBGLJjLDiqS+oOub2ILA3a7UGt9+IvZvwAN3hOPFjUgT+gX/apSBwP5vBgnKMlV0fy8Q=="
         },
         "node_modules/extsprintf": {
@@ -19612,9 +20420,9 @@
             }
         },
         "node_modules/fill-range": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+            "version": "7.1.1",
+            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+            "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
             "dependencies": {
                 "to-regex-range": "^5.0.1"
             },
@@ -19765,6 +20573,7 @@
             "version": "7.2.3",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
             "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -19795,6 +20604,7 @@
             "version": "3.0.2",
             "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
             "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+            "deprecated": "Rimraf versions prior to v4 are no longer supported",
             "dependencies": {
                 "glob": "^7.1.3"
             },
@@ -19821,7 +20631,6 @@
         },
         "node_modules/fluent-ffmpeg": {
             "version": "2.1.3",
-            "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.3.tgz",
             "integrity": "sha512-Be3narBNt2s6bsaqP6Jzq91heDgOEaDCJAXcE3qcma/EJBSy5FB4cvO31XBInuAuKBx8Kptf8dkhjK0IOru39Q==",
             "dependencies": {
                 "async": "^0.2.9",
@@ -19891,9 +20700,9 @@
             }
         },
         "node_modules/foreground-child": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
-            "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+            "version": "3.2.1",
+            "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
+            "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
             "dependencies": {
                 "cross-spawn": "^7.0.0",
                 "signal-exit": "^4.0.1"
@@ -20288,6 +21097,7 @@
             "version": "3.0.2",
             "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
             "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
+            "deprecated": "This package is no longer supported.",
             "dependencies": {
                 "aproba": "^1.0.3 || ^2.0.0",
                 "color-support": "^1.1.2",
@@ -20568,15 +21378,15 @@
             "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA=="
         },
         "node_modules/glob": {
-            "version": "10.3.15",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz",
-            "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==",
+            "version": "10.4.1",
+            "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz",
+            "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==",
             "dependencies": {
                 "foreground-child": "^3.1.0",
-                "jackspeak": "^2.3.6",
-                "minimatch": "^9.0.1",
-                "minipass": "^7.0.4",
-                "path-scurry": "^1.11.0"
+                "jackspeak": "^3.1.2",
+                "minimatch": "^9.0.4",
+                "minipass": "^7.1.2",
+                "path-scurry": "^1.11.1"
             },
             "bin": {
                 "glob": "dist/esm/bin.mjs"
@@ -20654,7 +21464,6 @@
         },
         "node_modules/globals": {
             "version": "15.3.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-15.3.0.tgz",
             "integrity": "sha512-cCdyVjIUVTtX8ZsPkq1oCsOsLmGIswqnjZYMJJTGaNApj1yHtLSymKhwH51ttirREn75z3p4k051clwg7rvNKA==",
             "dev": true,
             "engines": {
@@ -20705,9 +21514,9 @@
             "integrity": "sha512-sIVQCiRWOymHbVD1Aw/T9/ijbPYAVGBlgGYd1N9MRKfcyBNSpjr87Vg9nSHm+RCT8ELrvK8IJYJV0QRJuVUkCQ=="
         },
         "node_modules/google-auth-library": {
-            "version": "9.10.0",
-            "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.10.0.tgz",
-            "integrity": "sha512-ol+oSa5NbcGdDqA+gZ3G3mev59OHBZksBTxY/tYwjtcp1H/scAFwJfSQU9/1RALoyZ7FslNbke8j4i3ipwlyuQ==",
+            "version": "9.11.0",
+            "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.11.0.tgz",
+            "integrity": "sha512-epX3ww/mNnhl6tL45EQ/oixsY8JLEgUFoT4A5E/5iAR4esld9Kqv6IJGk7EmGuOgDvaarwF95hU2+v7Irql9lw==",
             "dependencies": {
                 "base64-js": "^1.3.0",
                 "ecdsa-sig-formatter": "^1.0.11",
@@ -20786,7 +21595,6 @@
         },
         "node_modules/got": {
             "version": "14.3.0",
-            "resolved": "https://registry.npmjs.org/got/-/got-14.3.0.tgz",
             "integrity": "sha512-vZkrXdq5BtPWTXqvjXSpl6zky3zpHaOVfSug/RfFHu3YrtSsvYzopVMDqrh2do77WnGoCSSRCHW25zXOSAQ9zw==",
             "dependencies": {
                 "@sindresorhus/is": "^6.3.1",
@@ -21202,6 +22010,25 @@
                 "node": ">=0.10.0"
             }
         },
+        "node_modules/hosted-git-info": {
+            "version": "7.0.2",
+            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+            "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+            "dependencies": {
+                "lru-cache": "^10.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/hosted-git-info/node_modules/lru-cache": {
+            "version": "10.2.2",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
+            "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+            "engines": {
+                "node": "14 || >=16.14"
+            }
+        },
         "node_modules/howler": {
             "version": "2.2.4",
             "resolved": "https://registry.npmjs.org/howler/-/howler-2.2.4.tgz",
@@ -21240,6 +22067,12 @@
                 "util-deprecate": "~1.0.1"
             }
         },
+        "node_modules/hpack.js/node_modules/readable-stream/node_modules/core-util-is": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+            "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+            "dev": true
+        },
         "node_modules/hpack.js/node_modules/safe-buffer": {
             "version": "5.1.2",
             "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -21379,6 +22212,18 @@
                 }
             }
         },
+        "node_modules/html2canvas": {
+            "version": "1.4.1",
+            "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
+            "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+            "dependencies": {
+                "css-line-break": "^2.1.0",
+                "text-segmentation": "^1.0.3"
+            },
+            "engines": {
+                "node": ">=8.0.0"
+            }
+        },
         "node_modules/htmlparser2": {
             "version": "8.0.2",
             "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
@@ -21456,7 +22301,6 @@
             "version": "7.0.2",
             "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
             "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
-            "dev": true,
             "dependencies": {
                 "agent-base": "^7.1.0",
                 "debug": "^4.3.4"
@@ -21469,7 +22313,6 @@
             "version": "7.1.1",
             "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
             "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
-            "dev": true,
             "dependencies": {
                 "debug": "^4.3.4"
             },
@@ -21657,6 +22500,17 @@
             "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
             "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="
         },
+        "node_modules/ignore-walk": {
+            "version": "6.0.5",
+            "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz",
+            "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==",
+            "dependencies": {
+                "minimatch": "^9.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/image-data-uri": {
             "version": "2.0.1",
             "resolved": "https://registry.npmjs.org/image-data-uri/-/image-data-uri-2.0.1.tgz",
@@ -21696,6 +22550,7 @@
             "version": "7.2.3",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
             "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -21734,6 +22589,7 @@
             "version": "2.7.1",
             "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
             "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+            "deprecated": "Rimraf versions prior to v4 are no longer supported",
             "dependencies": {
                 "glob": "^7.1.3"
             },
@@ -21899,6 +22755,14 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
+        "node_modules/import-local/node_modules/p-limit/node_modules/p-try": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+            "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+            "engines": {
+                "node": ">=6"
+            }
+        },
         "node_modules/import-local/node_modules/p-locate": {
             "version": "4.1.0",
             "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
@@ -21929,10 +22793,19 @@
                 "node": ">=0.8.19"
             }
         },
+        "node_modules/indent-string": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+            "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+            "engines": {
+                "node": ">=8"
+            }
+        },
         "node_modules/inflight": {
             "version": "1.0.6",
             "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
             "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+            "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
             "dependencies": {
                 "once": "^1.3.0",
                 "wrappy": "1"
@@ -21968,6 +22841,34 @@
             "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
             "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
         },
+        "node_modules/init-package-json": {
+            "version": "6.0.3",
+            "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-6.0.3.tgz",
+            "integrity": "sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==",
+            "dependencies": {
+                "@npmcli/package-json": "^5.0.0",
+                "npm-package-arg": "^11.0.0",
+                "promzard": "^1.0.0",
+                "read": "^3.0.1",
+                "semver": "^7.3.5",
+                "validate-npm-package-license": "^3.0.4",
+                "validate-npm-package-name": "^5.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/init-package-json/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
         "node_modules/inline-style-parser": {
             "version": "0.2.3",
             "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz",
@@ -22107,15 +23008,6 @@
             "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
             "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
         },
-        "node_modules/inspect-function/node_modules/inspect-function": {
-            "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.2.2.tgz",
-            "integrity": "sha512-becs5gzcHwPrlHawscYkyQ/ShiOiosrXPhA5RVZ3qyWH4aWdD52RnMfXq/dwQXciHwiieD8aIPwdIWYv6eL+sQ==",
-            "dependencies": {
-                "split-skip": "0.0.1",
-                "unpack-string": "0.0.2"
-            }
-        },
         "node_modules/inspect-function/node_modules/inspect-parameters-declaration": {
             "version": "0.0.8",
             "resolved": "https://registry.npmjs.org/inspect-parameters-declaration/-/inspect-parameters-declaration-0.0.8.tgz",
@@ -22130,6 +23022,20 @@
                 "inspect-parameters-declaration": "bin/cli.js"
             }
         },
+        "node_modules/inspect-function/node_modules/inspect-parameters-declaration/node_modules/inspect-function": {
+            "version": "0.2.2",
+            "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.2.2.tgz",
+            "integrity": "sha512-becs5gzcHwPrlHawscYkyQ/ShiOiosrXPhA5RVZ3qyWH4aWdD52RnMfXq/dwQXciHwiieD8aIPwdIWYv6eL+sQ==",
+            "dependencies": {
+                "split-skip": "0.0.1",
+                "unpack-string": "0.0.2"
+            }
+        },
+        "node_modules/inspect-function/node_modules/inspect-parameters-declaration/node_modules/inspect-function/node_modules/split-skip": {
+            "version": "0.0.1",
+            "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.1.tgz",
+            "integrity": "sha512-7dkvq+gofI4M8zx4iZnEZ3O1s7FP4Y/iaIDHJh5RyWrs8idcPauFi2OZe3TBi36fLvR2j5z3kSzVtz6IhPdncQ=="
+        },
         "node_modules/inspect-function/node_modules/inspect-parameters-declaration/node_modules/magicli": {
             "version": "0.0.5",
             "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz",
@@ -22280,6 +23186,39 @@
                 "loose-envify": "^1.0.0"
             }
         },
+        "node_modules/ip-address": {
+            "version": "9.0.5",
+            "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+            "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
+            "dependencies": {
+                "jsbn": "1.1.0",
+                "sprintf-js": "^1.1.3"
+            },
+            "engines": {
+                "node": ">= 12"
+            }
+        },
+        "node_modules/ip-address/node_modules/jsbn": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+            "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
+        },
+        "node_modules/ip-address/node_modules/sprintf-js": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+            "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
+        },
+        "node_modules/ip-regex": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz",
+            "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==",
+            "engines": {
+                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/ipaddr.js": {
             "version": "1.9.1",
             "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
@@ -22411,6 +23350,17 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
+        "node_modules/is-cidr": {
+            "version": "5.0.5",
+            "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-5.0.5.tgz",
+            "integrity": "sha512-zDlCvz2v8dBpumuGD4/fc7wzFKY6UYOvFW29JWSstdJoByGN3TKwS0tFA9VWc7DM01VOVOn/DaR84D8Mihp9Rg==",
+            "dependencies": {
+                "cidr-regex": "^4.0.4"
+            },
+            "engines": {
+                "node": ">=14"
+            }
+        },
         "node_modules/is-core-module": {
             "version": "2.13.1",
             "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
@@ -22588,6 +23538,11 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
+        "node_modules/is-lambda": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+            "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="
+        },
         "node_modules/is-map": {
             "version": "2.0.3",
             "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -22926,9 +23881,9 @@
             }
         },
         "node_modules/jackspeak": {
-            "version": "2.3.6",
-            "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
-            "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+            "version": "3.4.0",
+            "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
+            "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
             "dependencies": {
                 "@isaacs/cliui": "^8.0.2"
             },
@@ -23104,6 +24059,7 @@
             "version": "7.2.3",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
             "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -23174,7 +24130,6 @@
         },
         "node_modules/jsdom": {
             "version": "24.0.0",
-            "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz",
             "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==",
             "dev": true,
             "dependencies": {
@@ -23281,6 +24236,14 @@
             "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
             "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
         },
+        "node_modules/json-stringify-nice": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz",
+            "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
         "node_modules/json-stringify-pretty-compact": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz",
@@ -23313,6 +24276,14 @@
                 "graceful-fs": "^4.1.6"
             }
         },
+        "node_modules/jsonparse": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+            "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
+            "engines": [
+                "node >= 0.2.0"
+            ]
+        },
         "node_modules/jsonschema": {
             "version": "1.4.1",
             "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz",
@@ -23402,6 +24373,16 @@
                 "safe-buffer": "~5.1.0"
             }
         },
+        "node_modules/just-diff": {
+            "version": "6.0.2",
+            "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz",
+            "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA=="
+        },
+        "node_modules/just-diff-apply": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz",
+            "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw=="
+        },
         "node_modules/jwa": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
@@ -23568,9 +24549,9 @@
             }
         },
         "node_modules/language-subtag-registry": {
-            "version": "0.3.22",
-            "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
-            "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+            "version": "0.3.23",
+            "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
+            "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
             "dev": true
         },
         "node_modules/language-tags": {
@@ -23630,19 +24611,16 @@
                 "util-deprecate": "~1.0.1"
             }
         },
+        "node_modules/lazystream/node_modules/readable-stream/node_modules/core-util-is": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+            "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+        },
         "node_modules/lazystream/node_modules/safe-buffer": {
             "version": "5.1.2",
             "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
             "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
         },
-        "node_modules/lazystream/node_modules/string_decoder": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-            "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-            "dependencies": {
-                "safe-buffer": "~5.1.0"
-            }
-        },
         "node_modules/leac": {
             "version": "0.6.0",
             "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz",
@@ -23651,15 +24629,6 @@
                 "url": "https://ko-fi.com/killymxi"
             }
         },
-        "node_modules/legacy-swc-helpers": {
-            "name": "@swc/helpers",
-            "version": "0.4.14",
-            "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
-            "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
-            "dependencies": {
-                "tslib": "^2.4.0"
-            }
-        },
         "node_modules/levn": {
             "version": "0.4.1",
             "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -23672,6 +24641,230 @@
                 "node": ">= 0.8.0"
             }
         },
+        "node_modules/libnpmaccess": {
+            "version": "8.0.6",
+            "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.6.tgz",
+            "integrity": "sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==",
+            "dependencies": {
+                "npm-package-arg": "^11.0.2",
+                "npm-registry-fetch": "^17.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/libnpmdiff": {
+            "version": "6.1.2",
+            "resolved": "https://registry.npmjs.org/libnpmdiff/-/libnpmdiff-6.1.2.tgz",
+            "integrity": "sha512-cyGmfI9RsAugdbWWSE9eH7tj5/igcRJHFNksIevwXn6mobu+Kna2uX8uWgmlpu90Bg23nPW2rtSJIbGi7IPhyg==",
+            "dependencies": {
+                "@npmcli/arborist": "^7.5.2",
+                "@npmcli/installed-package-contents": "^2.1.0",
+                "binary-extensions": "^2.3.0",
+                "diff": "^5.1.0",
+                "minimatch": "^9.0.4",
+                "npm-package-arg": "^11.0.2",
+                "pacote": "^18.0.6",
+                "tar": "^6.2.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/libnpmexec": {
+            "version": "8.1.1",
+            "resolved": "https://registry.npmjs.org/libnpmexec/-/libnpmexec-8.1.1.tgz",
+            "integrity": "sha512-KGXr+4WvaMNqU27z0qICbFz2EKzYWrcxWoHKWmSX3A1UyEeuLFc86Pie6cbCs5JeKN8TMVyLBJ9z25PHh458eg==",
+            "dependencies": {
+                "@npmcli/arborist": "^7.5.2",
+                "@npmcli/run-script": "^8.1.0",
+                "ci-info": "^4.0.0",
+                "npm-package-arg": "^11.0.2",
+                "pacote": "^18.0.6",
+                "proc-log": "^4.2.0",
+                "read": "^3.0.1",
+                "read-package-json-fast": "^3.0.2",
+                "semver": "^7.3.7",
+                "walk-up-path": "^3.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/libnpmexec/node_modules/ci-info": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz",
+            "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==",
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/sibiraj-s"
+                }
+            ],
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/libnpmexec/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/libnpmfund": {
+            "version": "5.0.10",
+            "resolved": "https://registry.npmjs.org/libnpmfund/-/libnpmfund-5.0.10.tgz",
+            "integrity": "sha512-WkjxfGC7sdGD7lXYsVNKi3NogROJMTeIFRgFicd0UxEk2eI0CKSC8Tcn5zuazmZse1/Jg0AWHoSgJWpy+0ZXvg==",
+            "dependencies": {
+                "@npmcli/arborist": "^7.5.2"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/libnpmhook": {
+            "version": "10.0.5",
+            "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-10.0.5.tgz",
+            "integrity": "sha512-XulT+N/s3o9oFlIq6pGRv3OG2qR1NVRbVQOKLchycDwyf16RZA3oXbeEgs2H3oE7hRZPUMBZqsalQXMMPal3cQ==",
+            "dependencies": {
+                "aproba": "^2.0.0",
+                "npm-registry-fetch": "^17.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/libnpmorg": {
+            "version": "6.0.6",
+            "resolved": "https://registry.npmjs.org/libnpmorg/-/libnpmorg-6.0.6.tgz",
+            "integrity": "sha512-4MVxsAS4H2z7su/sU0GsrirfBm4ssfqPRSDvoZ8qmRw58kEWJ0qE0cQ2VilRlFgCWKzKPhfoPeyNPyxBTnOusA==",
+            "dependencies": {
+                "aproba": "^2.0.0",
+                "npm-registry-fetch": "^17.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/libnpmpack": {
+            "version": "7.0.2",
+            "resolved": "https://registry.npmjs.org/libnpmpack/-/libnpmpack-7.0.2.tgz",
+            "integrity": "sha512-hVtWu8P7JIl6SHGoVvECRp2Y+5qHeaUhTLzHpMAPi4iG9dFnY9YgitrAAMfUA/qZhLEvuD+KoYJ04mM7chXt+Q==",
+            "dependencies": {
+                "@npmcli/arborist": "^7.5.2",
+                "@npmcli/run-script": "^8.1.0",
+                "npm-package-arg": "^11.0.2",
+                "pacote": "^18.0.6"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/libnpmpublish": {
+            "version": "9.0.8",
+            "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.8.tgz",
+            "integrity": "sha512-sIsWBSAT7ugDPrV72/Js1vYpZBZuOqlMOOZmpXh2Mn5Tjh4Ycv3qYQGHX19g5wdOuQw4wgluSzF/z7EFSO084g==",
+            "dependencies": {
+                "ci-info": "^4.0.0",
+                "normalize-package-data": "^6.0.1",
+                "npm-package-arg": "^11.0.2",
+                "npm-registry-fetch": "^17.0.1",
+                "proc-log": "^4.2.0",
+                "semver": "^7.3.7",
+                "sigstore": "^2.2.0",
+                "ssri": "^10.0.6"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/libnpmpublish/node_modules/ci-info": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz",
+            "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==",
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/sibiraj-s"
+                }
+            ],
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/libnpmpublish/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/libnpmsearch": {
+            "version": "7.0.5",
+            "resolved": "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-7.0.5.tgz",
+            "integrity": "sha512-GSwFPsPfHsOgWM1bTArG+zSmax5ghqCKh81296/rWLw9nBgBWwHj1MJSZ68SfkjAXgMcr34dHzlKJZjRDIjSNQ==",
+            "dependencies": {
+                "npm-registry-fetch": "^17.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/libnpmteam": {
+            "version": "6.0.5",
+            "resolved": "https://registry.npmjs.org/libnpmteam/-/libnpmteam-6.0.5.tgz",
+            "integrity": "sha512-iJW4Cq42GMqMwZEV+Mx8ZLj0Np5kGXQ9P/BAekHjIpYC1v3/vJqbmfJkzkwFvGxEhUotmx+xpLChZCDJ7c3rxA==",
+            "dependencies": {
+                "aproba": "^2.0.0",
+                "npm-registry-fetch": "^17.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/libnpmversion": {
+            "version": "6.0.2",
+            "resolved": "https://registry.npmjs.org/libnpmversion/-/libnpmversion-6.0.2.tgz",
+            "integrity": "sha512-rbc4saGNaXeLMvby8Ta5sOgOXQTrYIXxg+MaA7Uy2wMhESb5ugIfkXJPfgMwLOxQ3o+xDFzNhul6KLjsCyV4tA==",
+            "dependencies": {
+                "@npmcli/git": "^5.0.7",
+                "@npmcli/run-script": "^8.1.0",
+                "json-parse-even-better-errors": "^3.0.2",
+                "proc-log": "^4.2.0",
+                "semver": "^7.3.7"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/libnpmversion/node_modules/json-parse-even-better-errors": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
+            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/libnpmversion/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
         "node_modules/lie": {
             "version": "3.3.0",
             "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
@@ -24025,12 +25218,32 @@
             "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
             "dev": true
         },
+        "node_modules/make-fetch-happen": {
+            "version": "13.0.1",
+            "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz",
+            "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==",
+            "dependencies": {
+                "@npmcli/agent": "^2.0.0",
+                "cacache": "^18.0.0",
+                "http-cache-semantics": "^4.1.1",
+                "is-lambda": "^1.0.1",
+                "minipass": "^7.0.2",
+                "minipass-fetch": "^3.0.0",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "negotiator": "^0.6.3",
+                "proc-log": "^4.2.0",
+                "promise-retry": "^2.0.1",
+                "ssri": "^10.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
         "node_modules/mapbox-gl": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-3.3.0.tgz",
-            "integrity": "sha512-cVeAu9PxPTx113AnJAzcSKbBtL5F5EpJ6/NuYgNib9zNduNSoDG2oVX6xK0bAP/VwwVwRh9SEhcyM7nh4GThvQ==",
+            "version": "3.4.0",
+            "integrity": "sha512-QWgL28zg/zuIOHeF8DXPvHy1UHTgO5p4Oy6ifCAHwI9/hoI9/Fruya0yI4HkDtX1OgzTLO6SHO13A781BGJvyw==",
             "dependencies": {
-                "@mapbox/geojson-rewind": "^0.5.2",
                 "@mapbox/jsonlint-lines-primitives": "^2.0.2",
                 "@mapbox/mapbox-gl-supported": "^3.0.0",
                 "@mapbox/point-geometry": "^0.1.0",
@@ -24054,7 +25267,7 @@
                 "rw": "^1.3.3",
                 "serialize-to-js": "^3.1.2",
                 "supercluster": "^8.0.0",
-                "tiny-lru": "^11.2.5",
+                "tiny-lru": "^11.2.6",
                 "tinyqueue": "^2.0.3",
                 "tweakpane": "^4.0.3",
                 "vt-pbf": "^3.1.3"
@@ -24062,7 +25275,6 @@
         },
         "node_modules/markdown-it": {
             "version": "14.1.0",
-            "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
             "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
             "dependencies": {
                 "argparse": "^2.0.1",
@@ -24311,11 +25523,6 @@
                 "@types/unist": "*"
             }
         },
-        "node_modules/mdast-util-gfm-footnote/node_modules/@types/unist": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
-        },
         "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
@@ -24339,6 +25546,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
@@ -24784,6 +25996,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-gfm-footnote/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-gfm-strikethrough": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
@@ -24806,11 +26023,6 @@
                 "@types/unist": "*"
             }
         },
-        "node_modules/mdast-util-gfm-strikethrough/node_modules/@types/unist": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
-        },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
@@ -24834,6 +26046,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
@@ -25279,6 +26496,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-gfm-strikethrough/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-gfm-table": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
@@ -25303,11 +26525,6 @@
                 "@types/unist": "*"
             }
         },
-        "node_modules/mdast-util-gfm-table/node_modules/@types/unist": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
-        },
         "node_modules/mdast-util-gfm-table/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
@@ -25331,6 +26548,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-gfm-table/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
@@ -25776,6 +26998,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-gfm-table/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-gfm-task-list-item": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
@@ -25799,11 +27026,6 @@
                 "@types/unist": "*"
             }
         },
-        "node_modules/mdast-util-gfm-task-list-item/node_modules/@types/unist": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
-        },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
@@ -25827,6 +27049,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
@@ -26272,6 +27499,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-gfm/node_modules/@types/mdast": {
             "version": "4.0.4",
             "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
@@ -26779,15 +28011,10 @@
                 "@types/unist": "*"
             }
         },
-        "node_modules/mdast-util-math/node_modules/@types/unist": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
-        },
         "node_modules/mdast-util-math/node_modules/mdast-util-from-markdown": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
-            "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz",
+            "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "@types/unist": "^3.0.0",
@@ -26807,6 +28034,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-math/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-math/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
@@ -27252,6 +28484,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-math/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-mdx-expression": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz",
@@ -27277,11 +28514,6 @@
                 "@types/unist": "*"
             }
         },
-        "node_modules/mdast-util-mdx-expression/node_modules/@types/unist": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
-        },
         "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
@@ -27305,6 +28537,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
@@ -27750,6 +28987,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-mdx-expression/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-mdx-jsx": {
             "version": "3.1.2",
             "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz",
@@ -28280,11 +29522,6 @@
                 "@types/unist": "*"
             }
         },
-        "node_modules/mdast-util-mdxjs-esm/node_modules/@types/unist": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
-        },
         "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
@@ -28308,6 +29545,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
@@ -28753,6 +29995,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/mdast-util-mdxjs-esm/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/mdast-util-phrasing": {
             "version": "4.1.0",
             "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
@@ -29092,7 +30339,6 @@
         },
         "node_modules/mermaid": {
             "version": "10.9.1",
-            "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.9.1.tgz",
             "integrity": "sha512-Mx45Obds5W1UkW1nv/7dHRsbfMM1aOKA2+Pxs/IGHNonygDHwmng8xTHyS9z4KWVi0rbko8gjiBmuwwXQ7tiNA==",
             "dependencies": {
                 "@braintree/sanitize-url": "^6.0.1",
@@ -30488,11 +31734,11 @@
             ]
         },
         "node_modules/micromatch": {
-            "version": "4.0.5",
-            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-            "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+            "version": "4.0.7",
+            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+            "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
             "dependencies": {
-                "braces": "^3.0.2",
+                "braces": "^3.0.3",
                 "picomatch": "^2.3.1"
             },
             "engines": {
@@ -30585,13 +31831,146 @@
             }
         },
         "node_modules/minipass": {
-            "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz",
-            "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==",
+            "version": "7.1.2",
+            "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+            "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            }
+        },
+        "node_modules/minipass-collect": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz",
+            "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==",
+            "dependencies": {
+                "minipass": "^7.0.3"
+            },
             "engines": {
                 "node": ">=16 || 14 >=14.17"
             }
         },
+        "node_modules/minipass-fetch": {
+            "version": "3.0.5",
+            "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz",
+            "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==",
+            "dependencies": {
+                "minipass": "^7.0.3",
+                "minipass-sized": "^1.0.3",
+                "minizlib": "^2.1.2"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            },
+            "optionalDependencies": {
+                "encoding": "^0.1.13"
+            }
+        },
+        "node_modules/minipass-flush": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+            "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+            "dependencies": {
+                "minipass": "^3.0.0"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/minipass-flush/node_modules/minipass": {
+            "version": "3.3.6",
+            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/minipass-flush/node_modules/yallist": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+        },
+        "node_modules/minipass-json-stream": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz",
+            "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==",
+            "dependencies": {
+                "jsonparse": "^1.3.1",
+                "minipass": "^3.0.0"
+            }
+        },
+        "node_modules/minipass-json-stream/node_modules/minipass": {
+            "version": "3.3.6",
+            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/minipass-json-stream/node_modules/yallist": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+        },
+        "node_modules/minipass-pipeline": {
+            "version": "1.2.4",
+            "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+            "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+            "dependencies": {
+                "minipass": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/minipass-pipeline/node_modules/minipass": {
+            "version": "3.3.6",
+            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/minipass-pipeline/node_modules/yallist": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+        },
+        "node_modules/minipass-sized": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+            "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+            "dependencies": {
+                "minipass": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/minipass-sized/node_modules/minipass": {
+            "version": "3.3.6",
+            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/minipass-sized/node_modules/yallist": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+        },
         "node_modules/minizlib": {
             "version": "2.1.2",
             "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
@@ -30774,10 +32153,20 @@
                 "fsevents": "~2.3.2"
             }
         },
+        "node_modules/mocha/node_modules/diff": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+            "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.3.1"
+            }
+        },
         "node_modules/mocha/node_modules/glob": {
             "version": "8.1.0",
             "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
             "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dev": true,
             "dependencies": {
                 "fs.realpath": "^1.0.0",
@@ -30869,9 +32258,8 @@
             }
         },
         "node_modules/mongodb": {
-            "version": "6.6.2",
-            "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz",
-            "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==",
+            "version": "6.7.0",
+            "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==",
             "dependencies": {
                 "@mongodb-js/saslprep": "^1.1.5",
                 "bson": "^6.7.0",
@@ -30947,7 +32335,6 @@
         },
         "node_modules/mongoose": {
             "version": "8.4.0",
-            "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.0.tgz",
             "integrity": "sha512-fgqRMwVEP1qgRYfh+tUe2YBBFnPO35FIg2lfFH+w9IhRGg1/ataWGIqvf/MjwM29cZ60D5vSnqtN2b8Qp0sOZA==",
             "dependencies": {
                 "bson": "^6.7.0",
@@ -30966,6 +32353,51 @@
                 "url": "https://opencollective.com/mongoose"
             }
         },
+        "node_modules/mongoose/node_modules/mongodb": {
+            "version": "6.6.2",
+            "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz",
+            "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==",
+            "dependencies": {
+                "@mongodb-js/saslprep": "^1.1.5",
+                "bson": "^6.7.0",
+                "mongodb-connection-string-url": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=16.20.1"
+            },
+            "peerDependencies": {
+                "@aws-sdk/credential-providers": "^3.188.0",
+                "@mongodb-js/zstd": "^1.1.0",
+                "gcp-metadata": "^5.2.0",
+                "kerberos": "^2.0.1",
+                "mongodb-client-encryption": ">=6.0.0 <7",
+                "snappy": "^7.2.2",
+                "socks": "^2.7.1"
+            },
+            "peerDependenciesMeta": {
+                "@aws-sdk/credential-providers": {
+                    "optional": true
+                },
+                "@mongodb-js/zstd": {
+                    "optional": true
+                },
+                "gcp-metadata": {
+                    "optional": true
+                },
+                "kerberos": {
+                    "optional": true
+                },
+                "mongodb-client-encryption": {
+                    "optional": true
+                },
+                "snappy": {
+                    "optional": true
+                },
+                "socks": {
+                    "optional": true
+                }
+            }
+        },
         "node_modules/mongoose/node_modules/ms": {
             "version": "2.1.3",
             "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -31237,6 +32669,92 @@
                 "node": ">= 6.13.0"
             }
         },
+        "node_modules/node-gyp": {
+            "version": "10.1.0",
+            "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz",
+            "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==",
+            "dependencies": {
+                "env-paths": "^2.2.0",
+                "exponential-backoff": "^3.1.1",
+                "glob": "^10.3.10",
+                "graceful-fs": "^4.2.6",
+                "make-fetch-happen": "^13.0.0",
+                "nopt": "^7.0.0",
+                "proc-log": "^3.0.0",
+                "semver": "^7.3.5",
+                "tar": "^6.1.2",
+                "which": "^4.0.0"
+            },
+            "bin": {
+                "node-gyp": "bin/node-gyp.js"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/node-gyp/node_modules/abbrev": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+            "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/node-gyp/node_modules/isexe": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+            "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+            "engines": {
+                "node": ">=16"
+            }
+        },
+        "node_modules/node-gyp/node_modules/nopt": {
+            "version": "7.2.1",
+            "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+            "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+            "dependencies": {
+                "abbrev": "^2.0.0"
+            },
+            "bin": {
+                "nopt": "bin/nopt.js"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/node-gyp/node_modules/proc-log": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz",
+            "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/node-gyp/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/node-gyp/node_modules/which": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+            "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+            "dependencies": {
+                "isexe": "^3.1.1"
+            },
+            "bin": {
+                "node-which": "bin/which.js"
+            },
+            "engines": {
+                "node": "^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/node-releases": {
             "version": "2.0.14",
             "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
@@ -31264,7 +32782,6 @@
         },
         "node_modules/nodemon": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz",
             "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==",
             "dependencies": {
                 "chokidar": "^3.5.2",
@@ -31339,6 +32856,31 @@
                 "node": ">=6"
             }
         },
+        "node_modules/normalize-package-data": {
+            "version": "6.0.1",
+            "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz",
+            "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==",
+            "dependencies": {
+                "hosted-git-info": "^7.0.0",
+                "is-core-module": "^2.8.1",
+                "semver": "^7.3.5",
+                "validate-npm-package-license": "^3.0.4"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/normalize-package-data/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
         "node_modules/normalize-path": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -31360,7 +32902,6 @@
         },
         "node_modules/npm": {
             "version": "10.8.0",
-            "resolved": "https://registry.npmjs.org/npm/-/npm-10.8.0.tgz",
             "integrity": "sha512-wh93uRczgp7HDnPMiLXcCkv2hagdJS0zJ9KT/31d0FoXP02+qgN2AOwpaW85fxRWkinl2rELfPw+CjBXW48/jQ==",
             "bundleDependencies": [
                 "@isaacs/string-locale-compare",
@@ -31510,2257 +33051,463 @@
                 "node": "^18.17.0 || >=20.5.0"
             }
         },
-        "node_modules/npm-run-path": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
-            "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
-            "dev": true,
-            "dependencies": {
-                "path-key": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/@isaacs/cliui": {
-            "version": "8.0.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "string-width": "^5.1.2",
-                "string-width-cjs": "npm:string-width@^4.2.0",
-                "strip-ansi": "^7.0.1",
-                "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
-                "wrap-ansi": "^8.1.0",
-                "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
-            },
-            "engines": {
-                "node": ">=12"
-            }
-        },
-        "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": {
-            "version": "6.0.1",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-regex?sponsor=1"
-            }
-        },
-        "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": {
-            "version": "9.2.2",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": {
-            "version": "5.1.2",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "eastasianwidth": "^0.2.0",
-                "emoji-regex": "^9.2.2",
-                "strip-ansi": "^7.0.1"
-            },
-            "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": {
-            "version": "7.1.0",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "ansi-regex": "^6.0.1"
-            },
-            "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/strip-ansi?sponsor=1"
-            }
-        },
-        "node_modules/npm/node_modules/@isaacs/string-locale-compare": {
-            "version": "1.1.0",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/@npmcli/agent": {
-            "version": "2.2.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "agent-base": "^7.1.0",
-                "http-proxy-agent": "^7.0.0",
-                "https-proxy-agent": "^7.0.1",
-                "lru-cache": "^10.0.1",
-                "socks-proxy-agent": "^8.0.3"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@npmcli/arborist": {
-            "version": "7.5.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@isaacs/string-locale-compare": "^1.1.0",
-                "@npmcli/fs": "^3.1.1",
-                "@npmcli/installed-package-contents": "^2.1.0",
-                "@npmcli/map-workspaces": "^3.0.2",
-                "@npmcli/metavuln-calculator": "^7.1.1",
-                "@npmcli/name-from-folder": "^2.0.0",
-                "@npmcli/node-gyp": "^3.0.0",
-                "@npmcli/package-json": "^5.1.0",
-                "@npmcli/query": "^3.1.0",
-                "@npmcli/redact": "^2.0.0",
-                "@npmcli/run-script": "^8.1.0",
-                "bin-links": "^4.0.4",
-                "cacache": "^18.0.3",
-                "common-ancestor-path": "^1.0.1",
-                "hosted-git-info": "^7.0.2",
-                "json-parse-even-better-errors": "^3.0.2",
-                "json-stringify-nice": "^1.1.4",
-                "lru-cache": "^10.2.2",
-                "minimatch": "^9.0.4",
-                "nopt": "^7.2.1",
-                "npm-install-checks": "^6.2.0",
-                "npm-package-arg": "^11.0.2",
-                "npm-pick-manifest": "^9.0.1",
-                "npm-registry-fetch": "^17.0.1",
-                "pacote": "^18.0.6",
-                "parse-conflict-json": "^3.0.0",
-                "proc-log": "^4.2.0",
-                "proggy": "^2.0.0",
-                "promise-all-reject-late": "^1.0.0",
-                "promise-call-limit": "^3.0.1",
-                "read-package-json-fast": "^3.0.2",
-                "semver": "^7.3.7",
-                "ssri": "^10.0.6",
-                "treeverse": "^3.0.0",
-                "walk-up-path": "^3.0.1"
-            },
-            "bin": {
-                "arborist": "bin/index.js"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@npmcli/config": {
-            "version": "8.3.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/map-workspaces": "^3.0.2",
-                "ci-info": "^4.0.0",
-                "ini": "^4.1.2",
-                "nopt": "^7.2.1",
-                "proc-log": "^4.2.0",
-                "read-package-json-fast": "^3.0.2",
-                "semver": "^7.3.5",
-                "walk-up-path": "^3.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@npmcli/fs": {
-            "version": "3.1.1",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "semver": "^7.3.5"
-            },
+        "node_modules/npm-audit-report": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-5.0.0.tgz",
+            "integrity": "sha512-EkXrzat7zERmUhHaoren1YhTxFwsOu5jypE84k6632SXTHcQE1z8V51GC6GVZt8LxkC+tbBcKMUBZAgk8SUSbw==",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/@npmcli/git": {
-            "version": "5.0.7",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/promise-spawn": "^7.0.0",
-                "lru-cache": "^10.0.1",
-                "npm-pick-manifest": "^9.0.0",
-                "proc-log": "^4.0.0",
-                "promise-inflight": "^1.0.1",
-                "promise-retry": "^2.0.1",
-                "semver": "^7.3.5",
-                "which": "^4.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@npmcli/installed-package-contents": {
-            "version": "2.1.0",
-            "inBundle": true,
-            "license": "ISC",
+        "node_modules/npm-bundled": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz",
+            "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==",
             "dependencies": {
-                "npm-bundled": "^3.0.0",
                 "npm-normalize-package-bin": "^3.0.0"
             },
-            "bin": {
-                "installed-package-contents": "bin/index.js"
-            },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/@npmcli/map-workspaces": {
-            "version": "3.0.6",
-            "inBundle": true,
-            "license": "ISC",
+        "node_modules/npm-install-checks": {
+            "version": "6.3.0",
+            "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz",
+            "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==",
             "dependencies": {
-                "@npmcli/name-from-folder": "^2.0.0",
-                "glob": "^10.2.2",
-                "minimatch": "^9.0.0",
-                "read-package-json-fast": "^3.0.0"
+                "semver": "^7.1.1"
             },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/@npmcli/metavuln-calculator": {
-            "version": "7.1.1",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "cacache": "^18.0.0",
-                "json-parse-even-better-errors": "^3.0.0",
-                "pacote": "^18.0.0",
-                "proc-log": "^4.1.0",
-                "semver": "^7.3.5"
+        "node_modules/npm-install-checks/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@npmcli/name-from-folder": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=10"
             }
         },
-        "node_modules/npm/node_modules/@npmcli/node-gyp": {
-            "version": "3.0.0",
-            "inBundle": true,
-            "license": "ISC",
+        "node_modules/npm-normalize-package-bin": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz",
+            "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/@npmcli/package-json": {
-            "version": "5.1.0",
-            "inBundle": true,
-            "license": "ISC",
+        "node_modules/npm-package-arg": {
+            "version": "11.0.2",
+            "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz",
+            "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==",
             "dependencies": {
-                "@npmcli/git": "^5.0.0",
-                "glob": "^10.2.2",
                 "hosted-git-info": "^7.0.0",
-                "json-parse-even-better-errors": "^3.0.0",
-                "normalize-package-data": "^6.0.0",
                 "proc-log": "^4.0.0",
-                "semver": "^7.5.3"
+                "semver": "^7.3.5",
+                "validate-npm-package-name": "^5.0.0"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/@npmcli/promise-spawn": {
-            "version": "7.0.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "which": "^4.0.0"
+        "node_modules/npm-package-arg/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": ">=10"
             }
         },
-        "node_modules/npm/node_modules/@npmcli/query": {
-            "version": "3.1.0",
-            "inBundle": true,
-            "license": "ISC",
+        "node_modules/npm-packlist": {
+            "version": "8.0.2",
+            "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz",
+            "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==",
             "dependencies": {
-                "postcss-selector-parser": "^6.0.10"
+                "ignore-walk": "^6.0.4"
             },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/@npmcli/redact": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@npmcli/run-script": {
-            "version": "8.1.0",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/node-gyp": "^3.0.0",
-                "@npmcli/package-json": "^5.0.0",
-                "@npmcli/promise-spawn": "^7.0.0",
-                "node-gyp": "^10.0.0",
-                "proc-log": "^4.0.0",
-                "which": "^4.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@pkgjs/parseargs": {
-            "version": "0.11.0",
-            "inBundle": true,
-            "license": "MIT",
-            "optional": true,
-            "engines": {
-                "node": ">=14"
-            }
-        },
-        "node_modules/npm/node_modules/@sigstore/bundle": {
-            "version": "2.3.1",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "dependencies": {
-                "@sigstore/protobuf-specs": "^0.3.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@sigstore/core": {
-            "version": "1.1.0",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@sigstore/protobuf-specs": {
-            "version": "0.3.2",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@sigstore/sign": {
-            "version": "2.3.1",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "dependencies": {
-                "@sigstore/bundle": "^2.3.0",
-                "@sigstore/core": "^1.0.0",
-                "@sigstore/protobuf-specs": "^0.3.1",
-                "make-fetch-happen": "^13.0.1",
-                "proc-log": "^4.2.0",
-                "promise-retry": "^2.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@sigstore/tuf": {
-            "version": "2.3.3",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "dependencies": {
-                "@sigstore/protobuf-specs": "^0.3.0",
-                "tuf-js": "^2.2.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@sigstore/verify": {
-            "version": "1.2.0",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "dependencies": {
-                "@sigstore/bundle": "^2.3.1",
-                "@sigstore/core": "^1.1.0",
-                "@sigstore/protobuf-specs": "^0.3.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@tufjs/canonical-json": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/@tufjs/models": {
-            "version": "2.0.1",
-            "inBundle": true,
-            "license": "MIT",
+        "node_modules/npm-pick-manifest": {
+            "version": "9.0.1",
+            "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz",
+            "integrity": "sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==",
             "dependencies": {
-                "@tufjs/canonical-json": "2.0.0",
-                "minimatch": "^9.0.4"
+                "npm-install-checks": "^6.0.0",
+                "npm-normalize-package-bin": "^3.0.0",
+                "npm-package-arg": "^11.0.0",
+                "semver": "^7.3.5"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/abbrev": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/agent-base": {
-            "version": "7.1.1",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "debug": "^4.3.4"
+        "node_modules/npm-pick-manifest/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
             },
             "engines": {
-                "node": ">= 14"
+                "node": ">=10"
             }
         },
-        "node_modules/npm/node_modules/aggregate-error": {
-            "version": "3.1.0",
-            "inBundle": true,
-            "license": "MIT",
+        "node_modules/npm-profile": {
+            "version": "10.0.0",
+            "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-10.0.0.tgz",
+            "integrity": "sha512-DXnge3nHYnEnPxmVd/kPmgcXKXwVUqFihGnU+EJUiu5mIOs3awq6zEm0rRp3kSQNhFsoqdLu8L1TIfRyeBOCog==",
             "dependencies": {
-                "clean-stack": "^2.0.0",
-                "indent-string": "^4.0.0"
+                "npm-registry-fetch": "^17.0.1",
+                "proc-log": "^4.0.0"
             },
             "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/ansi-regex": {
-            "version": "5.0.1",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/ansi-styles": {
-            "version": "6.2.1",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+                "node": ">=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/aproba": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/archy": {
-            "version": "1.0.0",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/balanced-match": {
-            "version": "1.0.2",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/bin-links": {
-            "version": "4.0.4",
-            "inBundle": true,
-            "license": "ISC",
+        "node_modules/npm-registry-fetch": {
+            "version": "17.0.1",
+            "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.0.1.tgz",
+            "integrity": "sha512-fLu9MTdZTlJAHUek/VLklE6EpIiP3VZpTiuN7OOMCt2Sd67NCpSEetMaxHHEZiZxllp8ZLsUpvbEszqTFEc+wA==",
             "dependencies": {
-                "cmd-shim": "^6.0.0",
-                "npm-normalize-package-bin": "^3.0.0",
-                "read-cmd-shim": "^4.0.0",
-                "write-file-atomic": "^5.0.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/binary-extensions": {
-            "version": "2.3.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/npm/node_modules/brace-expansion": {
-            "version": "2.0.1",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "balanced-match": "^1.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/cacache": {
-            "version": "18.0.3",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/fs": "^3.1.0",
-                "fs-minipass": "^3.0.0",
-                "glob": "^10.2.2",
-                "lru-cache": "^10.0.1",
-                "minipass": "^7.0.3",
-                "minipass-collect": "^2.0.1",
-                "minipass-flush": "^1.0.5",
-                "minipass-pipeline": "^1.2.4",
-                "p-map": "^4.0.0",
-                "ssri": "^10.0.0",
-                "tar": "^6.1.11",
-                "unique-filename": "^3.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/chalk": {
-            "version": "5.3.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": "^12.17.0 || ^14.13 || >=16.0.0"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/chalk?sponsor=1"
-            }
-        },
-        "node_modules/npm/node_modules/chownr": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/npm/node_modules/ci-info": {
-            "version": "4.0.0",
-            "funding": [
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/sibiraj-s"
-                }
-            ],
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/cidr-regex": {
-            "version": "4.0.5",
-            "inBundle": true,
-            "license": "BSD-2-Clause",
-            "dependencies": {
-                "ip-regex": "^5.0.0"
-            },
-            "engines": {
-                "node": ">=14"
-            }
-        },
-        "node_modules/npm/node_modules/clean-stack": {
-            "version": "2.2.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/npm/node_modules/cli-columns": {
-            "version": "4.0.0",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "string-width": "^4.2.3",
-                "strip-ansi": "^6.0.1"
-            },
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/npm/node_modules/cmd-shim": {
-            "version": "6.0.3",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/color-convert": {
-            "version": "2.0.1",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/color-name": {
-            "version": "1.1.4",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/common-ancestor-path": {
-            "version": "1.0.1",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/cross-spawn": {
-            "version": "7.0.3",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "path-key": "^3.1.0",
-                "shebang-command": "^2.0.0",
-                "which": "^2.0.1"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/npm/node_modules/cross-spawn/node_modules/which": {
-            "version": "2.0.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "isexe": "^2.0.0"
-            },
-            "bin": {
-                "node-which": "bin/node-which"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/npm/node_modules/cssesc": {
-            "version": "3.0.0",
-            "inBundle": true,
-            "license": "MIT",
-            "bin": {
-                "cssesc": "bin/cssesc"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/npm/node_modules/debug": {
-            "version": "4.3.4",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "ms": "2.1.2"
-            },
-            "engines": {
-                "node": ">=6.0"
-            },
-            "peerDependenciesMeta": {
-                "supports-color": {
-                    "optional": true
-                }
-            }
-        },
-        "node_modules/npm/node_modules/debug/node_modules/ms": {
-            "version": "2.1.2",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/diff": {
-            "version": "5.2.0",
-            "inBundle": true,
-            "license": "BSD-3-Clause",
-            "engines": {
-                "node": ">=0.3.1"
-            }
-        },
-        "node_modules/npm/node_modules/eastasianwidth": {
-            "version": "0.2.0",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/emoji-regex": {
-            "version": "8.0.0",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/encoding": {
-            "version": "0.1.13",
-            "inBundle": true,
-            "license": "MIT",
-            "optional": true,
-            "dependencies": {
-                "iconv-lite": "^0.6.2"
-            }
-        },
-        "node_modules/npm/node_modules/env-paths": {
-            "version": "2.2.1",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/npm/node_modules/err-code": {
-            "version": "2.0.3",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/exponential-backoff": {
-            "version": "3.1.1",
-            "inBundle": true,
-            "license": "Apache-2.0"
-        },
-        "node_modules/npm/node_modules/fastest-levenshtein": {
-            "version": "1.0.16",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 4.9.1"
-            }
-        },
-        "node_modules/npm/node_modules/foreground-child": {
-            "version": "3.1.1",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "cross-spawn": "^7.0.0",
-                "signal-exit": "^4.0.1"
-            },
-            "engines": {
-                "node": ">=14"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/npm/node_modules/fs-minipass": {
-            "version": "3.0.3",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^7.0.3"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/function-bind": {
-            "version": "1.1.2",
-            "inBundle": true,
-            "license": "MIT",
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/npm/node_modules/glob": {
-            "version": "10.3.15",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "foreground-child": "^3.1.0",
-                "jackspeak": "^2.3.6",
-                "minimatch": "^9.0.1",
-                "minipass": "^7.0.4",
-                "path-scurry": "^1.11.0"
-            },
-            "bin": {
-                "glob": "dist/esm/bin.mjs"
-            },
-            "engines": {
-                "node": ">=16 || 14 >=14.18"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/npm/node_modules/graceful-fs": {
-            "version": "4.2.11",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/hasown": {
-            "version": "2.0.2",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "function-bind": "^1.1.2"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            }
-        },
-        "node_modules/npm/node_modules/hosted-git-info": {
-            "version": "7.0.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "lru-cache": "^10.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/http-cache-semantics": {
-            "version": "4.1.1",
-            "inBundle": true,
-            "license": "BSD-2-Clause"
-        },
-        "node_modules/npm/node_modules/http-proxy-agent": {
-            "version": "7.0.2",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "agent-base": "^7.1.0",
-                "debug": "^4.3.4"
-            },
-            "engines": {
-                "node": ">= 14"
-            }
-        },
-        "node_modules/npm/node_modules/https-proxy-agent": {
-            "version": "7.0.4",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "agent-base": "^7.0.2",
-                "debug": "4"
-            },
-            "engines": {
-                "node": ">= 14"
-            }
-        },
-        "node_modules/npm/node_modules/iconv-lite": {
-            "version": "0.6.3",
-            "inBundle": true,
-            "license": "MIT",
-            "optional": true,
-            "dependencies": {
-                "safer-buffer": ">= 2.1.2 < 3.0.0"
-            },
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/npm/node_modules/ignore-walk": {
-            "version": "6.0.5",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "minimatch": "^9.0.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/imurmurhash": {
-            "version": "0.1.4",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=0.8.19"
-            }
-        },
-        "node_modules/npm/node_modules/indent-string": {
-            "version": "4.0.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/ini": {
-            "version": "4.1.2",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/init-package-json": {
-            "version": "6.0.3",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/package-json": "^5.0.0",
-                "npm-package-arg": "^11.0.0",
-                "promzard": "^1.0.0",
-                "read": "^3.0.1",
-                "semver": "^7.3.5",
-                "validate-npm-package-license": "^3.0.4",
-                "validate-npm-package-name": "^5.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/ip-address": {
-            "version": "9.0.5",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "jsbn": "1.1.0",
-                "sprintf-js": "^1.1.3"
-            },
-            "engines": {
-                "node": ">= 12"
-            }
-        },
-        "node_modules/npm/node_modules/ip-regex": {
-            "version": "5.0.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/npm/node_modules/is-cidr": {
-            "version": "5.0.5",
-            "inBundle": true,
-            "license": "BSD-2-Clause",
-            "dependencies": {
-                "cidr-regex": "^4.0.4"
-            },
-            "engines": {
-                "node": ">=14"
-            }
-        },
-        "node_modules/npm/node_modules/is-core-module": {
-            "version": "2.13.1",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "hasown": "^2.0.0"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/npm/node_modules/is-fullwidth-code-point": {
-            "version": "3.0.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/is-lambda": {
-            "version": "1.0.1",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/isexe": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/jackspeak": {
-            "version": "2.3.6",
-            "inBundle": true,
-            "license": "BlueOak-1.0.0",
-            "dependencies": {
-                "@isaacs/cliui": "^8.0.2"
-            },
-            "engines": {
-                "node": ">=14"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            },
-            "optionalDependencies": {
-                "@pkgjs/parseargs": "^0.11.0"
-            }
-        },
-        "node_modules/npm/node_modules/jsbn": {
-            "version": "1.1.0",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/json-parse-even-better-errors": {
-            "version": "3.0.2",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/json-stringify-nice": {
-            "version": "1.1.4",
-            "inBundle": true,
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/npm/node_modules/jsonparse": {
-            "version": "1.3.1",
-            "engines": [
-                "node >= 0.2.0"
-            ],
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/just-diff": {
-            "version": "6.0.2",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/just-diff-apply": {
-            "version": "5.5.0",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/libnpmaccess": {
-            "version": "8.0.6",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "npm-package-arg": "^11.0.2",
-                "npm-registry-fetch": "^17.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmdiff": {
-            "version": "6.1.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/arborist": "^7.5.2",
-                "@npmcli/installed-package-contents": "^2.1.0",
-                "binary-extensions": "^2.3.0",
-                "diff": "^5.1.0",
-                "minimatch": "^9.0.4",
-                "npm-package-arg": "^11.0.2",
-                "pacote": "^18.0.6",
-                "tar": "^6.2.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmexec": {
-            "version": "8.1.1",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/arborist": "^7.5.2",
-                "@npmcli/run-script": "^8.1.0",
-                "ci-info": "^4.0.0",
-                "npm-package-arg": "^11.0.2",
-                "pacote": "^18.0.6",
-                "proc-log": "^4.2.0",
-                "read": "^3.0.1",
-                "read-package-json-fast": "^3.0.2",
-                "semver": "^7.3.7",
-                "walk-up-path": "^3.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmfund": {
-            "version": "5.0.10",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/arborist": "^7.5.2"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmhook": {
-            "version": "10.0.5",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "aproba": "^2.0.0",
-                "npm-registry-fetch": "^17.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmorg": {
-            "version": "6.0.6",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "aproba": "^2.0.0",
-                "npm-registry-fetch": "^17.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmpack": {
-            "version": "7.0.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/arborist": "^7.5.2",
-                "@npmcli/run-script": "^8.1.0",
-                "npm-package-arg": "^11.0.2",
-                "pacote": "^18.0.6"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmpublish": {
-            "version": "9.0.8",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "ci-info": "^4.0.0",
-                "normalize-package-data": "^6.0.1",
-                "npm-package-arg": "^11.0.2",
-                "npm-registry-fetch": "^17.0.1",
-                "proc-log": "^4.2.0",
-                "semver": "^7.3.7",
-                "sigstore": "^2.2.0",
-                "ssri": "^10.0.6"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmsearch": {
-            "version": "7.0.5",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "npm-registry-fetch": "^17.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmteam": {
-            "version": "6.0.5",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "aproba": "^2.0.0",
-                "npm-registry-fetch": "^17.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmversion": {
-            "version": "6.0.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/git": "^5.0.7",
-                "@npmcli/run-script": "^8.1.0",
-                "json-parse-even-better-errors": "^3.0.2",
-                "proc-log": "^4.2.0",
-                "semver": "^7.3.7"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/lru-cache": {
-            "version": "10.2.2",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "14 || >=16.14"
-            }
-        },
-        "node_modules/npm/node_modules/make-fetch-happen": {
-            "version": "13.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/agent": "^2.0.0",
-                "cacache": "^18.0.0",
-                "http-cache-semantics": "^4.1.1",
-                "is-lambda": "^1.0.1",
-                "minipass": "^7.0.2",
-                "minipass-fetch": "^3.0.0",
-                "minipass-flush": "^1.0.5",
-                "minipass-pipeline": "^1.2.4",
-                "negotiator": "^0.6.3",
-                "proc-log": "^4.2.0",
-                "promise-retry": "^2.0.1",
-                "ssri": "^10.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/minimatch": {
-            "version": "9.0.4",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "brace-expansion": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=16 || 14 >=14.17"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/npm/node_modules/minipass": {
-            "version": "7.1.1",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": ">=16 || 14 >=14.17"
-            }
-        },
-        "node_modules/npm/node_modules/minipass-collect": {
-            "version": "2.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^7.0.3"
-            },
-            "engines": {
-                "node": ">=16 || 14 >=14.17"
-            }
-        },
-        "node_modules/npm/node_modules/minipass-fetch": {
-            "version": "3.0.5",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "minipass": "^7.0.3",
-                "minipass-sized": "^1.0.3",
-                "minizlib": "^2.1.2"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            },
-            "optionalDependencies": {
-                "encoding": "^0.1.13"
-            }
-        },
-        "node_modules/npm/node_modules/minipass-flush": {
-            "version": "1.0.5",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^3.0.0"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": {
-            "version": "3.3.6",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "yallist": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/minipass-json-stream": {
-            "version": "1.0.1",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "jsonparse": "^1.3.1",
-                "minipass": "^3.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": {
-            "version": "3.3.6",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "yallist": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/minipass-pipeline": {
-            "version": "1.2.4",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": {
-            "version": "3.3.6",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "yallist": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/minipass-sized": {
-            "version": "1.0.3",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": {
-            "version": "3.3.6",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "yallist": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/minizlib": {
-            "version": "2.1.2",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "minipass": "^3.0.0",
-                "yallist": "^4.0.0"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/npm/node_modules/minizlib/node_modules/minipass": {
-            "version": "3.3.6",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "yallist": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/mkdirp": {
-            "version": "1.0.4",
-            "inBundle": true,
-            "license": "MIT",
-            "bin": {
-                "mkdirp": "bin/cmd.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/npm/node_modules/ms": {
-            "version": "2.1.3",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/mute-stream": {
-            "version": "1.0.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/negotiator": {
-            "version": "0.6.3",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 0.6"
-            }
-        },
-        "node_modules/npm/node_modules/node-gyp": {
-            "version": "10.1.0",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "env-paths": "^2.2.0",
-                "exponential-backoff": "^3.1.1",
-                "glob": "^10.3.10",
-                "graceful-fs": "^4.2.6",
-                "make-fetch-happen": "^13.0.0",
-                "nopt": "^7.0.0",
-                "proc-log": "^3.0.0",
-                "semver": "^7.3.5",
-                "tar": "^6.1.2",
-                "which": "^4.0.0"
-            },
-            "bin": {
-                "node-gyp": "bin/node-gyp.js"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/node-gyp/node_modules/proc-log": {
-            "version": "3.0.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/nopt": {
-            "version": "7.2.1",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "abbrev": "^2.0.0"
-            },
-            "bin": {
-                "nopt": "bin/nopt.js"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/normalize-package-data": {
-            "version": "6.0.1",
-            "inBundle": true,
-            "license": "BSD-2-Clause",
-            "dependencies": {
-                "hosted-git-info": "^7.0.0",
-                "is-core-module": "^2.8.1",
-                "semver": "^7.3.5",
-                "validate-npm-package-license": "^3.0.4"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-audit-report": {
-            "version": "5.0.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-bundled": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "npm-normalize-package-bin": "^3.0.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-install-checks": {
-            "version": "6.3.0",
-            "inBundle": true,
-            "license": "BSD-2-Clause",
-            "dependencies": {
-                "semver": "^7.1.1"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-normalize-package-bin": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-package-arg": {
-            "version": "11.0.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "hosted-git-info": "^7.0.0",
-                "proc-log": "^4.0.0",
-                "semver": "^7.3.5",
-                "validate-npm-package-name": "^5.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-packlist": {
-            "version": "8.0.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "ignore-walk": "^6.0.4"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-pick-manifest": {
-            "version": "9.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "npm-install-checks": "^6.0.0",
-                "npm-normalize-package-bin": "^3.0.0",
-                "npm-package-arg": "^11.0.0",
-                "semver": "^7.3.5"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-profile": {
-            "version": "10.0.0",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "npm-registry-fetch": "^17.0.1",
-                "proc-log": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-registry-fetch": {
-            "version": "17.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/redact": "^2.0.0",
-                "make-fetch-happen": "^13.0.0",
-                "minipass": "^7.0.2",
-                "minipass-fetch": "^3.0.0",
-                "minipass-json-stream": "^1.0.1",
-                "minizlib": "^2.1.2",
-                "npm-package-arg": "^11.0.0",
-                "proc-log": "^4.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-user-validate": {
-            "version": "2.0.1",
-            "inBundle": true,
-            "license": "BSD-2-Clause",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/p-map": {
-            "version": "4.0.0",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "aggregate-error": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/npm/node_modules/pacote": {
-            "version": "18.0.6",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/git": "^5.0.0",
-                "@npmcli/installed-package-contents": "^2.0.1",
-                "@npmcli/package-json": "^5.1.0",
-                "@npmcli/promise-spawn": "^7.0.0",
-                "@npmcli/run-script": "^8.0.0",
-                "cacache": "^18.0.0",
-                "fs-minipass": "^3.0.0",
-                "minipass": "^7.0.2",
-                "npm-package-arg": "^11.0.0",
-                "npm-packlist": "^8.0.0",
-                "npm-pick-manifest": "^9.0.0",
-                "npm-registry-fetch": "^17.0.0",
-                "proc-log": "^4.0.0",
-                "promise-retry": "^2.0.1",
-                "sigstore": "^2.2.0",
-                "ssri": "^10.0.0",
-                "tar": "^6.1.11"
-            },
-            "bin": {
-                "pacote": "bin/index.js"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/parse-conflict-json": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "json-parse-even-better-errors": "^3.0.0",
-                "just-diff": "^6.0.0",
-                "just-diff-apply": "^5.2.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/path-key": {
-            "version": "3.1.1",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/path-scurry": {
-            "version": "1.11.1",
-            "inBundle": true,
-            "license": "BlueOak-1.0.0",
-            "dependencies": {
-                "lru-cache": "^10.2.0",
-                "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
-            },
-            "engines": {
-                "node": ">=16 || 14 >=14.18"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/npm/node_modules/postcss-selector-parser": {
-            "version": "6.0.16",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "cssesc": "^3.0.0",
-                "util-deprecate": "^1.0.2"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/npm/node_modules/proc-log": {
-            "version": "4.2.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/proggy": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/promise-all-reject-late": {
-            "version": "1.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/npm/node_modules/promise-call-limit": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/npm/node_modules/promise-inflight": {
-            "version": "1.0.1",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/promise-retry": {
-            "version": "2.0.1",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "err-code": "^2.0.2",
-                "retry": "^0.12.0"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/npm/node_modules/promzard": {
-            "version": "1.0.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "read": "^3.0.1"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/qrcode-terminal": {
-            "version": "0.12.0",
-            "inBundle": true,
-            "bin": {
-                "qrcode-terminal": "bin/qrcode-terminal.js"
-            }
-        },
-        "node_modules/npm/node_modules/read": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "mute-stream": "^1.0.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/read-cmd-shim": {
-            "version": "4.0.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/read-package-json-fast": {
-            "version": "3.0.2",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "json-parse-even-better-errors": "^3.0.0",
-                "npm-normalize-package-bin": "^3.0.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/retry": {
-            "version": "0.12.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 4"
-            }
-        },
-        "node_modules/npm/node_modules/safer-buffer": {
-            "version": "2.1.2",
-            "inBundle": true,
-            "license": "MIT",
-            "optional": true
-        },
-        "node_modules/npm/node_modules/semver": {
-            "version": "7.6.2",
-            "inBundle": true,
-            "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/npm/node_modules/shebang-command": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "shebang-regex": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/shebang-regex": {
-            "version": "3.0.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/signal-exit": {
-            "version": "4.1.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": ">=14"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/npm/node_modules/sigstore": {
-            "version": "2.3.0",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "dependencies": {
-                "@sigstore/bundle": "^2.3.1",
-                "@sigstore/core": "^1.0.0",
-                "@sigstore/protobuf-specs": "^0.3.1",
-                "@sigstore/sign": "^2.3.0",
-                "@sigstore/tuf": "^2.3.1",
-                "@sigstore/verify": "^1.2.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/smart-buffer": {
-            "version": "4.2.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 6.0.0",
-                "npm": ">= 3.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/socks": {
-            "version": "2.8.3",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "ip-address": "^9.0.5",
-                "smart-buffer": "^4.2.0"
-            },
-            "engines": {
-                "node": ">= 10.0.0",
-                "npm": ">= 3.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/socks-proxy-agent": {
-            "version": "8.0.3",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "agent-base": "^7.1.1",
-                "debug": "^4.3.4",
-                "socks": "^2.7.1"
-            },
-            "engines": {
-                "node": ">= 14"
-            }
-        },
-        "node_modules/npm/node_modules/spdx-correct": {
-            "version": "3.2.0",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "dependencies": {
-                "spdx-expression-parse": "^3.0.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "spdx-exceptions": "^2.1.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/spdx-exceptions": {
-            "version": "2.5.0",
-            "inBundle": true,
-            "license": "CC-BY-3.0"
-        },
-        "node_modules/npm/node_modules/spdx-expression-parse": {
-            "version": "4.0.0",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "spdx-exceptions": "^2.1.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/spdx-license-ids": {
-            "version": "3.0.17",
-            "inBundle": true,
-            "license": "CC0-1.0"
-        },
-        "node_modules/npm/node_modules/sprintf-js": {
-            "version": "1.1.3",
-            "inBundle": true,
-            "license": "BSD-3-Clause"
-        },
-        "node_modules/npm/node_modules/ssri": {
-            "version": "10.0.6",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^7.0.3"
+                "@npmcli/redact": "^2.0.0",
+                "make-fetch-happen": "^13.0.0",
+                "minipass": "^7.0.2",
+                "minipass-fetch": "^3.0.0",
+                "minipass-json-stream": "^1.0.1",
+                "minizlib": "^2.1.2",
+                "npm-package-arg": "^11.0.0",
+                "proc-log": "^4.0.0"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/string-width": {
-            "version": "4.2.3",
-            "inBundle": true,
-            "license": "MIT",
+        "node_modules/npm-run-path": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+            "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+            "dev": true,
             "dependencies": {
-                "emoji-regex": "^8.0.0",
-                "is-fullwidth-code-point": "^3.0.0",
-                "strip-ansi": "^6.0.1"
+                "path-key": "^3.0.0"
             },
             "engines": {
                 "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/string-width-cjs": {
-            "name": "string-width",
-            "version": "4.2.3",
+        "node_modules/npm-user-validate": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-2.0.1.tgz",
+            "integrity": "sha512-d17PKaF2h8LSGFl5j4b1gHOJt1fgH7YUcCm1kNSJvaLWWKXlBsuUvx0bBEkr0qhsVA9XP5LtRZ83hdlhm2QkgA==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/abbrev": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+            "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
             "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "emoji-regex": "^8.0.0",
-                "is-fullwidth-code-point": "^3.0.0",
-                "strip-ansi": "^6.0.1"
-            },
+            "license": "ISC",
             "engines": {
-                "node": ">=8"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/strip-ansi": {
-            "version": "6.0.1",
+        "node_modules/npm/node_modules/chalk": {
+            "version": "5.3.0",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+            "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
             "inBundle": true,
             "license": "MIT",
-            "dependencies": {
-                "ansi-regex": "^5.0.1"
-            },
             "engines": {
-                "node": ">=8"
+                "node": "^12.17.0 || ^14.13 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/npm/node_modules/strip-ansi-cjs": {
-            "name": "strip-ansi",
-            "version": "6.0.1",
+        "node_modules/npm/node_modules/ci-info": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz",
+            "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==",
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/sibiraj-s"
+                }
+            ],
             "inBundle": true,
             "license": "MIT",
-            "dependencies": {
-                "ansi-regex": "^5.0.1"
-            },
             "engines": {
                 "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/supports-color": {
-            "version": "9.4.0",
+        "node_modules/npm/node_modules/fastest-levenshtein": {
+            "version": "1.0.16",
+            "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+            "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
             "inBundle": true,
             "license": "MIT",
             "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/supports-color?sponsor=1"
+                "node": ">= 4.9.1"
             }
         },
-        "node_modules/npm/node_modules/tar": {
-            "version": "6.2.1",
+        "node_modules/npm/node_modules/fs-minipass": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
+            "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "chownr": "^2.0.0",
-                "fs-minipass": "^2.0.0",
-                "minipass": "^5.0.0",
-                "minizlib": "^2.1.1",
-                "mkdirp": "^1.0.3",
-                "yallist": "^4.0.0"
+                "minipass": "^7.0.3"
             },
             "engines": {
-                "node": ">=10"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/tar/node_modules/fs-minipass": {
-            "version": "2.1.0",
+        "node_modules/npm/node_modules/glob": {
+            "version": "10.3.15",
+            "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz",
+            "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "minipass": "^3.0.0"
+                "foreground-child": "^3.1.0",
+                "jackspeak": "^2.3.6",
+                "minimatch": "^9.0.1",
+                "minipass": "^7.0.4",
+                "path-scurry": "^1.11.0"
+            },
+            "bin": {
+                "glob": "dist/esm/bin.mjs"
             },
             "engines": {
-                "node": ">= 8"
+                "node": ">=16 || 14 >=14.18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
-            "version": "3.3.6",
+        "node_modules/npm/node_modules/graceful-fs": {
+            "version": "4.2.11",
+            "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+            "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
             "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "yallist": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
+            "license": "ISC"
         },
-        "node_modules/npm/node_modules/tar/node_modules/minipass": {
-            "version": "5.0.0",
+        "node_modules/npm/node_modules/ini": {
+            "version": "4.1.2",
+            "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz",
+            "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==",
             "inBundle": true,
             "license": "ISC",
             "engines": {
-                "node": ">=8"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/text-table": {
-            "version": "0.2.0",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/tiny-relative-date": {
-            "version": "1.3.0",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/treeverse": {
-            "version": "3.0.0",
+        "node_modules/npm/node_modules/isexe": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+            "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
             "inBundle": true,
             "license": "ISC",
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=16"
             }
         },
-        "node_modules/npm/node_modules/tuf-js": {
-            "version": "2.2.1",
+        "node_modules/npm/node_modules/jackspeak": {
+            "version": "2.3.6",
+            "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
+            "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
             "inBundle": true,
-            "license": "MIT",
+            "license": "BlueOak-1.0.0",
             "dependencies": {
-                "@tufjs/models": "2.0.1",
-                "debug": "^4.3.4",
-                "make-fetch-happen": "^13.0.1"
+                "@isaacs/cliui": "^8.0.2"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": ">=14"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            },
+            "optionalDependencies": {
+                "@pkgjs/parseargs": "^0.11.0"
             }
         },
-        "node_modules/npm/node_modules/unique-filename": {
-            "version": "3.0.0",
+        "node_modules/npm/node_modules/json-parse-even-better-errors": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
+            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
             "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "unique-slug": "^4.0.0"
-            },
+            "license": "MIT",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/unique-slug": {
-            "version": "4.0.0",
+        "node_modules/npm/node_modules/minimatch": {
+            "version": "9.0.4",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
+            "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "imurmurhash": "^0.1.4"
+                "brace-expansion": "^2.0.1"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/util-deprecate": {
-            "version": "1.0.2",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/validate-npm-package-license": {
-            "version": "3.0.4",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "dependencies": {
-                "spdx-correct": "^3.0.0",
-                "spdx-expression-parse": "^3.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "spdx-exceptions": "^2.1.0",
-                "spdx-license-ids": "^3.0.0"
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "node_modules/npm/node_modules/validate-npm-package-name": {
-            "version": "5.0.1",
+        "node_modules/npm/node_modules/minipass": {
+            "version": "7.1.1",
+            "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz",
+            "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==",
             "inBundle": true,
             "license": "ISC",
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=16 || 14 >=14.17"
             }
         },
-        "node_modules/npm/node_modules/walk-up-path": {
-            "version": "3.0.1",
+        "node_modules/npm/node_modules/ms": {
+            "version": "2.1.3",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
             "inBundle": true,
-            "license": "ISC"
+            "license": "MIT"
         },
-        "node_modules/npm/node_modules/which": {
-            "version": "4.0.0",
+        "node_modules/npm/node_modules/nopt": {
+            "version": "7.2.1",
+            "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+            "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "isexe": "^3.1.1"
+                "abbrev": "^2.0.0"
             },
             "bin": {
-                "node-which": "bin/which.js"
+                "nopt": "bin/nopt.js"
             },
             "engines": {
-                "node": "^16.13.0 || >=18.0.0"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/which/node_modules/isexe": {
-            "version": "3.1.1",
+        "node_modules/npm/node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
             "inBundle": true,
             "license": "ISC",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
             "engines": {
-                "node": ">=16"
+                "node": ">=10"
             }
         },
-        "node_modules/npm/node_modules/wrap-ansi": {
-            "version": "8.1.0",
+        "node_modules/npm/node_modules/supports-color": {
+            "version": "9.4.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz",
+            "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==",
             "inBundle": true,
             "license": "MIT",
-            "dependencies": {
-                "ansi-styles": "^6.1.0",
-                "string-width": "^5.0.1",
-                "strip-ansi": "^7.0.1"
-            },
             "engines": {
                 "node": ">=12"
             },
             "funding": {
-                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+                "url": "https://github.com/chalk/supports-color?sponsor=1"
             }
         },
-        "node_modules/npm/node_modules/wrap-ansi-cjs": {
-            "name": "wrap-ansi",
-            "version": "7.0.0",
+        "node_modules/npm/node_modules/tar": {
+            "version": "6.2.1",
+            "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+            "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC",
             "dependencies": {
-                "ansi-styles": "^4.0.0",
-                "string-width": "^4.1.0",
-                "strip-ansi": "^6.0.0"
+                "chownr": "^2.0.0",
+                "fs-minipass": "^2.0.0",
+                "minipass": "^5.0.0",
+                "minizlib": "^2.1.1",
+                "mkdirp": "^1.0.3",
+                "yallist": "^4.0.0"
             },
             "engines": {
                 "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
             }
         },
-        "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
-            "version": "4.3.0",
+        "node_modules/npm/node_modules/tar/node_modules/fs-minipass": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+            "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC",
             "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
+                "minipass": "^3.0.0"
             },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
-        "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
-            "version": "6.0.1",
-            "inBundle": true,
-            "license": "MIT",
             "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+                "node": ">= 8"
             }
         },
-        "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": {
-            "version": "9.2.2",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": {
-            "version": "5.1.2",
+        "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
+            "version": "3.3.6",
+            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC",
             "dependencies": {
-                "eastasianwidth": "^0.2.0",
-                "emoji-regex": "^9.2.2",
-                "strip-ansi": "^7.0.1"
+                "yallist": "^4.0.0"
             },
             "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
+                "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
-            "version": "7.1.0",
+        "node_modules/npm/node_modules/tar/node_modules/minipass": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+            "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
             "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "ansi-regex": "^6.0.1"
-            },
+            "license": "ISC",
             "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+                "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/write-file-atomic": {
-            "version": "5.0.1",
+        "node_modules/npm/node_modules/text-table": {
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+            "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/which": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+            "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "imurmurhash": "^0.1.4",
-                "signal-exit": "^4.0.1"
+                "isexe": "^3.1.1"
+            },
+            "bin": {
+                "node-which": "bin/which.js"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": "^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/npm/node_modules/yallist": {
             "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
             "inBundle": true,
             "license": "ISC"
         },
@@ -33768,6 +33515,7 @@
             "version": "5.0.1",
             "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
             "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
+            "deprecated": "This package is no longer supported.",
             "dependencies": {
                 "are-we-there-yet": "^2.0.0",
                 "console-control-strings": "^1.1.0",
@@ -34074,7 +33822,6 @@
         },
         "node_modules/openai": {
             "version": "4.47.1",
-            "resolved": "https://registry.npmjs.org/openai/-/openai-4.47.1.tgz",
             "integrity": "sha512-WWSxhC/69ZhYWxH/OBsLEirIjUcfpQ5+ihkXKp06hmeYXgBBIUCa9IptMzYx6NdkiOCsSGYCnTIsxaic3AjRCQ==",
             "dependencies": {
                 "@types/node": "^18.11.18",
@@ -34209,6 +33956,20 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
+        "node_modules/p-map": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+            "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+            "dependencies": {
+                "aggregate-error": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/p-retry": {
             "version": "6.2.0",
             "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz",
@@ -34226,12 +33987,45 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/p-try": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-            "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+        "node_modules/pacote": {
+            "version": "18.0.6",
+            "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz",
+            "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==",
+            "dependencies": {
+                "@npmcli/git": "^5.0.0",
+                "@npmcli/installed-package-contents": "^2.0.1",
+                "@npmcli/package-json": "^5.1.0",
+                "@npmcli/promise-spawn": "^7.0.0",
+                "@npmcli/run-script": "^8.0.0",
+                "cacache": "^18.0.0",
+                "fs-minipass": "^3.0.0",
+                "minipass": "^7.0.2",
+                "npm-package-arg": "^11.0.0",
+                "npm-packlist": "^8.0.0",
+                "npm-pick-manifest": "^9.0.0",
+                "npm-registry-fetch": "^17.0.0",
+                "proc-log": "^4.0.0",
+                "promise-retry": "^2.0.1",
+                "sigstore": "^2.2.0",
+                "ssri": "^10.0.0",
+                "tar": "^6.1.11"
+            },
+            "bin": {
+                "pacote": "bin/index.js"
+            },
             "engines": {
-                "node": ">=6"
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/pacote/node_modules/fs-minipass": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
+            "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
+            "dependencies": {
+                "minipass": "^7.0.3"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/pako": {
@@ -34278,6 +34072,27 @@
                 "xml2js": "^0.5.0"
             }
         },
+        "node_modules/parse-conflict-json": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz",
+            "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==",
+            "dependencies": {
+                "json-parse-even-better-errors": "^3.0.0",
+                "just-diff": "^6.0.0",
+                "just-diff-apply": "^5.2.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/parse-conflict-json/node_modules/json-parse-even-better-errors": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
+            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/parse-entities": {
             "version": "4.0.1",
             "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz",
@@ -34576,7 +34391,6 @@
         },
         "node_modules/pdfjs-dist": {
             "version": "4.2.67",
-            "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.2.67.tgz",
             "integrity": "sha512-rJmuBDFpD7cqC8WIkQUEClyB4UAH05K4AsyewToMTp2gSy3Rrx8c1ydAVqlJlGv3yZSOrhEERQU/4ScQQFlLHA==",
             "engines": {
                 "node": ">=18"
@@ -34893,9 +34707,9 @@
             }
         },
         "node_modules/postcss-selector-parser": {
-            "version": "6.0.16",
-            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
-            "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
+            "version": "6.1.0",
+            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
+            "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
             "dependencies": {
                 "cssesc": "^3.0.0",
                 "util-deprecate": "^1.0.2"
@@ -34933,7 +34747,6 @@
         },
         "node_modules/prettier": {
             "version": "3.2.5",
-            "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
             "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
             "dev": true,
             "bin": {
@@ -34977,6 +34790,14 @@
                 "stream-parser": "~0.3.1"
             }
         },
+        "node_modules/proc-log": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
+            "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/process": {
             "version": "0.11.10",
             "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -34990,6 +34811,14 @@
             "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
             "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
         },
+        "node_modules/proggy": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/proggy/-/proggy-2.0.0.tgz",
+            "integrity": "sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/progress": {
             "version": "2.0.3",
             "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -35007,6 +34836,58 @@
                 "asap": "~2.0.3"
             }
         },
+        "node_modules/promise-all-reject-late": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz",
+            "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/promise-call-limit": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.1.tgz",
+            "integrity": "sha512-utl+0x8gIDasV5X+PI5qWEPqH6fJS0pFtQ/4gZ95xfEFb/89dmh+/b895TbFDBLiafBvxD/PGTKfvxl4kH/pQg==",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/promise-inflight": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+            "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="
+        },
+        "node_modules/promise-retry": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+            "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+            "dependencies": {
+                "err-code": "^2.0.2",
+                "retry": "^0.12.0"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/promise-retry/node_modules/retry": {
+            "version": "0.12.0",
+            "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+            "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
+            "engines": {
+                "node": ">= 4"
+            }
+        },
+        "node_modules/promzard": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz",
+            "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==",
+            "dependencies": {
+                "read": "^3.0.1"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/prop-types": {
             "version": "15.8.1",
             "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -35086,9 +34967,9 @@
             }
         },
         "node_modules/prosemirror-model": {
-            "version": "1.21.0",
-            "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.21.0.tgz",
-            "integrity": "sha512-zLpS1mVCZLA7VTp82P+BfMiYVPcX1/z0Mf3gsjKZtzMWubwn2pN7CceMV0DycjlgE5JeXPR7UF4hJPbBV98oWA==",
+            "version": "1.21.1",
+            "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.21.1.tgz",
+            "integrity": "sha512-IVBAuMqOfltTr7yPypwpfdGT+6rGAteVOw2FO6GEvCGGa1ZwxLseqC1Eax/EChDvG/xGquB2d/hLdgh3THpsYg==",
             "dependencies": {
                 "orderedmap": "^2.0.0"
             }
@@ -35122,9 +35003,9 @@
             }
         },
         "node_modules/prosemirror-view": {
-            "version": "1.33.6",
-            "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.33.6.tgz",
-            "integrity": "sha512-zRLUNgLIQfd8IfGprsXxWTjdA8xEAFJe8cDNrOptj6Mop9sj+BMeVbJvceyAYCm5G2dOdT2prctH7K9dfnpIMw==",
+            "version": "1.33.8",
+            "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.33.8.tgz",
+            "integrity": "sha512-4PhMr/ufz2cdvFgpUAnZfs+0xij3RsFysreeG9V/utpwX7AJtYCDVyuRxzWoMJIEf4C7wVihuBNMPpFLPCiLQw==",
             "dependencies": {
                 "prosemirror-model": "^1.20.0",
                 "prosemirror-state": "^1.0.0",
@@ -35165,7 +35046,6 @@
         },
         "node_modules/pug": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz",
             "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
             "dependencies": {
                 "pug-code-gen": "^3.0.2",
@@ -35295,11 +35175,20 @@
             "version": "1.5.1",
             "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
             "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
+            "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
             "engines": {
                 "node": ">=0.6.0",
                 "teleport": ">=0.2.0"
             }
         },
+        "node_modules/qrcode-terminal": {
+            "version": "0.12.0",
+            "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
+            "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==",
+            "bin": {
+                "qrcode-terminal": "bin/qrcode-terminal.js"
+            }
+        },
         "node_modules/qs": {
             "version": "6.11.0",
             "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
@@ -35508,7 +35397,6 @@
         },
         "node_modules/react": {
             "version": "18.3.1",
-            "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
             "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
             "dependencies": {
                 "loose-envify": "^1.1.0"
@@ -35518,47 +35406,47 @@
             }
         },
         "node_modules/react-aria": {
-            "version": "3.33.0",
-            "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.33.0.tgz",
-            "integrity": "sha512-aKn9SQn5TMlmpUsIjfRMtse2v3okGcSo+gWLGrj9JVjxs4PL4FSU4mclj4Bg2JUXZTGgfLSq6PWUBzQ4gIP2zg==",
-            "dependencies": {
-                "@internationalized/string": "^3.2.2",
-                "@react-aria/breadcrumbs": "^3.5.12",
-                "@react-aria/button": "^3.9.4",
-                "@react-aria/calendar": "^3.5.7",
-                "@react-aria/checkbox": "^3.14.2",
-                "@react-aria/combobox": "^3.9.0",
-                "@react-aria/datepicker": "^3.10.0",
-                "@react-aria/dialog": "^3.5.13",
-                "@react-aria/dnd": "^3.6.0",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/gridlist": "^3.8.0",
-                "@react-aria/i18n": "^3.11.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/label": "^3.7.7",
-                "@react-aria/link": "^3.7.0",
-                "@react-aria/listbox": "^3.12.0",
-                "@react-aria/menu": "^3.14.0",
-                "@react-aria/meter": "^3.4.12",
-                "@react-aria/numberfield": "^3.11.2",
-                "@react-aria/overlays": "^3.22.0",
-                "@react-aria/progress": "^3.4.12",
-                "@react-aria/radio": "^3.10.3",
-                "@react-aria/searchfield": "^3.7.4",
-                "@react-aria/select": "^3.14.4",
-                "@react-aria/selection": "^3.18.0",
-                "@react-aria/separator": "^3.3.12",
-                "@react-aria/slider": "^3.7.7",
-                "@react-aria/ssr": "^3.9.3",
-                "@react-aria/switch": "^3.6.3",
-                "@react-aria/table": "^3.14.0",
-                "@react-aria/tabs": "^3.9.0",
-                "@react-aria/tag": "^3.4.0",
-                "@react-aria/textfield": "^3.14.4",
-                "@react-aria/tooltip": "^3.7.3",
-                "@react-aria/utils": "^3.24.0",
-                "@react-aria/visually-hidden": "^3.8.11",
-                "@react-types/shared": "^3.23.0"
+            "version": "3.33.1",
+            "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.33.1.tgz",
+            "integrity": "sha512-hFC3K/UA+90Krlx2IgRTgzFbC6FSPi4pUwHT+STperPLK+cTEHkI+3Lu0YYwQSBatkgxnIv9+GtFuVbps2kROw==",
+            "dependencies": {
+                "@internationalized/string": "^3.2.3",
+                "@react-aria/breadcrumbs": "^3.5.13",
+                "@react-aria/button": "^3.9.5",
+                "@react-aria/calendar": "^3.5.8",
+                "@react-aria/checkbox": "^3.14.3",
+                "@react-aria/combobox": "^3.9.1",
+                "@react-aria/datepicker": "^3.10.1",
+                "@react-aria/dialog": "^3.5.14",
+                "@react-aria/dnd": "^3.6.1",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/gridlist": "^3.8.1",
+                "@react-aria/i18n": "^3.11.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/label": "^3.7.8",
+                "@react-aria/link": "^3.7.1",
+                "@react-aria/listbox": "^3.12.1",
+                "@react-aria/menu": "^3.14.1",
+                "@react-aria/meter": "^3.4.13",
+                "@react-aria/numberfield": "^3.11.3",
+                "@react-aria/overlays": "^3.22.1",
+                "@react-aria/progress": "^3.4.13",
+                "@react-aria/radio": "^3.10.4",
+                "@react-aria/searchfield": "^3.7.5",
+                "@react-aria/select": "^3.14.5",
+                "@react-aria/selection": "^3.18.1",
+                "@react-aria/separator": "^3.3.13",
+                "@react-aria/slider": "^3.7.8",
+                "@react-aria/ssr": "^3.9.4",
+                "@react-aria/switch": "^3.6.4",
+                "@react-aria/table": "^3.14.1",
+                "@react-aria/tabs": "^3.9.1",
+                "@react-aria/tag": "^3.4.1",
+                "@react-aria/textfield": "^3.14.5",
+                "@react-aria/tooltip": "^3.7.4",
+                "@react-aria/utils": "^3.24.1",
+                "@react-aria/visually-hidden": "^3.8.12",
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
@@ -35566,32 +35454,32 @@
             }
         },
         "node_modules/react-aria-components": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/react-aria-components/-/react-aria-components-1.2.0.tgz",
-            "integrity": "sha512-Cqr1tewYe/SgNcVOptqYdm0PPAV0Xsvd2uzWX7EqJsPGHvKStl/mh2a3Ebe6dYuoOddLsqqj36DdiLC5Pb5okw==",
-            "dependencies": {
-                "@internationalized/date": "^3.5.3",
-                "@internationalized/string": "^3.2.2",
-                "@react-aria/color": "3.0.0-beta.32",
-                "@react-aria/focus": "^3.17.0",
-                "@react-aria/interactions": "^3.21.2",
-                "@react-aria/menu": "^3.14.0",
-                "@react-aria/toolbar": "3.0.0-beta.4",
-                "@react-aria/tree": "3.0.0-alpha.0",
-                "@react-aria/utils": "^3.24.0",
-                "@react-stately/color": "^3.6.0",
-                "@react-stately/menu": "^3.7.0",
-                "@react-stately/table": "^3.11.7",
-                "@react-stately/utils": "^3.10.0",
-                "@react-types/color": "3.0.0-beta.24",
-                "@react-types/form": "^3.7.3",
-                "@react-types/grid": "^3.2.5",
-                "@react-types/shared": "^3.23.0",
-                "@react-types/table": "^3.9.4",
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/react-aria-components/-/react-aria-components-1.2.1.tgz",
+            "integrity": "sha512-iGIdDjbTyLLn0/tGUyBQxxu+E1bw4/H4AU89d0cRcu8yIdw6MXG29YElmRHn0ugiyrERrk/YQALihstnns5kRQ==",
+            "dependencies": {
+                "@internationalized/date": "^3.5.4",
+                "@internationalized/string": "^3.2.3",
+                "@react-aria/color": "3.0.0-beta.33",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@react-aria/menu": "^3.14.1",
+                "@react-aria/toolbar": "3.0.0-beta.5",
+                "@react-aria/tree": "3.0.0-alpha.1",
+                "@react-aria/utils": "^3.24.1",
+                "@react-stately/color": "^3.6.1",
+                "@react-stately/menu": "^3.7.1",
+                "@react-stately/table": "^3.11.8",
+                "@react-stately/utils": "^3.10.1",
+                "@react-types/color": "3.0.0-beta.25",
+                "@react-types/form": "^3.7.4",
+                "@react-types/grid": "^3.2.6",
+                "@react-types/shared": "^3.23.1",
+                "@react-types/table": "^3.9.5",
                 "@swc/helpers": "^0.5.0",
                 "client-only": "^0.0.1",
-                "react-aria": "^3.33.0",
-                "react-stately": "^3.31.0",
+                "react-aria": "^3.33.1",
+                "react-stately": "^3.31.1",
                 "use-sync-external-store": "^1.2.0"
             },
             "peerDependencies": {
@@ -35616,7 +35504,6 @@
         },
         "node_modules/react-awesome-reveal": {
             "version": "4.2.11",
-            "resolved": "https://registry.npmjs.org/react-awesome-reveal/-/react-awesome-reveal-4.2.11.tgz",
             "integrity": "sha512-BXdU3nzZkRYf6h2lIx4SCMEERhIQd7wKheHKRH8U9601m1U2W4LrwEpKbpUxIPWSjcUwci4w7EotdfF+9ZQHhQ==",
             "funding": [
                 {
@@ -35682,7 +35569,6 @@
         },
         "node_modules/react-datepicker": {
             "version": "6.9.0",
-            "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-6.9.0.tgz",
             "integrity": "sha512-QTxuzeem7BUfVFWv+g5WuvzT0c5BPo+XTCNbMTZKSZQLU+cMMwSUHwspaxuIcDlwNcOH0tiJ+bh1fJ2yxOGYWA==",
             "dependencies": {
                 "@floating-ui/react": "^0.26.2",
@@ -35698,7 +35584,6 @@
         },
         "node_modules/react-dom": {
             "version": "18.3.1",
-            "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
             "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
             "dependencies": {
                 "loose-envify": "^1.1.0",
@@ -35748,7 +35633,6 @@
         },
         "node_modules/react-icons": {
             "version": "5.2.1",
-            "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.2.1.tgz",
             "integrity": "sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw==",
             "peerDependencies": {
                 "react": "*"
@@ -35775,7 +35659,6 @@
         },
         "node_modules/react-jsx-parser": {
             "version": "1.29.0",
-            "resolved": "https://registry.npmjs.org/react-jsx-parser/-/react-jsx-parser-1.29.0.tgz",
             "integrity": "sha512-u0svZd0UsPffRrIK0sTbox54jhEbTmg6ED9ob5FQahp1DeOpd2Rq+KiSTIFNYkZUL+WZi4Ntia/Oj5T4lDJafQ==",
             "hasInstallScript": true,
             "dependencies": {
@@ -35814,9 +35697,14 @@
                 "@types/react": "^17"
             }
         },
+        "node_modules/react-jsx-parser/node_modules/@types/react/node_modules/@types/scheduler": {
+            "version": "0.16.8",
+            "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
+            "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
+            "optional": true
+        },
         "node_modules/react-latex-next": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/react-latex-next/-/react-latex-next-3.0.0.tgz",
             "integrity": "sha512-x70f1b1G7TronVigsRgKHKYYVUNfZk/3bciFyYX1lYLQH2y3/TXku3+5Vap8MDbJhtopePSYBsYWS6jhzIdz+g==",
             "dependencies": {
                 "katex": "^0.16.0"
@@ -35969,34 +35857,42 @@
                 "node": ">=6.0.0"
             }
         },
+        "node_modules/react-speech-recognition": {
+            "version": "3.10.0",
+            "resolved": "https://registry.npmjs.org/react-speech-recognition/-/react-speech-recognition-3.10.0.tgz",
+            "integrity": "sha512-EVSr4Ik8l9urwdPiK2r0+ADrLyDDrjB0qBRdUWO+w2MfwEBrj6NuRmy1GD3x7BU/V6/hab0pl8Lupen0zwlJyw==",
+            "peerDependencies": {
+                "react": ">=16.8.0"
+            }
+        },
         "node_modules/react-stately": {
-            "version": "3.31.0",
-            "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.31.0.tgz",
-            "integrity": "sha512-G6y7t6qpP3LU4mLM2RlRTgdW5eiZrR2yB0XZbLo8qVplazxyRzlDJRBdE8OBTpw2SO1q5Auub3NOTH3vH0qCHg==",
-            "dependencies": {
-                "@react-stately/calendar": "^3.5.0",
-                "@react-stately/checkbox": "^3.6.4",
-                "@react-stately/collections": "^3.10.6",
-                "@react-stately/combobox": "^3.8.3",
-                "@react-stately/data": "^3.11.3",
-                "@react-stately/datepicker": "^3.9.3",
-                "@react-stately/dnd": "^3.3.0",
-                "@react-stately/form": "^3.0.2",
-                "@react-stately/list": "^3.10.4",
-                "@react-stately/menu": "^3.7.0",
-                "@react-stately/numberfield": "^3.9.2",
-                "@react-stately/overlays": "^3.6.6",
-                "@react-stately/radio": "^3.10.3",
-                "@react-stately/searchfield": "^3.5.2",
-                "@react-stately/select": "^3.6.3",
-                "@react-stately/selection": "^3.15.0",
-                "@react-stately/slider": "^3.5.3",
-                "@react-stately/table": "^3.11.7",
-                "@react-stately/tabs": "^3.6.5",
-                "@react-stately/toggle": "^3.7.3",
-                "@react-stately/tooltip": "^3.4.8",
-                "@react-stately/tree": "^3.8.0",
-                "@react-types/shared": "^3.23.0"
+            "version": "3.31.1",
+            "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.31.1.tgz",
+            "integrity": "sha512-wuq673NHkYSdoceGryjtMJJvB9iQgyDkQDsnTN0t2v91pXjGDsN/EcOvnUrxXSBtY9eLdIw74R54z9GX5cJNEg==",
+            "dependencies": {
+                "@react-stately/calendar": "^3.5.1",
+                "@react-stately/checkbox": "^3.6.5",
+                "@react-stately/collections": "^3.10.7",
+                "@react-stately/combobox": "^3.8.4",
+                "@react-stately/data": "^3.11.4",
+                "@react-stately/datepicker": "^3.9.4",
+                "@react-stately/dnd": "^3.3.1",
+                "@react-stately/form": "^3.0.3",
+                "@react-stately/list": "^3.10.5",
+                "@react-stately/menu": "^3.7.1",
+                "@react-stately/numberfield": "^3.9.3",
+                "@react-stately/overlays": "^3.6.7",
+                "@react-stately/radio": "^3.10.4",
+                "@react-stately/searchfield": "^3.5.3",
+                "@react-stately/select": "^3.6.4",
+                "@react-stately/selection": "^3.15.1",
+                "@react-stately/slider": "^3.5.4",
+                "@react-stately/table": "^3.11.8",
+                "@react-stately/tabs": "^3.6.6",
+                "@react-stately/toggle": "^3.7.4",
+                "@react-stately/tooltip": "^3.4.9",
+                "@react-stately/tree": "^3.8.1",
+                "@react-types/shared": "^3.23.1"
             },
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
@@ -36004,7 +35900,6 @@
         },
         "node_modules/react-textarea-autosize": {
             "version": "8.5.3",
-            "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz",
             "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==",
             "dependencies": {
                 "@babel/runtime": "^7.20.13",
@@ -36084,6 +35979,53 @@
                 "lodash": "^4.0.1"
             }
         },
+        "node_modules/read": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz",
+            "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==",
+            "dependencies": {
+                "mute-stream": "^1.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/read-cmd-shim": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz",
+            "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/read-package-json-fast": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz",
+            "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==",
+            "dependencies": {
+                "json-parse-even-better-errors": "^3.0.0",
+                "npm-normalize-package-bin": "^3.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
+            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/read/node_modules/mute-stream": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
+            "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/readable-stream": {
             "version": "4.5.2",
             "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
@@ -36122,6 +36064,14 @@
                 "ieee754": "^1.2.1"
             }
         },
+        "node_modules/readable-stream/node_modules/string_decoder": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+            "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+            "dependencies": {
+                "safe-buffer": "~5.2.0"
+            }
+        },
         "node_modules/readable-web-to-node-stream": {
             "version": "3.0.2",
             "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
@@ -36150,6 +36100,14 @@
                 "node": ">= 6"
             }
         },
+        "node_modules/readable-web-to-node-stream/node_modules/readable-stream/node_modules/string_decoder": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+            "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+            "dependencies": {
+                "safe-buffer": "~5.2.0"
+            }
+        },
         "node_modules/readdir-glob": {
             "version": "1.1.3",
             "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
@@ -36187,7 +36145,6 @@
         },
         "node_modules/recharts": {
             "version": "2.12.7",
-            "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.7.tgz",
             "integrity": "sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==",
             "dependencies": {
                 "clsx": "^2.0.0",
@@ -36355,7 +36312,6 @@
         },
         "node_modules/rehype-katex": {
             "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.0.tgz",
             "integrity": "sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==",
             "dependencies": {
                 "@types/hast": "^3.0.0",
@@ -36420,7 +36376,6 @@
         },
         "node_modules/remark-math": {
             "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-6.0.0.tgz",
             "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
@@ -36464,11 +36419,6 @@
                 "@types/unist": "*"
             }
         },
-        "node_modules/remark-parse/node_modules/@types/unist": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
-        },
         "node_modules/remark-parse/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
@@ -36492,6 +36442,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/remark-parse/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/remark-parse/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
@@ -36937,6 +36892,11 @@
                 "url": "https://opencollective.com/unified"
             }
         },
+        "node_modules/remark-parse/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+        },
         "node_modules/remark-rehype": {
             "version": "11.1.0",
             "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz",
@@ -37508,7 +37468,6 @@
         },
         "node_modules/sass": {
             "version": "1.77.2",
-            "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.2.tgz",
             "integrity": "sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==",
             "dependencies": {
                 "chokidar": ">=3.0.0 <4.0.0",
@@ -37524,7 +37483,6 @@
         },
         "node_modules/sass-loader": {
             "version": "14.2.1",
-            "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz",
             "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==",
             "dependencies": {
                 "neo-async": "^2.6.2"
@@ -37605,9 +37563,9 @@
             }
         },
         "node_modules/schema-utils/node_modules/ajv": {
-            "version": "8.13.0",
-            "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz",
-            "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
+            "version": "8.16.0",
+            "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
+            "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
             "dependencies": {
                 "fast-deep-equal": "^3.1.3",
                 "json-schema-traverse": "^1.0.0",
@@ -37981,6 +37939,7 @@
             "version": "7.2.3",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
             "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -38040,6 +37999,34 @@
                 "url": "https://github.com/sponsors/isaacs"
             }
         },
+        "node_modules/sigstore": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz",
+            "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==",
+            "dependencies": {
+                "@sigstore/bundle": "^2.3.2",
+                "@sigstore/core": "^1.0.0",
+                "@sigstore/protobuf-specs": "^0.3.2",
+                "@sigstore/sign": "^2.3.2",
+                "@sigstore/tuf": "^2.3.4",
+                "@sigstore/verify": "^1.2.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/sigstore/node_modules/@sigstore/tuf": {
+            "version": "2.3.4",
+            "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz",
+            "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==",
+            "dependencies": {
+                "@sigstore/protobuf-specs": "^0.3.2",
+                "tuf-js": "^2.2.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
         "node_modules/simple-concat": {
             "version": "1.0.1",
             "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
@@ -38162,6 +38149,15 @@
                 "node": ">=4"
             }
         },
+        "node_modules/smart-buffer": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+            "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+            "engines": {
+                "node": ">= 6.0.0",
+                "npm": ">= 3.0.0"
+            }
+        },
         "node_modules/socket.io": {
             "version": "4.7.5",
             "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz",
@@ -38254,22 +38250,41 @@
                 "uuid": "dist/bin/uuid"
             }
         },
-        "node_modules/sonic-forest": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/sonic-forest/-/sonic-forest-1.0.3.tgz",
-            "integrity": "sha512-dtwajos6IWMEWXdEbW1IkEkyL2gztCAgDplRIX+OT5aRKnEd5e7r7YCxRgXZdhRP1FBdOBf8axeTPhzDv8T4wQ==",
+        "node_modules/socks": {
+            "version": "2.8.3",
+            "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
+            "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
             "dependencies": {
-                "tree-dump": "^1.0.0"
+                "ip-address": "^9.0.5",
+                "smart-buffer": "^4.2.0"
             },
             "engines": {
-                "node": ">=10.0"
+                "node": ">= 10.0.0",
+                "npm": ">= 3.0.0"
+            }
+        },
+        "node_modules/socks-proxy-agent": {
+            "version": "8.0.3",
+            "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz",
+            "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==",
+            "dependencies": {
+                "agent-base": "^7.1.1",
+                "debug": "^4.3.4",
+                "socks": "^2.7.1"
             },
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/streamich"
+            "engines": {
+                "node": ">= 14"
+            }
+        },
+        "node_modules/socks-proxy-agent/node_modules/agent-base": {
+            "version": "7.1.1",
+            "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+            "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+            "dependencies": {
+                "debug": "^4.3.4"
             },
-            "peerDependencies": {
-                "tslib": "2"
+            "engines": {
+                "node": ">= 14"
             }
         },
         "node_modules/sort-asc": {
@@ -38354,6 +38369,43 @@
                 "memory-pager": "^1.0.2"
             }
         },
+        "node_modules/spdx-correct": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+            "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+            "dependencies": {
+                "spdx-expression-parse": "^3.0.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/spdx-correct/node_modules/spdx-expression-parse": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+            "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/spdx-exceptions": {
+            "version": "2.5.0",
+            "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+            "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="
+        },
+        "node_modules/spdx-expression-parse": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
+            "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/spdx-license-ids": {
+            "version": "3.0.18",
+            "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+            "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ=="
+        },
         "node_modules/spdy": {
             "version": "4.0.2",
             "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
@@ -38500,6 +38552,17 @@
                 "node": ">=0.10.0"
             }
         },
+        "node_modules/ssri": {
+            "version": "10.0.6",
+            "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
+            "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
+            "dependencies": {
+                "minipass": "^7.0.3"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/standard-error": {
             "version": "1.1.0",
             "resolved": "https://registry.npmjs.org/standard-error/-/standard-error-1.1.0.tgz",
@@ -38593,13 +38656,18 @@
             }
         },
         "node_modules/string_decoder": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-            "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+            "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
             "dependencies": {
-                "safe-buffer": "~5.2.0"
+                "safe-buffer": "~5.1.0"
             }
         },
+        "node_modules/string_decoder/node_modules/safe-buffer": {
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+            "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+        },
         "node_modules/string-width": {
             "version": "5.1.2",
             "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
@@ -38625,9 +38693,6 @@
                 "emoji-regex": "^8.0.0",
                 "is-fullwidth-code-point": "^3.0.0",
                 "strip-ansi": "^6.0.1"
-            },
-            "engines": {
-                "node": ">=8"
             }
         },
         "node_modules/string-width-cjs/node_modules/emoji-regex": {
@@ -38813,9 +38878,6 @@
             "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
             "dependencies": {
                 "ansi-regex": "^5.0.1"
-            },
-            "engines": {
-                "node": ">=8"
             }
         },
         "node_modules/strip-bom": {
@@ -38891,7 +38953,6 @@
         },
         "node_modules/styled-components": {
             "version": "6.1.11",
-            "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.11.tgz",
             "integrity": "sha512-Ui0jXPzbp1phYij90h12ksljKGqF8ncGx+pjrNPsSPhbUUjWT2tD1FwGo2LF6USCnbrsIhNngDfodhxbegfEOA==",
             "dependencies": {
                 "@emotion/is-prop-valid": "1.2.2",
@@ -39225,6 +39286,14 @@
             "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
             "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
         },
+        "node_modules/text-segmentation": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
+            "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+            "dependencies": {
+                "utrie": "^1.0.2"
+            }
+        },
         "node_modules/text-table": {
             "version": "0.2.0",
             "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -39281,6 +39350,11 @@
                 "node": ">=12"
             }
         },
+        "node_modules/tiny-relative-date": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz",
+            "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A=="
+        },
         "node_modules/tinycolor2": {
             "version": "1.6.0",
             "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz",
@@ -39456,6 +39530,14 @@
                 "tree-kill": "cli.js"
             }
         },
+        "node_modules/treeverse": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz",
+            "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/trim-lines": {
             "version": "3.0.1",
             "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
@@ -39700,6 +39782,7 @@
             "version": "7.2.3",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
             "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dev": true,
             "dependencies": {
                 "fs.realpath": "^1.0.0",
@@ -39732,6 +39815,7 @@
             "version": "2.7.1",
             "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
             "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+            "deprecated": "Rimraf versions prior to v4 are no longer supported",
             "dev": true,
             "dependencies": {
                 "glob": "^7.1.3"
@@ -39875,6 +39959,7 @@
             "version": "7.2.3",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
             "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -39940,6 +40025,7 @@
             "version": "2.7.1",
             "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
             "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+            "deprecated": "Rimraf versions prior to v4 are no longer supported",
             "dependencies": {
                 "glob": "^7.1.3"
             },
@@ -39981,6 +40067,7 @@
             "version": "7.2.3",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
             "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -40055,6 +40142,19 @@
             "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
             "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
         },
+        "node_modules/tuf-js": {
+            "version": "2.2.1",
+            "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz",
+            "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==",
+            "dependencies": {
+                "@tufjs/models": "2.0.1",
+                "debug": "^4.3.4",
+                "make-fetch-happen": "^13.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
         "node_modules/tunnel": {
             "version": "0.0.6",
             "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
@@ -40217,14 +40317,41 @@
             "integrity": "sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ=="
         },
         "node_modules/typescript-eslint": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.9.0.tgz",
-            "integrity": "sha512-7iTn9c10teHHCys5Ud/yaJntXZrjt3h2mrx3feJGBOLgQkF3TB1X89Xs3aVQ/GgdXRAXpk2bPTdpRwHP4YkUow==",
+            "version": "7.10.0",
+            "integrity": "sha512-thO8nyqptXdfWHQrMJJiJyftpW8aLmwRNs11xA8pSrXneoclFPstQZqXvDWuH1WNL4CHffqHvYUeCHTit6yfhQ==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/eslint-plugin": "7.9.0",
-                "@typescript-eslint/parser": "7.9.0",
-                "@typescript-eslint/utils": "7.9.0"
+                "@typescript-eslint/eslint-plugin": "7.10.0",
+                "@typescript-eslint/parser": "7.10.0",
+                "@typescript-eslint/utils": "7.10.0"
+            },
+            "engines": {
+                "node": "^18.18.0 || >=20.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            },
+            "peerDependencies": {
+                "eslint": "^8.56.0"
+            },
+            "peerDependenciesMeta": {
+                "typescript": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": {
+            "version": "7.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.10.0.tgz",
+            "integrity": "sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==",
+            "dev": true,
+            "dependencies": {
+                "@typescript-eslint/scope-manager": "7.10.0",
+                "@typescript-eslint/types": "7.10.0",
+                "@typescript-eslint/typescript-estree": "7.10.0",
+                "@typescript-eslint/visitor-keys": "7.10.0",
+                "debug": "^4.3.4"
             },
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
@@ -40409,6 +40536,28 @@
                 "node": ">=0.10.0"
             }
         },
+        "node_modules/unique-filename": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
+            "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
+            "dependencies": {
+                "unique-slug": "^4.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/unique-slug": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
+            "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
+            "dependencies": {
+                "imurmurhash": "^0.1.4"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/unist-util-find-after": {
             "version": "5.0.0",
             "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
@@ -40767,6 +40916,14 @@
                 "node": ">= 0.4.0"
             }
         },
+        "node_modules/utrie": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
+            "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+            "dependencies": {
+                "base64-arraybuffer": "^1.0.2"
+            }
+        },
         "node_modules/uuid": {
             "version": "9.0.1",
             "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
@@ -40813,6 +40970,32 @@
             "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz",
             "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA=="
         },
+        "node_modules/validate-npm-package-license": {
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+            "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+            "dependencies": {
+                "spdx-correct": "^3.0.0",
+                "spdx-expression-parse": "^3.0.0"
+            }
+        },
+        "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+            "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/validate-npm-package-name": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
+            "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/validate.io-array": {
             "version": "1.0.6",
             "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz",
@@ -40987,6 +41170,11 @@
                 "node": ">=18"
             }
         },
+        "node_modules/walk-up-path": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz",
+            "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA=="
+        },
         "node_modules/warning": {
             "version": "4.0.3",
             "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
@@ -41217,6 +41405,60 @@
                 "url": "https://github.com/sponsors/streamich"
             }
         },
+        "node_modules/webpack-dev-middleware/node_modules/memfs/node_modules/@jsonjoy.com/json-pack": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz",
+            "integrity": "sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg==",
+            "dependencies": {
+                "@jsonjoy.com/base64": "^1.1.1",
+                "@jsonjoy.com/util": "^1.1.2",
+                "hyperdyperid": "^1.2.0",
+                "thingies": "^1.20.0"
+            },
+            "engines": {
+                "node": ">=10.0"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/streamich"
+            },
+            "peerDependencies": {
+                "tslib": "2"
+            }
+        },
+        "node_modules/webpack-dev-middleware/node_modules/memfs/node_modules/@jsonjoy.com/util": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.2.0.tgz",
+            "integrity": "sha512-4B8B+3vFsY4eo33DMKyJPlQ3sBMpPFUZK2dr3O3rXrOGKKbYG44J0XSFkDo1VOQiri5HFEhIeVvItjR2xcazmg==",
+            "engines": {
+                "node": ">=10.0"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/streamich"
+            },
+            "peerDependencies": {
+                "tslib": "2"
+            }
+        },
+        "node_modules/webpack-dev-middleware/node_modules/memfs/node_modules/sonic-forest": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/sonic-forest/-/sonic-forest-1.0.3.tgz",
+            "integrity": "sha512-dtwajos6IWMEWXdEbW1IkEkyL2gztCAgDplRIX+OT5aRKnEd5e7r7YCxRgXZdhRP1FBdOBf8axeTPhzDv8T4wQ==",
+            "dependencies": {
+                "tree-dump": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=10.0"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/streamich"
+            },
+            "peerDependencies": {
+                "tslib": "2"
+            }
+        },
         "node_modules/webpack-dev-server": {
             "version": "5.0.4",
             "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz",
@@ -41652,12 +41894,6 @@
                 "ansi-styles": "^4.0.0",
                 "string-width": "^4.1.0",
                 "strip-ansi": "^6.0.0"
-            },
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
             }
         },
         "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
@@ -41761,6 +41997,18 @@
                 "node": ">=4"
             }
         },
+        "node_modules/write-file-atomic": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+            "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
+            "dependencies": {
+                "imurmurhash": "^0.1.4",
+                "signal-exit": "^4.0.1"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/write/node_modules/mkdirp": {
             "version": "0.5.6",
             "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
diff --git a/package.json b/package.json
index 03d1c1423..ad4058d5a 100644
--- a/package.json
+++ b/package.json
@@ -60,6 +60,7 @@
         "@types/react-grid-layout": "^1.3.5",
         "@types/react-measure": "^2.0.12",
         "@types/react-reconciler": "^0.28.8",
+        "@types/react-speech-recognition": "^3.9.5",
         "@types/request": "^2.48.12",
         "@types/request-promise": "^4.1.51",
         "@types/shelljs": "^0.8.15",
@@ -207,6 +208,7 @@
         "html-to-image": "^1.11.11",
         "html-to-text": "^9.0.5",
         "html-webpack-plugin": "^5.5.3",
+        "html2canvas": "^1.4.1",
         "http-browserify": "^1.7.0",
         "https": "^1.0.0",
         "https-browserify": "^1.0.0",
@@ -281,6 +283,7 @@
         "react-measure": "^2.5.2",
         "react-resizable": "^3.0.5",
         "react-select": "^5.8.0",
+        "react-speech-recognition": "^3.10.0",
         "react-textarea-autosize": "^8.5.3",
         "react-type-animation": "^3.2.0",
         "react-xarrows": "^2.0.2",
diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index 7bcd541c7..caddc41a2 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -12,6 +12,7 @@ enum GPTCallType {
     DESCRIBE = 'describe',
     MERMAID = 'mermaid',
     DATA = 'data',
+    STACK = 'stack',
 }
 
 type GPTCallOpts = {
@@ -26,6 +27,12 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
     summary: { model: 'gpt-4-turbo', maxTokens: 256, temp: 0.5, prompt: 'Summarize the text given in simpler terms.' },
     edit: { model: 'gpt-4-turbo', maxTokens: 256, temp: 0.5, prompt: 'Reword the text.' },
     flashcard: { model: 'gpt-4-turbo', maxTokens: 512, temp: 0.5, prompt: 'Make flashcards out of this text with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ' },
+    stack: {
+        model: 'gpt-4o',
+        maxTokens: 2048,
+        temp: 0.7,
+        prompt: 'Create a stack of flashcards out of this text with each question and answer labeled as question and answer. For some questions, ask "what is this image of" and write a keyword that represents the image and label it "keyword". Otherwise, write none. Do not label each flashcard and do not include asterisks.',
+    },
     completion: { model: 'gpt-4-turbo', maxTokens: 256, temp: 0.5, prompt: "You are a helpful assistant. Answer the user's prompt." },
     mermaid: {
         model: 'gpt-4-turbo',
@@ -64,7 +71,7 @@ let lastResp = '';
  * @returns AI Output
  */
 const gptAPICall = async (inputTextIn: string, callType: GPTCallType, prompt?: any) => {
-    const inputText = [GPTCallType.SUMMARY, GPTCallType.FLASHCARD, GPTCallType.QUIZ].includes(callType) ? inputTextIn + '.' : inputTextIn;
+    const inputText = [GPTCallType.SUMMARY, GPTCallType.FLASHCARD, GPTCallType.QUIZ, GPTCallType.STACK].includes(callType) ? inputTextIn + '.' : inputTextIn;
     const opts: GPTCallOpts = callTypeMap[callType];
     if (lastCall === inputText) return lastResp;
     try {
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 3d33ff862..06ecf8893 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -9,7 +9,7 @@ import { Doc, Opt } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
 import { RichTextField } from '../../../fields/RichTextField';
 import { DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
-import { GPTCallType, gptAPICall } from '../../apis/gpt/GPT';
+import { GPTCallType, gptAPICall, gptImageLabel } from '../../apis/gpt/GPT';
 import '../pdf/GPTPopup/GPTPopup.scss';
 import { DocUtils } from '../../documents/DocUtils';
 import { DocumentType } from '../../documents/DocumentTypes';
@@ -29,7 +29,12 @@ import { ContextMenu } from '../ContextMenu';
 import { ContextMenuProps } from '../ContextMenuItem';
 import { tickStep } from 'd3';
 import { CollectionCarouselView } from '../collections/CollectionCarouselView';
+import { FollowLinkScript } from '../../documents/DocUtils';
+import { schema } from '../nodes/formattedText/schema_rts';
+import { Id } from '../../../fields/FieldSymbols';
+import axios from 'axios';
 
+const API_URL = 'https://api.unsplash.com/search/photos';
 @observer
 export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     public static LayoutString(fieldKey: string) {
@@ -39,36 +44,110 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     constructor(props: FieldViewProps) {
         super(props);
         makeObservable(this);
+        this.setListening();
     }
 
     @observable private _inputValue = '';
     @observable private _outputValue = '';
     @observable private _loading = false;
     @observable private _isEmpty = false;
+    @observable childActive = false;
     @observable _yRelativeToTop: boolean = true;
-
-    @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
-        this._inputValue = e.target.value;
-        console.log(this._inputValue);
-    };
-
     @observable _animating = '';
+    private _ref = React.createRef<HTMLDivElement>();
 
-    @computed get clipWidth() {
-        return NumCast(this.layoutDoc[this.clipWidthKey], 50);
+    get revealOp() {
+        return this.layoutDoc[`_${this._props.fieldKey}_revealOp`];
+    }
+    get clipHeightKey() {
+        return '_' + this._props.fieldKey + '_clipHeight';
     }
+
     get clipWidthKey() {
         return '_' + this._props.fieldKey + '_clipWidth';
     }
 
+    @computed get clipWidth() {
+        return NumCast(this.layoutDoc[this.clipWidthKey], 50);
+    }
+
     @computed get clipHeight() {
         return NumCast(this.layoutDoc[this.clipHeightKey], 200);
     }
-    get revealOp() {
-        return this.layoutDoc[`_${this._props.fieldKey}_revealOp`];
+
+    @computed get overlayAlternateIcon() {
+        const usepath = this.layoutDoc[`_${this._props.fieldKey}_usePath`];
+        return (
+            <Tooltip title={<div className="dash-tooltip">flip</div>}>
+                <div
+                    className="formattedTextBox-alternateButton"
+                    onPointerDown={e =>
+                        setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => {
+                            if (!this.layoutDoc[`_${this._props.fieldKey}_revealOp`] || this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'flip') {
+                                this.flipFlashcard();
+
+                                // console.log('Print Front of cards: ' + (RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text ?? ''));
+                                // console.log('Print Back of cards: ' + (RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text ?? ''));
+                            }
+                        })
+                    }
+                    style={{
+                        background: this.revealOp === 'hover' ? 'gray' : usepath === 'alternate' ? 'white' : 'black',
+                        color: this.revealOp === 'hover' ? 'black' : usepath === 'alternate' ? 'black' : 'white',
+                        display: 'inline-block',
+                    }}>
+                    <div key="alternate" className="formattedTextBox-flip">
+                        <FontAwesomeIcon icon="turn-up" size="1x" />
+                    </div>
+                </div>
+            </Tooltip>
+        );
     }
-    get clipHeightKey() {
-        return '_' + this._props.fieldKey + '_clipHeight';
+
+    @computed get flashcardMenu() {
+        return (
+            <div>
+                <Tooltip
+                    title={
+                        this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? (
+                            <div className="dash-tooltip">Flip to front side to use GPT</div>
+                        ) : (
+                            <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>
+                        )
+                    }>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={e => (!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? this.findImageTags() : null)}>
+                        <FontAwesomeIcon icon="lightbulb" size="xl" />
+                    </div>
+                </Tooltip>
+                {DocCast(this.Document.embedContainer).type_collection === 'carousel' ? null : (
+                    <div>
+                        <Tooltip title={<div>Create a flashcard pile</div>}>
+                            <div style={{ position: 'absolute', bottom: '3px', right: '74px', cursor: 'pointer' }} onPointerDown={e => this.createFlashcardPile([this.Document], false)}>
+                                <FontAwesomeIcon icon="folder-plus" size="xl" />
+                            </div>
+                        </Tooltip>
+                        <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
+                            <div style={{ position: 'absolute', bottom: '3px', right: '104px', cursor: 'pointer' }} onClick={e => this.gptFlashcardPile()}>
+                                <FontAwesomeIcon icon="layer-group" size="xl" />
+                            </div>
+                        </Tooltip>
+                    </div>
+                )}
+                <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }} onClick={e => this.handleHover()}>
+                        <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="hand-point-up" size="xl" />
+                    </div>
+                </Tooltip>
+                {/* <Tooltip title={<div className="dash-tooltip">Remove this side of the flashcard</div>}>
+                    <div
+                        style={{ position: 'absolute', bottom: '3px', right: '80px', cursor: 'pointer' }}
+                        onPointerDown={e => this.closeDown(e, this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._props.fieldKey + '_1' : this._props.fieldKey + '_0')}>
+                        <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="trash-can" size="xl" />
+                    </div>
+                </Tooltip> */}
+                {/* {this.overlayAlternateIcon} */}
+            </div>
+        );
     }
 
     componentDidMount() {
@@ -80,6 +159,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     }
     protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
         this._disposers[disposerId]?.();
+        // this.childActive = true;
         if (ele) {
             this._disposers[disposerId] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
         }
@@ -147,6 +227,39 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return false;
     };
 
+    @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
+        this._inputValue = e.target.value;
+        console.log(this._inputValue);
+    };
+
+    // this.closeDown(e, this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this.fieldKey + '_0' : this.fieldKey + '_1')}
+    @action activateContent = () => {
+        this.childActive = true;
+    };
+
+    @action handleRenderGPTClick = () => {
+        // Call the GPT model and get the output
+        this.layoutDoc[`_${this._props.fieldKey}_usePath`] = 'alternate';
+        this._outputValue = '';
+        if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
+    };
+
+    @action handleHover = () => {
+        if (this.revealOp === 'hover') {
+            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip';
+            this.Document.forceActive = false;
+        } else {
+            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover';
+            this.Document.forceActive = true;
+        }
+        //this.revealOp === 'hover' ? (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip') : (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover');
+    };
+
+    @action handleRenderClick = () => {
+        // Call the GPT model and get the output
+        this.layoutDoc[`_${this._props.fieldKey}_usePath`] = undefined;
+    };
+
     getAnchor = (addAsAnnotation: boolean, pinProps?: PinProps) => {
         const anchor = Docs.Create.ConfigDocument({
             title: 'CompareAnchor:' + this.Document.title,
@@ -271,13 +384,29 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     }
 
     gptFlashcardPile = async () => {
-        var text = await this.askGPT(GPTCallType.FLASHCARD);
+        var text = await this.askGPT(GPTCallType.STACK);
+        console.log(text);
 
         var senArr = text?.split('Question: ');
         var collectionArr: Doc[] = [];
         for (let i = 1; i < senArr?.length!; i++) {
             const newDoc = Docs.Create.ComparisonDocument(senArr![i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
-            newDoc.text = senArr![i];
+            // newDoc.text = senArr![i];
+            // const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
+            // newDoc[this.fieldKey + '_0'] = Docs.Create.TextDocument(dataSplit[1]);
+            // newDoc[this.fieldKey + '_1'] = Docs.Create.TextDocument(dataSplit[0]);
+            // newDoc['backgroundColor'] = 'lightgray';
+            // newDoc.image =
+            if (StrCast(senArr![i]).includes('Keyword: ')) {
+                console.log('Here');
+                const img = await this.fetchImages(StrCast(senArr![i]).split('Keyword: ')[1]);
+                console.log(img);
+                DocCast(newDoc).image = img;
+                // DocCast(DocCast(newDoc).dataDoc)['image'] = img;
+                Doc.AddToMyOverlay(img);
+            }
+
+            console.log('ARR' + i + senArr![i]);
             collectionArr.push(newDoc);
         }
         this.createFlashcardPile(collectionArr, true);
@@ -297,110 +426,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     hoverFlip = (side: string | undefined) => {
         if (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'hover') this.layoutDoc[`_${this._props.fieldKey}_usePath`] = side;
     };
-    /**
-     * Creates the button used to flip the flashcards.
-     */
-    @computed get overlayAlternateIcon() {
-        const usepath = this.layoutDoc[`_${this._props.fieldKey}_usePath`];
-        return (
-            <Tooltip title={<div className="dash-tooltip">flip</div>}>
-                <div
-                    className="formattedTextBox-alternateButton"
-                    onPointerDown={e =>
-                        setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => {
-                            if (!this.layoutDoc[`_${this._props.fieldKey}_revealOp`] || this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'flip') {
-                                this.flipFlashcard();
-
-                                // console.log('Print Front of cards: ' + (RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text ?? ''));
-                                // console.log('Print Back of cards: ' + (RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text ?? ''));
-                            }
-                        })
-                    }
-                    style={{
-                        background: this.revealOp === 'hover' ? 'gray' : usepath === 'alternate' ? 'white' : 'black',
-                        color: this.revealOp === 'hover' ? 'black' : usepath === 'alternate' ? 'black' : 'white',
-                        display: 'inline-block',
-                    }}>
-                    <div key="alternate" className="formattedTextBox-flip">
-                        <FontAwesomeIcon icon="turn-up" size="1x" />
-                    </div>
-                </div>
-            </Tooltip>
-        );
-    }
-
-    @computed get flashcardMenu() {
-        return (
-            <div>
-                <Tooltip
-                    title={
-                        this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? (
-                            <div className="dash-tooltip">Flip to front side to use GPT</div>
-                        ) : (
-                            <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>
-                        )
-                    }>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={e => (!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? this.askGPT(GPTCallType.CHATCARD) : null)}>
-                        <FontAwesomeIcon icon="lightbulb" size="xl" />
-                    </div>
-                </Tooltip>
-                {DocCast(this.Document.embedContainer).type_collection === 'carousel' ? null : (
-                    <div>
-                        <Tooltip title={<div>Create a flashcard pile</div>}>
-                            <div style={{ position: 'absolute', bottom: '3px', right: '74px', cursor: 'pointer' }} onPointerDown={e => this.createFlashcardPile([this.Document], false)}>
-                                <FontAwesomeIcon icon="folder-plus" size="xl" />
-                            </div>
-                        </Tooltip>
-                        <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
-                            <div style={{ position: 'absolute', bottom: '3px', right: '104px', cursor: 'pointer' }} onClick={e => this.gptFlashcardPile()}>
-                                <FontAwesomeIcon icon="layer-group" size="xl" />
-                            </div>
-                        </Tooltip>
-                    </div>
-                )}
-                <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }} onClick={e => this.handleHover()}>
-                        <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="hand-point-up" size="xl" />
-                    </div>
-                </Tooltip>
-                {/* <Tooltip title={<div className="dash-tooltip">Remove this side of the flashcard</div>}>
-                    <div
-                        style={{ position: 'absolute', bottom: '3px', right: '80px', cursor: 'pointer' }}
-                        onPointerDown={e => this.closeDown(e, this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._props.fieldKey + '_1' : this._props.fieldKey + '_0')}>
-                        <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="trash-can" size="xl" />
-                    </div>
-                </Tooltip> */}
-                {/* {this.overlayAlternateIcon} */}
-            </div>
-        );
-    }
-    // this.closeDown(e, this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this.fieldKey + '_0' : this.fieldKey + '_1')}
-    @action activateContent = () => {
-        this.childActive = true;
-    };
-
-    @action handleRenderGPTClick = () => {
-        // Call the GPT model and get the output
-        this.layoutDoc[`_${this._props.fieldKey}_usePath`] = 'alternate';
-        this._outputValue = '';
-        if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
-    };
-
-    @action handleHover = () => {
-        if (this.revealOp === 'hover') {
-            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip';
-            this.Document.forceActive = false;
-        } else {
-            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover';
-            this.Document.forceActive = true;
-        }
-        //this.revealOp === 'hover' ? (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip') : (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover');
-    };
-
-    @action handleRenderClick = () => {
-        // Call the GPT model and get the output
-        this.layoutDoc[`_${this._props.fieldKey}_usePath`] = undefined;
-    };
 
     animateRes = (resIndex: number, newText: string, callType: GPTCallType) => {
         if (resIndex < newText.length) {
@@ -448,15 +473,17 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             if (callType == GPTCallType.CHATCARD) {
                 DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
                 // this.flipFlashcard();
-            }
-            if (callType == GPTCallType.QUIZ) this._outputValue = res;
+            } else if (callType == GPTCallType.QUIZ) this._outputValue = res;
             // DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
             // this._outputValue = res;
             else if (callType === GPTCallType.FLASHCARD) {
                 // console.log(res);
                 this._loading = false;
                 return res;
+            } else if (callType === GPTCallType.STACK) {
             }
+            this._loading = false;
+            return res;
             // console.log(res);
         } catch (err) {
             console.error('GPT call failed');
@@ -470,7 +497,160 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     //     const cm = ContextMenu.Instance;
     //     cm.addItem({ description: 'Create an Answer on the Back', event: () => this.askGPT(GPTCallType.CHATCARD), icon: 'pencil' });
     // };
-    @observable childActive = false;
+
+    findImageTags = async () => {
+        // const d = DocCast(this.dataDoc[this.props.fieldKey + '_0']);
+        // const copy = Doc.MakeCopy(this.Document, true);
+        const c = this.DocumentView?.().ContentDiv!.getElementsByTagName('img');
+        // this.ProseRef?.getElementsByTagName('img');
+        if (c?.length === 0) await this.askGPT(GPTCallType.CHATCARD);
+        if (c) {
+            this._loading = true;
+            for (let i of c) {
+                console.log(i);
+                if (i.className !== 'ProseMirror-separator') await this.getImageDesc(i.src);
+            }
+            this._loading = false;
+            this.flipFlashcard();
+        }
+        // console.log('HI' + this.ProseRef?.getElementsByTagName('img'));
+    };
+
+    static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
+        try {
+            const response = await fetch(imageUrl);
+            const blob = await response.blob();
+
+            return new Promise((resolve, reject) => {
+                const reader = new FileReader();
+                reader.readAsDataURL(blob);
+                reader.onloadend = () => resolve(reader.result as string);
+                reader.onerror = error => reject(error);
+            });
+        } catch (error) {
+            console.error('Error:', error);
+            throw error;
+        }
+    };
+
+    getImageDesc = async (u: string) => {
+        try {
+            const hrefBase64 = await ComparisonBox.imageUrlToBase64(u);
+            const response = await gptImageLabel(hrefBase64, 'Answer the following question as a short flashcard response. Do not include a label.' + (this.dataDoc.text as RichTextField)?.Text);
+
+            DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = response;
+        } catch (error) {
+            console.log('Error');
+        }
+    };
+
+    fetchImages = async (selection: string) => {
+        try {
+            const { data } = await axios.get(`${API_URL}?query=${selection}&page=1&per_page=${1}&client_id=Q4zruu6k6lum2kExiGhLNBJIgXDxD6NNj0SRHH_XXU0`);
+            console.log(data.results);
+            const imageSnapshot = Docs.Create.ImageDocument(data.results[0].urls.small, {
+                _nativeWidth: Doc.NativeWidth(this.layoutDoc),
+                _nativeHeight: Doc.NativeHeight(this.layoutDoc),
+                x: NumCast(this.layoutDoc.x),
+                y: NumCast(this.layoutDoc.y),
+                onClick: FollowLinkScript(),
+                _width: 150,
+                _height: 150,
+                title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
+            });
+            // return imageSnapshot;
+            imageSnapshot['x'] = this.layoutDoc['x'];
+            imageSnapshot['y'] = this.layoutDoc['y'];
+
+            // const newDoc = Docs.Create.TextDocument(selection);
+            // newDoc.text = selection;
+            // newDoc['backgroundColor'] = 'lightgray';
+
+            // Doc.AddToMyOverlay(imageSnapshot);
+            return imageSnapshot;
+            return data.results[0].urls.small;
+            // Doc.AddEmbedding(newDoc, imageSnapshot);
+            // Doc.MakeEmbedding(imageSnapshot);
+            // return imageSnapshot;
+            // imageSnapshot['zIndex'] = 20000;
+            // this._props.DocumentView?.()._props.addDocument?.(newDoc);
+        } catch (error) {
+            console.log(error);
+        }
+    };
+
+    // handleSelection = async (selection: string, newDoc: Doc) => {
+    //     const images = await this.fetchImages(selection);
+    //     return images;
+    // // Doc.AddDocToList(Doc.MyRecentlyClosed, 'data', dashDoc, undefined, true, true);
+    // images!.embedContainer = newDoc;
+    // Doc.AddEmbedding(newDoc, images!);
+    // const c = this.DocumentView?.().ContentDiv!.getElementsByClassName('afterBox-cont');
+    // for (let i in c) {
+    //     console.log('HERE' + i);
+    // }
+    // this.addDoc(images!, this.fieldKey + '_0');
+    // Doc.AddEmbedding(newDoc, images!);
+    // this._props.
+    // Doc.AddToMyOverlay(images!);
+    // const node = schema.nodes.dashDoc.create({
+    //     width: NumCast(images?._width),
+    //     height: NumCast(images?._height),
+    //     title: 'dashDoc',
+    //     docId: images![Id],
+    //     float: 'unset',
+    // });
+    // };
+
+    @observable listening = false;
+    @observable transcriptElement = '';
+    SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+    recognition = new this.SpeechRecognition();
+
+    handleResult = (e: SpeechRecognitionEvent) => {
+        let interimTranscript = '';
+        let finalTranscript = '';
+        for (let i = e.resultIndex; i < e.results.length; i++) {
+            const transcript = e.results[i][0].transcript;
+            if (e.results[i].isFinal) {
+                finalTranscript += transcript;
+            } else {
+                interimTranscript += transcript;
+            }
+        }
+        console.log(interimTranscript);
+        this._inputValue += finalTranscript;
+    };
+
+    setListening = () => {
+        const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+        if (SpeechRecognition) {
+            console.log('here');
+            // const recognition = new SpeechRecognition();
+            this.recognition.continuous = true; // Continue listening even if the user pauses
+            this.recognition.interimResults = true; // Show interim results
+            this.recognition.lang = 'en-US'; // Set language (optional)
+            this.recognition.onresult = this.handleResult.bind(this);
+            // recognition.onend = this.handleEnd.bind(this);
+
+            // this.handleResult;
+            // recognition.stop();
+        }
+    };
+
+    setLanguage = (language: string) => {
+        this.recognition.lang = language;
+    };
+
+    startListening = () => {
+        this.recognition.start();
+        this.listening = true;
+    };
+
+    stopListening = () => {
+        this.recognition.stop();
+        this.listening = false;
+    };
 
     render() {
         const clearButton = (which: string) => (
@@ -542,13 +722,62 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             // add text box to each side when comparison box is first created
             // (!this.dataDoc[this.fieldKey + '_0'] && this.dataDoc[this._props.fieldKey + '_0'] !== 'empty')
             if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
-                const dataSplit = StrCast(this.dataDoc.data).split('Answer: ');
+                const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
                 const newDoc = Docs.Create.TextDocument(dataSplit[1]);
+                if (this.Document.image) DocCast(newDoc).image = DocCast(this.Document.image);
+                console.log('D' + this.Document.image);
+                //if (DocCast(DocCast(newDoc).dataDoc)) DocCast(DocCast(newDoc).dataDoc)['image'] = this.dataDoc['image'];
+
+                // console.log('HI' + this.Document.image);
+                // const imageSnapshot = Docs.Create.ImageDocument(StrCast(this.Document.image), {
+                //     _nativeWidth: Doc.NativeWidth(this.layoutDoc),
+                //     _nativeHeight: Doc.NativeHeight(this.layoutDoc),
+                //     x: NumCast(this.layoutDoc.x),
+                //     y: NumCast(this.layoutDoc.y),
+                //     onClick: FollowLinkScript(),
+                //     _width: 150,
+                //     _height: 150,
+                //     title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
+                // });
+                // // return imageSnapshot;
+                // imageSnapshot['x'] = this.layoutDoc['x'];
+                // imageSnapshot['y'] = this.layoutDoc['y'];
+
+                // const newDoc = Docs.Create.TextDocument(selection);
+                // newDoc.text = selection;
+                // newDoc['backgroundColor'] = 'lightgray';
+                // newDoc.data = imageSnapshot;
+                // this.createDropTarget(this., this.fieldKey + '_0', 0)
+                // Doc.AddEmbedding(imageSnapshot, newDoc);
+                // Doc.SetContainer(imageSnapshot, newDoc);
+                // Doc.AddToMyOverlay(imageSnapshot);
+
+                // if (StrCast(this.dataDoc.data).includes('Keyword: ')) {
+                //     console.log('HERE' + this.dataDoc.data);
+                //     this.fetchImages(StrCast(this.dataDoc.data).split('Keyword: ')[1]);
+                // }
+                //     // const node = schema.nodes.dashDoc.create({
+                //     //     width: NumCast(newDoc._width),
+                //     //     height: NumCast(newDoc._height),
+                //     //     title: 'dashDoc',
+                //     //     docId: newDoc[Id],
+                //     //     float: 'unset',
+                //     // });
+                //     // Doc.AddEmbedding(images!, newDoc);
+                //     // Doc.SetContainer(images, this.newDoc);
+                // } else {
+                // newDoc.text = dataSplit[1];
+                // newDoc['backgroundColor'] = 'lightgray';
+                this.addDoc(newDoc, this.fieldKey + '_0');
+                // this.addDoc()
+                // }
+                // newDoc?.addDocument?.(images);
+
                 // if there is text from the pdf ai cards, put the question on the front side.
                 // eslint-disable-next-line prefer-destructuring
                 // newDoc.text = dataSplit[1];
-                newDoc['backgroundColor'] = 'lightgray';
-                this.addDoc(newDoc, this.fieldKey + '_0');
+                // newDoc['backgroundColor'] = 'lightgray';
+                // this.addDoc(newDoc, this.fieldKey + '_0');
                 // DocCast(this.dataDoc[this.fieldKey + '_0'])[DocData].text = dataSplit[1];
                 // DocCast(this.dataDoc[this.fieldKey + '_0']).text = dataSplit[1];
                 // console.log('HI' + DocCast(this.dataDoc[this.fieldKey + '_0']).text);
@@ -556,7 +785,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             }
 
             if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
-                const dataSplit = StrCast(this.dataDoc.data).split('Answer: ');
+                const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
                 const newDoc = Docs.Create.TextDocument(dataSplit[0]);
                 this.addDoc(newDoc, this.fieldKey + '_1');
                 // if there is text from the pdf ai cards, put the answer on the alternate side.
@@ -592,15 +821,21 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                 </div>
                             ) : null}
                         </div>
-                        <div className="submit-button" style={{ overflow: 'hidden', display: this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 'none' : 'flex' }}>
-                            <button type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px' }}>
-                                Submit
-                            </button>
-                        </div>
-                        <div className="submit-button" style={{ overflow: 'hidden', marginBottom: '2px', display: this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 'flex' : 'none' }}>
-                            <button type="button" onClick={this.handleRenderClick} style={{ borderRadius: '2px' }}>
-                                Redo the Question
-                            </button>
+                        <div style={{ display: 'inline-block' }}>
+                            <div className="submit-button" style={{ overflow: 'hidden' }}>
+                                <button style={{ width: '10px' }} onClick={this.listening ? this.stopListening : this.startListening}>
+                                    {<FontAwesomeIcon icon="microphone" size="lg" />}
+                                </button>
+                                {this.layoutDoc[`_${this._props.fieldKey}_usePath`] !== 'alternate' ? (
+                                    <button type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px' }}>
+                                        Submit
+                                    </button>
+                                ) : (
+                                    <button type="button" onClick={this.handleRenderClick} style={{ borderRadius: '2px' }}>
+                                        Redo the Question
+                                    </button>
+                                )}
+                            </div>
                         </div>
                     </div>
                 );
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index fde9fe582..65a645560 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -375,7 +375,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         this._loading = true;
         try {
             const hrefBase64 = await this.createCanvas();
-            const response = await gptImageLabel(hrefBase64, 'Make flashcards out of this text with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ');
+            const response = await gptImageLabel(hrefBase64, 'Make flashcards out of this image with each question and answer labeled as "question" and "answer". Do not label each flashcard and do not include asterisks: ');
             console.log(response);
             AnchorMenu.Instance.transferToFlashcard(response);
         } catch (error) {
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 2091ee89a..0be51816f 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -909,11 +909,11 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
         );
         const appearance = cm.findByDescription('Appearance...');
         const appearanceItems: ContextMenuProps[] = appearance && 'subitems' in appearance ? appearance.subitems : [];
-        appearanceItems.push({
-            description: 'Find image tags',
-            event: this.findImageTags,
-            icon: !this.Document._layout_noSidebar ? 'eye-slash' : 'eye',
-        });
+        // appearanceItems.push({
+        //     description: 'Find image tags',
+        //     event: this.findImageTags,
+        //     icon: !this.Document._layout_noSidebar ? 'eye-slash' : 'eye',
+        // });
         appearanceItems.push({
             description: !this.Document._layout_noSidebar ? 'Hide Sidebar Handle' : 'Show Sidebar Handle',
             event: () => {
@@ -1040,10 +1040,14 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
         const hrefComplete = `${hrefParts[0]}_o.${hrefParts[1]}`;
         try {
             const hrefBase64 = await FormattedTextBox.imageUrlToBase64(u);
-            const response = await gptImageLabel(hrefBase64, 'Tell me what you see in this image');
+            const response = await gptImageLabel(
+                hrefBase64,
+                'Make flashcards out of this text and image with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ' + (this.dataDoc.text as RichTextField)?.Text
+            );
             //const response = await gptImageLabel(u, 'Make flashcards out of this text with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ');
-            console.log(response);
-            // AnchorMenu.Instance.transferToFlashcard(response);
+            // console.log(response);
+            AnchorMenu.Instance.transferToFlashcard(response || 'Something went wrong');
+            // this._props.addto_;
             // this.Document[DocData].description = response.trim();
             // return response; // Return the response
         } catch (error) {
@@ -1399,7 +1403,35 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
             { fireImmediately: true }
         );
         this.tryUpdateScrollHeight();
+
+        console.log('S' + this.Document.image);
+        console.log('S' + DocCast(this.Document).image);
+        if (this.Document.image) {
+            // const node = schema.nodes.dashDoc.create({
+            //     width: 200,
+            //     height: 200,
+            //     title: 'dashDoc',
+            //     docId: DocCast(this.Document.image)[Id],
+            //     float: 'unset',
+            // });
+
+            // DocCast(this.Document.image)._freeform_fitContentsToBox = true;
+            // Doc.SetContainer(DocCast(this.Document.image), this.Document);
+            // const view = this._editorView!;
+            // try {
+            //     this._inDrop = true;
+            //     const pos = view.posAtCoords({ left: 0, top: 0 })?.pos;
+            //     pos && view.dispatch(view.state.tr.insert(pos, node));
+            // } catch (err) {
+            //     console.log('Drop failed', err);
+            // }
+            // console.log('LKSDFLJ');
+            this.addDocument?.(DocCast(this.Document.image));
+        }
+
+        //if (this.Document.image) this.addDocument?.(DocCast(this.Document.image));
         setTimeout(this.tryUpdateScrollHeight, 250);
+        AnchorMenu.Instance.addToCollection = this._props.DocumentView?.()._props.addDocument;
     }
 
     clipboardTextSerializer = (slice: Slice): string => {
diff --git a/src/client/views/pdf/AnchorMenu.tsx b/src/client/views/pdf/AnchorMenu.tsx
index 87031487f..dcd76979f 100644
--- a/src/client/views/pdf/AnchorMenu.tsx
+++ b/src/client/views/pdf/AnchorMenu.tsx
@@ -142,6 +142,7 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
             console.log('Arr ' + i + ': ' + senArr[i]);
             const newDoc = Docs.Create.ComparisonDocument(senArr[i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
             newDoc.text = senArr[i];
+
             collectionArr.push(newDoc);
         }
         // create a new carousel collection of these flashcards
@@ -152,6 +153,7 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
             _layout_autoHeight: true,
         });
 
+        console.log(collectionArr);
         newCol.x = this._x;
         newCol.y = this._y;
         newCol.zIndex = 100;
diff --git a/src/client/views/pdf/PDFViewer.tsx b/src/client/views/pdf/PDFViewer.tsx
index 27a523465..1af7b1fc0 100644
--- a/src/client/views/pdf/PDFViewer.tsx
+++ b/src/client/views/pdf/PDFViewer.tsx
@@ -34,6 +34,8 @@ import { Docs } from '../../documents/Documents';
 import './PDFViewer.scss';
 import { GPTCallType, gptAPICall } from '../../apis/gpt/GPT';
 import ReactLoading from 'react-loading';
+import html2canvas from 'html2canvas';
+import SpeechRecognition, { useSpeechRecognition } from 'react-speech-recognition';
 
 // pdfjsLib.GlobalWorkerOptions.workerSrc = `/assets/pdf.worker.js`;
 // The workerSrc property shall be specified.
@@ -66,6 +68,43 @@ export class PDFViewer extends ObservableReactComponent<IViewerProps> {
         super(props);
         makeObservable(this);
     }
+    // @observable transcriptRef = React.createRef();
+    // @observable startBtnRef = React.createRef();
+    // @observable stopBtnRef = React.createRef();
+    // @observable transcriptElement = '';
+
+    // handleResult = (e: SpeechRecognitionEvent) => {
+    //     let interimTranscript = '';
+    //     let finalTranscript = '';
+    //     console.log('H');
+    //     for (let i = e.resultIndex; i < e.results.length; i++) {
+    //         const transcript = e.results[i][0].transcript;
+    //         if (e.results[i].isFinal) {
+    //             finalTranscript += transcript;
+    //         } else {
+    //             interimTranscript += transcript;
+    //         }
+    //     }
+    //     console.log(interimTranscript);
+    //     this.transcriptElement = finalTranscript || interimTranscript;
+    // };
+
+    // startListening = () => {
+    //     const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+    //     if (SpeechRecognition) {
+    //         console.log('here');
+    //         const recognition = new SpeechRecognition();
+    //         recognition.continuous = true; // Continue listening even if the user pauses
+    //         recognition.interimResults = true; // Show interim results
+    //         recognition.lang = 'en-US'; // Set language (optional)
+    //         recognition.onresult = this.handleResult.bind(this);
+    //         // recognition.onend = this.handleEnd.bind(this);
+
+    //         recognition.start();
+    //         // this.handleResult;
+    //         // recognition.stop();
+    //     }
+    // };
 
     @observable _pageSizes: { width: number; height: number }[] = [];
     @observable _savedAnnotations = new ObservableMap<number, HTMLDivElement[]>();
@@ -410,7 +449,106 @@ export class PDFViewer extends ObservableReactComponent<IViewerProps> {
     };
 
     gptPDFFlashcards = async () => {
+        // const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+        // if (SpeechRecognition) {
+        //     this.recognition = new SpeechRecognition();
+        //     this.recognition.continuous = true; // Continue listening even if the user pauses
+        //     this.recognition.interimResults = true; // Show interim results
+        //     this.recognition.lang = 'en-US'; // Set language (optional)
+
+        //     this.recognition.onresult = this.handleResult;
+        //     this.recognition.onerror = this.handleError;
+        //     this.recognition.onend = this.handleEnd;
+        // } else {
+        //     console.error("Browser doesn't support Speech Recognition API");
+        // }
+        // const Dictaphone = () => {
+        //     const { transcript, resetTranscript } = useSpeechRecognition();
+
+        //     if (!SpeechRecognition.browserSupportsSpeechRecognition()) {
+        //         return null;
+        //     }
+
+        //     return (
+        //         <div>
+        //             <button onClick={e => SpeechRecognition.startListening}>Start</button>
+        //             <button onClick={e => SpeechRecognition.stopListening}>Stop</button>
+        //             <button onClick={resetTranscript}>Reset</button>
+        //             <p>{transcript}</p>
+        //         </div>
+        //     );
+        // };
+        // const grammar =
+        //     '#JSGF V1.0; grammar colors; public <color> = aqua | azure | beige | bisque | black | blue | brown | chocolate | coral | crimson | cyan | fuchsia | ghostwhite | gold | goldenrod | gray | green | indigo | ivory | khaki | lavender | lime | linen | magenta | maroon | moccasin | navy | olive | orange | orchid | peru | pink | plum | purple | red | salmon | sienna | silver | snow | tan | teal | thistle | tomato | turquoise | violet | white | yellow ;';
+        // const recognition = new SpeechRecognition();
+        // const speechRecognitionList = new SpeechGrammarList();
+        // speechRecognitionList.addFromString(grammar, 1);
+        // recognition.grammars = speechRecognitionList;
+        // recognition.continuous = false;
+        // recognition.lang = 'en-US';
+        // recognition.interimResults = false;
+        // recognition.maxAlternatives = 1;
+
+        // const diagnostic = document.querySelector('.output');
+        // const bg = document.querySelector('html');
+
+        // document.body.onclick = () => {
+        //     recognition.start();
+        //     console.log('Ready to receive a color command.');
+        // };
+
+        // recognition.onresult = event => {
+        //     const color = event.results[0][0].transcript;
+        //     diagnostic!.textContent = `Result received: ${color}`;
+        //     bg!.style.backgroundColor = color;
+        // };
+
+        //const SpeechRecognition = SpeechRecognition || webkitSpeechRecognition;
+
+        // recognition.continous = true;
+        // recognition.interimResults = true;
+        // recognition.lang = 'en-US';
+
         const queryText = this._selectionText;
+
+        // const canvas = await html2canvas();
+        // const image = canvas.toDataURL("image/png", 1.0);
+        // (window as any)
+        //     .html2canvas(this._marqueeref, {
+        //         x: 100,
+        //         y: 100,
+        //         width: 100,
+        //         height: 100,
+        //     })
+        //     .then((canvas: HTMLCanvasElement) => {
+        //         const img = canvas.toDataURL('image/png');
+
+        //         const link = document.createElement('a');
+        //         link.href = img;
+        //         link.download = 'screenshot.png';
+
+        //         document.body.appendChild(link);
+        //         link.click();
+        //         link.remove();
+        //     });
+
+        // var range = window.getSelection()?.getRangeAt(0);
+        // var selectionContents = range?.extractContents();
+        // var div = document.createElement("div");
+        // div.style.color = "yellow";
+        // div.appendChild(selectionContents!);
+        // range!.insertNode(div);
+
+        // const canvas = document.createElement('canvas');
+        // const scaling = 1 / (this._props.NativeDimScaling?.() || 1);
+        // const w = AnchorMenu.Instance.marqueeWidth * scaling;
+        // const h = AnchorMenu.Instance.marqueeHeight * scaling;
+        // canvas.width = w;
+        // canvas.height = h;
+        // const ctx = canvas.getContext('2d'); // draw image to canvas. scale to target dimensions
+        // if (ctx) {
+        //     this._marqueeref && ctx.drawImage(div, NumCast(this._marqueeref.current?.left) * scaling, NumCast(this._marqueeref.current?.top) * scaling, w, h, 0, 0, w, h);
+        // }
         this._loading = true;
         try {
             if (this._selectionText === '') {
-- 
cgit v1.2.3-70-g09d2


From 20611e69b3f4afca5d35a440278f4dcbbda523c7 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Mon, 24 Jun 2024 13:05:02 -0400
Subject: language menu

---
 src/client/views/ContextMenu.scss                  |  4 +-
 src/client/views/ContextMenu.tsx                   |  8 +-
 src/client/views/ContextMenuItem.tsx               |  2 +-
 src/client/views/nodes/ComparisonBox.scss          | 87 +++++++++++++++++++++-
 src/client/views/nodes/ComparisonBox.tsx           | 55 +++++++++-----
 src/client/views/nodes/ImageBox.tsx                |  2 +-
 .../views/nodes/formattedText/FormattedTextBox.tsx |  2 +-
 src/client/views/pdf/AnchorMenu.tsx                |  9 ++-
 src/client/views/pdf/PDFViewer.tsx                 |  2 +-
 9 files changed, 137 insertions(+), 34 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/ContextMenu.scss b/src/client/views/ContextMenu.scss
index 232362c5c..13ef8acec 100644
--- a/src/client/views/ContextMenu.scss
+++ b/src/client/views/ContextMenu.scss
@@ -116,7 +116,9 @@
 }
 
 .contextMenu-itemSelected {
-    background: lightgoldenrodyellow;
+    background: white;
+    color: black;
+    // background: lightgoldenrodyellow;
     border-style: none;
 }
 
diff --git a/src/client/views/ContextMenu.tsx b/src/client/views/ContextMenu.tsx
index d784a14b8..348d248c8 100644
--- a/src/client/views/ContextMenu.tsx
+++ b/src/client/views/ContextMenu.tsx
@@ -182,7 +182,8 @@ export class ContextMenu extends ObservableReactComponent<{}> {
 
     @computed get menuItems() {
         if (!this._searchString) {
-            return this._items.map((item, ind) => <ContextMenuItem key={item.description + ind} {...item} noexpand={this.itemsNeedSearch ? true : (item as any).noexpand} closeMenu={this.closeMenu} />);
+            console.log('HERESDF');
+            return this._items.map((item, ind) => <ContextMenuItem key={item.description + ind} {...item} selected={ind === this._selectedIndex} noexpand={this.itemsNeedSearch ? true : (item as any).noexpand} closeMenu={this.closeMenu} />);
         }
         return this.filteredItems.map((value, index) =>
             Array.isArray(value) ? (
@@ -249,6 +250,11 @@ export class ContextMenu extends ObservableReactComponent<{}> {
         );
     }
 
+    @action
+    setLangIndex = (ind: number) => {
+        this._selectedIndex = ind;
+    };
+
     @action
     onKeyDown = (e: React.KeyboardEvent) => {
         if (e.key === 'ArrowDown') {
diff --git a/src/client/views/ContextMenuItem.tsx b/src/client/views/ContextMenuItem.tsx
index eb1030eec..21faad0c1 100644
--- a/src/client/views/ContextMenuItem.tsx
+++ b/src/client/views/ContextMenuItem.tsx
@@ -12,7 +12,7 @@ export interface OriginalMenuProps {
     description: string;
     event: (stuff?: any) => void;
     undoable?: boolean;
-    icon: IconProp | JSX.Element; // maybe should be optional (icon?)
+    icon?: IconProp | JSX.Element; // maybe should be optional (icon?)
     closeMenu?: () => void;
 }
 
diff --git a/src/client/views/nodes/ComparisonBox.scss b/src/client/views/nodes/ComparisonBox.scss
index f7389e39b..41ff56514 100644
--- a/src/client/views/nodes/ComparisonBox.scss
+++ b/src/client/views/nodes/ComparisonBox.scss
@@ -28,17 +28,96 @@
         padding-bottom: 10px;
         padding-left: 5px;
         padding-right: 5px;
-        width: 100%;
+        // width: 80%;
         border-radius: 2px;
         height: 15%;
-        display: flex;
+        display: inline-block;
         bottom: 0;
+        // right: 0;
+
+        &.schema-header-button {
+            color: gray;
+            margin: 3px;
+            cursor: pointer;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+
+            svg {
+                width: 15px;
+            }
+        }
+
+        &.submit {
+            width: 80%;
+            // float: right;
+
+            // position: absolute;
+            // position: 10px;
+            // padding-left: 35%;
+            // padding-right: 80%;
+            // // width: 80px;
+            // // right: 0;
+            // right: 0;
+            // bottom: 0;
+        }
+        &.record {
+            width: 20%;
+            float: left;
+            border-radius: 2px;
+            // right: 0;
+            // height: 30%;
+        }
 
         button {
-            flex: 1;
-            position: relative;
+            // flex: 1;
+            // position: relative;
         }
     }
+
+    .dropbtn {
+        background-color: #3498db;
+        color: white;
+        padding: 16px;
+        font-size: 16px;
+        border: none;
+    }
+
+    .dropup {
+        position: absolute;
+        display: inline-block;
+        margin-top: 150px;
+        bottom: 0;
+    }
+
+    .dropup-content {
+        display: none;
+        position: absolute;
+        background-color: #f1f1f1;
+        min-width: 160px;
+        bottom: 40px;
+        z-index: 1000;
+    }
+
+    .dropup-content a {
+        color: black;
+        padding: 12px 16px;
+        text-decoration: none;
+        display: block;
+    }
+
+    .dropup-content a:hover {
+        background-color: #ccc;
+    }
+
+    .dropup:hover .dropup-content {
+        display: block;
+    }
+
+    .dropup:hover .dropbtn {
+        background-color: #2980b9;
+    }
+
     textarea {
         flex: 1;
         padding: 10px;
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 06ecf8893..3d2a1f0a9 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -602,10 +602,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     // });
     // };
 
-    @observable listening = false;
+    @observable private _listening = false;
     @observable transcriptElement = '';
     SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
-    recognition = new this.SpeechRecognition();
+    @observable recognition = new this.SpeechRecognition();
 
     handleResult = (e: SpeechRecognitionEvent) => {
         let interimTranscript = '';
@@ -625,31 +625,39 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     setListening = () => {
         const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
         if (SpeechRecognition) {
-            console.log('here');
-            // const recognition = new SpeechRecognition();
-            this.recognition.continuous = true; // Continue listening even if the user pauses
-            this.recognition.interimResults = true; // Show interim results
-            this.recognition.lang = 'en-US'; // Set language (optional)
+            this.recognition.continuous = true;
+            this.recognition.interimResults = true;
+            this.recognition.lang = 'en-US';
             this.recognition.onresult = this.handleResult.bind(this);
-            // recognition.onend = this.handleEnd.bind(this);
-
-            // this.handleResult;
-            // recognition.stop();
         }
+        ContextMenu.Instance.setLangIndex(0);
     };
 
-    setLanguage = (language: string) => {
+    setLanguage = (e: React.MouseEvent, language: string, ind: number) => {
         this.recognition.lang = language;
+        ContextMenu.Instance.setLangIndex(ind);
     };
 
     startListening = () => {
         this.recognition.start();
-        this.listening = true;
+        this._listening = true;
     };
 
     stopListening = () => {
         this.recognition.stop();
-        this.listening = false;
+        this._listening = false;
+    };
+
+    openContextMenu = (x: number, y: number) => {
+        ContextMenu.Instance.clearItems();
+        ContextMenu.Instance.addItem({ description: 'English', event: e => this.setLanguage(e, 'en-US', 0) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Spanish', event: e => this.setLanguage(e, 'es-ES', 1 )}); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'French', event: e => this.setLanguage(e, 'fr-FR', 2) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Italian', event: e => this.setLanguage(e, 'it-IT', 3) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Mandarin Chinese', event: e => this.setLanguage(e, 'zh-CH', 4) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Japanese', event: e => this.setLanguage(e, 'ja', 5) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Korean', event: e => this.setLanguage(e, 'ko', 6) }); //prettier-ignore
+        ContextMenu.Instance.displayMenu(x, y);
     };
 
     render() {
@@ -725,7 +733,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
                 const newDoc = Docs.Create.TextDocument(dataSplit[1]);
                 if (this.Document.image) DocCast(newDoc).image = DocCast(this.Document.image);
-                console.log('D' + this.Document.image);
+                // console.log('D' + this.Document.image);
                 //if (DocCast(DocCast(newDoc).dataDoc)) DocCast(DocCast(newDoc).dataDoc)['image'] = this.dataDoc['image'];
 
                 // console.log('HI' + this.Document.image);
@@ -821,17 +829,24 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                 </div>
                             ) : null}
                         </div>
-                        <div style={{ display: 'inline-block' }}>
-                            <div className="submit-button" style={{ overflow: 'hidden' }}>
-                                <button style={{ width: '10px' }} onClick={this.listening ? this.stopListening : this.startListening}>
+                        <div>
+                            <div className="submit-button" style={{ overflow: 'hidden', display: 'flex', width: '100%' }}>
+                                <div
+                                    className="submit-buttonschema-header-button"
+                                    onPointerDown={e => this.openContextMenu(e.clientX, e.clientY)}
+                                    style={{ position: 'absolute', top: '1px', left: '11px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
+                                    <FontAwesomeIcon color={'white'} icon="caret-down" />
+                                </div>
+                                <button className="submit-buttonrecord" onClick={this._listening ? this.stopListening : this.startListening} style={{ background: this._listening ? 'lightgray' : '', borderRadius: '2px' }}>
                                     {<FontAwesomeIcon icon="microphone" size="lg" />}
                                 </button>
+
                                 {this.layoutDoc[`_${this._props.fieldKey}_usePath`] !== 'alternate' ? (
-                                    <button type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px' }}>
+                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '300%' }}>
                                         Submit
                                     </button>
                                 ) : (
-                                    <button type="button" onClick={this.handleRenderClick} style={{ borderRadius: '2px' }}>
+                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderClick} style={{ borderRadius: '2px' }}>
                                         Redo the Question
                                     </button>
                                 )}
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index 65a645560..93c07f3a8 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -377,7 +377,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
             const hrefBase64 = await this.createCanvas();
             const response = await gptImageLabel(hrefBase64, 'Make flashcards out of this image with each question and answer labeled as "question" and "answer". Do not label each flashcard and do not include asterisks: ');
             console.log(response);
-            AnchorMenu.Instance.transferToFlashcard(response);
+            AnchorMenu.Instance.transferToFlashcard(response, NumCast(this.layoutDoc['x']), NumCast(this.layoutDoc['y']));
         } catch (error) {
             console.log('Error');
         }
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 0be51816f..3c12db965 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -1046,7 +1046,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
             );
             //const response = await gptImageLabel(u, 'Make flashcards out of this text with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ');
             // console.log(response);
-            AnchorMenu.Instance.transferToFlashcard(response || 'Something went wrong');
+            AnchorMenu.Instance.transferToFlashcard(response || 'Something went wrong', NumCast(this.dataDoc['x']), NumCast(this.dataDoc['y']));
             // this._props.addto_;
             // this.Document[DocData].description = response.trim();
             // return response; // Return the response
diff --git a/src/client/views/pdf/AnchorMenu.tsx b/src/client/views/pdf/AnchorMenu.tsx
index dcd76979f..31941a299 100644
--- a/src/client/views/pdf/AnchorMenu.tsx
+++ b/src/client/views/pdf/AnchorMenu.tsx
@@ -134,7 +134,7 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
      * Transfers the flashcard text generated by GPT on flashcards and creates a collection out them.
      */
 
-    transferToFlashcard = (text: string) => {
+    transferToFlashcard = (text: string, x: number, y: number) => {
         // put each question generated by GPT on the front of the flashcard
         var senArr = text.trim().split('Question: ');
         var collectionArr: Doc[] = [];
@@ -154,9 +154,10 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
         });
 
         console.log(collectionArr);
-        newCol.x = this._x;
-        newCol.y = this._y;
-        newCol.zIndex = 100;
+        newCol.x = x;
+        newCol.y = y;
+        console.log(this._x);
+        newCol.zIndex = 1000;
 
         this.addToCollection?.(newCol);
         this._loading = false;
diff --git a/src/client/views/pdf/PDFViewer.tsx b/src/client/views/pdf/PDFViewer.tsx
index 1af7b1fc0..9d06f81ed 100644
--- a/src/client/views/pdf/PDFViewer.tsx
+++ b/src/client/views/pdf/PDFViewer.tsx
@@ -556,7 +556,7 @@ export class PDFViewer extends ObservableReactComponent<IViewerProps> {
             const res = await gptAPICall(queryText, GPTCallType.FLASHCARD);
 
             console.log(res);
-            AnchorMenu.Instance.transferToFlashcard(res || 'Something went wrong');
+            AnchorMenu.Instance.transferToFlashcard(res || 'Something went wrong', NumCast(this._props.layoutDoc['x']), NumCast(this._props.layoutDoc['y']));
             this._selectionText = '';
         } catch (err) {
             console.error(err);
-- 
cgit v1.2.3-70-g09d2


From 6131fd8fc6cb1245ccfbc5d03d33ffd1498e83f4 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Mon, 8 Jul 2024 15:12:16 -0400
Subject: Speech to phonemes progress

---
 report.20231129.000028.55430.0.001.json            | 1343 ++++++++++++++++++++
 src/client/apis/gpt/GPT.ts                         |    9 +-
 src/client/util/CurrentUserUtils.ts                |    1 +
 src/client/util/DictationManager.ts                |    2 +-
 src/client/views/.MetadataEntryMenu.tsx.icloud     |  Bin 0 -> 171 bytes
 src/client/views/.Touchable.tsx.icloud             |  Bin 0 -> 161 bytes
 .../views/collections/CollectionCarouselView.tsx   |    5 +-
 src/client/views/nodes/.LinkAnchorBox.scss.icloud  |  Bin 0 -> 168 bytes
 src/client/views/nodes/AudioBox.tsx                |   19 +-
 src/client/views/nodes/ComparisonBox.scss          |   10 +-
 src/client/views/nodes/ComparisonBox.tsx           |  258 ++--
 src/client/views/nodes/FieldView.tsx               |    2 +-
 src/client/views/nodes/ImageBox.tsx                |   78 +-
 src/client/views/nodes/LinkAnchorBox.tsx           |  115 ++
 .../nodes/ae6d-ba67-4ace-93aa-0f9e0bd96b88.wav     |  Bin 0 -> 765006 bytes
 .../views/nodes/formattedText/FormattedTextBox.tsx |    7 +-
 src/fields/RichTextField.ts                        |    9 +-
 17 files changed, 1743 insertions(+), 115 deletions(-)
 create mode 100644 report.20231129.000028.55430.0.001.json
 create mode 100644 src/client/views/.MetadataEntryMenu.tsx.icloud
 create mode 100644 src/client/views/.Touchable.tsx.icloud
 create mode 100644 src/client/views/nodes/.LinkAnchorBox.scss.icloud
 create mode 100644 src/client/views/nodes/LinkAnchorBox.tsx
 create mode 100644 src/client/views/nodes/ae6d-ba67-4ace-93aa-0f9e0bd96b88.wav

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/report.20231129.000028.55430.0.001.json b/report.20231129.000028.55430.0.001.json
new file mode 100644
index 000000000..a29d550ae
--- /dev/null
+++ b/report.20231129.000028.55430.0.001.json
@@ -0,0 +1,1343 @@
+
+{
+  "header": {
+    "reportVersion": 1,
+    "event": "Allocation failed - JavaScript heap out of memory",
+    "trigger": "FatalError",
+    "filename": "report.20231129.000028.55430.0.001.json",
+    "dumpEventTime": "2023-11-29T00:00:28Z",
+    "dumpEventTimeStamp": "1701234028056",
+    "processId": 55430,
+    "cwd": "/Users/sarah/Desktop/dash/Dash-Web",
+    "commandLine": [
+      "/Users/sarah/.nvm/versions/node/v12.16.0/bin/node",
+      "--max-old-space-size=2048",
+      "/Users/sarah/Desktop/dash/Dash-Web/node_modules/ts-node-dev/lib/wrap.js",
+      "/Users/sarah/Desktop/dash/Dash-Web/node_modules/fork-ts-checker-webpack-plugin/lib/service.js"
+    ],
+    "nodejsVersion": "v12.16.0",
+    "wordSize": 64,
+    "arch": "x64",
+    "platform": "darwin",
+    "componentVersions": {
+      "node": "12.16.0",
+      "v8": "7.8.279.23-node.31",
+      "uv": "1.34.0",
+      "zlib": "1.2.11",
+      "brotli": "1.0.7",
+      "ares": "1.15.0",
+      "modules": "72",
+      "nghttp2": "1.40.0",
+      "napi": "5",
+      "llhttp": "2.0.4",
+      "http_parser": "2.9.3",
+      "openssl": "1.1.1d",
+      "cldr": "35.1",
+      "icu": "64.2",
+      "tz": "2019c",
+      "unicode": "12.1"
+    },
+    "release": {
+      "name": "node",
+      "lts": "Erbium",
+      "headersUrl": "https://nodejs.org/download/release/v12.16.0/node-v12.16.0-headers.tar.gz",
+      "sourceUrl": "https://nodejs.org/download/release/v12.16.0/node-v12.16.0.tar.gz"
+    },
+    "osName": "Darwin",
+    "osRelease": "22.6.0",
+    "osVersion": "Darwin Kernel Version 22.6.0: Wed Jul  5 22:21:56 PDT 2023; root:xnu-8796.141.3~6/RELEASE_X86_64",
+    "osMachine": "x86_64",
+    "cpus": [
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 19491620,
+        "nice": 0,
+        "sys": 10530730,
+        "idle": 128029940,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 1041080,
+        "nice": 0,
+        "sys": 832510,
+        "idle": 156711500,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 17230140,
+        "nice": 0,
+        "sys": 7308720,
+        "idle": 133550270,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 1101080,
+        "nice": 0,
+        "sys": 813690,
+        "idle": 156678120,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 14246350,
+        "nice": 0,
+        "sys": 5654800,
+        "idle": 138314740,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 1142930,
+        "nice": 0,
+        "sys": 790770,
+        "idle": 156668310,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 12228700,
+        "nice": 0,
+        "sys": 4533960,
+        "idle": 141551990,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 1165420,
+        "nice": 0,
+        "sys": 773220,
+        "idle": 156669740,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 9805920,
+        "nice": 0,
+        "sys": 3386750,
+        "idle": 145216650,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 1177080,
+        "nice": 0,
+        "sys": 759980,
+        "idle": 156674610,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 8806950,
+        "nice": 0,
+        "sys": 2889820,
+        "idle": 146774530,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 1166250,
+        "nice": 0,
+        "sys": 737790,
+        "idle": 156711830,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 7865920,
+        "nice": 0,
+        "sys": 2438950,
+        "idle": 148205800,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 1155370,
+        "nice": 0,
+        "sys": 719580,
+        "idle": 156743860,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 7478040,
+        "nice": 0,
+        "sys": 2248690,
+        "idle": 148810130,
+        "irq": 0
+      },
+      {
+        "model": "Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz",
+        "speed": 2300,
+        "user": 1131070,
+        "nice": 0,
+        "sys": 695000,
+        "idle": 156797450,
+        "irq": 0
+      }
+    ],
+    "networkInterfaces": [
+      {
+        "name": "lo0",
+        "internal": true,
+        "mac": "00:00:00:00:00:00",
+        "address": "127.0.0.1",
+        "netmask": "255.0.0.0",
+        "family": "IPv4"
+      },
+      {
+        "name": "lo0",
+        "internal": true,
+        "mac": "00:00:00:00:00:00",
+        "address": "::1",
+        "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
+        "family": "IPv6",
+        "scopeid": 0
+      },
+      {
+        "name": "lo0",
+        "internal": true,
+        "mac": "00:00:00:00:00:00",
+        "address": "fe80::1",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 1
+      },
+      {
+        "name": "en5",
+        "internal": false,
+        "mac": "ac:de:48:00:11:22",
+        "address": "fe80::aede:48ff:fe00:1122",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 4
+      },
+      {
+        "name": "en0",
+        "internal": false,
+        "mac": "88:66:5a:29:28:77",
+        "address": "fe80::1467:9dad:c3d1:73a7",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 6
+      },
+      {
+        "name": "en0",
+        "internal": false,
+        "mac": "88:66:5a:29:28:77",
+        "address": "10.38.21.14",
+        "netmask": "255.255.192.0",
+        "family": "IPv4"
+      },
+      {
+        "name": "en0",
+        "internal": false,
+        "mac": "88:66:5a:29:28:77",
+        "address": "fde6:e673:d766:4b72:1481:e813:77a2:da34",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 0
+      },
+      {
+        "name": "en0",
+        "internal": false,
+        "mac": "88:66:5a:29:28:77",
+        "address": "2620:6e:6000:3100:148e:201a:1a33:145d",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 0
+      },
+      {
+        "name": "en0",
+        "internal": false,
+        "mac": "88:66:5a:29:28:77",
+        "address": "2620:6e:6000:3100:5c7f:8d3f:76ba:694b",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 0
+      },
+      {
+        "name": "awdl0",
+        "internal": false,
+        "mac": "12:df:77:23:4c:4e",
+        "address": "fe80::10df:77ff:fe23:4c4e",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 9
+      },
+      {
+        "name": "llw0",
+        "internal": false,
+        "mac": "12:df:77:23:4c:4e",
+        "address": "fe80::10df:77ff:fe23:4c4e",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 12
+      },
+      {
+        "name": "utun0",
+        "internal": false,
+        "mac": "00:00:00:00:00:00",
+        "address": "fe80::6616:29f1:d83d:2f8d",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 14
+      },
+      {
+        "name": "utun1",
+        "internal": false,
+        "mac": "00:00:00:00:00:00",
+        "address": "fe80::b4dc:ec9a:5d3d:18ab",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 15
+      },
+      {
+        "name": "utun2",
+        "internal": false,
+        "mac": "00:00:00:00:00:00",
+        "address": "fe80::ce81:b1c:bd2c:69e",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 16
+      },
+      {
+        "name": "utun3",
+        "internal": false,
+        "mac": "00:00:00:00:00:00",
+        "address": "fe80::bd9f:d9d8:700d:2011",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 17
+      },
+      {
+        "name": "utun4",
+        "internal": false,
+        "mac": "00:00:00:00:00:00",
+        "address": "fe80::9a49:1de7:e220:2bb",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 18
+      },
+      {
+        "name": "utun5",
+        "internal": false,
+        "mac": "00:00:00:00:00:00",
+        "address": "fe80::93fe:38cf:1393:3191",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 19
+      },
+      {
+        "name": "utun6",
+        "internal": false,
+        "mac": "00:00:00:00:00:00",
+        "address": "fe80::781d:651c:69a7:3d42",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 20
+      },
+      {
+        "name": "utun7",
+        "internal": false,
+        "mac": "00:00:00:00:00:00",
+        "address": "fe80::b39:d094:2a6d:e0c5",
+        "netmask": "ffff:ffff:ffff:ffff::",
+        "family": "IPv6",
+        "scopeid": 21
+      }
+    ],
+    "host": "sarahs-mbp-2.devices.brown.edu"
+  },
+  "javascriptStack": {
+    "message": "No stack.",
+    "stack": [
+      "Unavailable."
+    ]
+  },
+  "nativeStack": [
+    {
+      "pc": "0x000000010015c8ca",
+      "symbol": "report::TriggerNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, v8::Local<v8::String>) [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    },
+    {
+      "pc": "0x0000000100080f3e",
+      "symbol": "node::OnFatalError(char const*, char const*) [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    },
+    {
+      "pc": "0x0000000100185467",
+      "symbol": "v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    },
+    {
+      "pc": "0x0000000100185403",
+      "symbol": "v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    },
+    {
+      "pc": "0x000000010030b5f5",
+      "symbol": "v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    },
+    {
+      "pc": "0x000000010030ccc4",
+      "symbol": "v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    },
+    {
+      "pc": "0x0000000100309b37",
+      "symbol": "v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    },
+    {
+      "pc": "0x0000000100307afd",
+      "symbol": "v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    },
+    {
+      "pc": "0x00000001003132ba",
+      "symbol": "v8::internal::Heap::AllocateRawWithLightRetry(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    },
+    {
+      "pc": "0x0000000100313341",
+      "symbol": "v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    },
+    {
+      "pc": "0x00000001002e065b",
+      "symbol": "v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType, v8::internal::AllocationOrigin) [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    },
+    {
+      "pc": "0x0000000100618a18",
+      "symbol": "v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    },
+    {
+      "pc": "0x0000000100950c19",
+      "symbol": "Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit [/Users/sarah/.nvm/versions/node/v12.16.0/bin/node]"
+    }
+  ],
+  "javascriptHeap": {
+    "totalMemory": 2154991616,
+    "totalCommittedMemory": 2153815368,
+    "usedMemory": 2136222480,
+    "availableMemory": 51343040,
+    "memoryLimit": 2197815296,
+    "heapSpaces": {
+      "read_only_space": {
+        "memorySize": 262144,
+        "committedMemory": 33088,
+        "capacity": 32808,
+        "used": 32808,
+        "available": 0
+      },
+      "new_space": {
+        "memorySize": 8388608,
+        "committedMemory": 8388528,
+        "capacity": 4189824,
+        "used": 69544,
+        "available": 4120280
+      },
+      "old_space": {
+        "memorySize": 1946566656,
+        "committedMemory": 1946346224,
+        "capacity": 1939183704,
+        "used": 1938974448,
+        "available": 209256
+      },
+      "code_space": {
+        "memorySize": 14323712,
+        "committedMemory": 13779552,
+        "capacity": 12481792,
+        "used": 12481792,
+        "available": 0
+      },
+      "map_space": {
+        "memorySize": 1576960,
+        "committedMemory": 1394440,
+        "capacity": 1280720,
+        "used": 1280720,
+        "available": 0
+      },
+      "large_object_space": {
+        "memorySize": 183824384,
+        "committedMemory": 183824384,
+        "capacity": 183380384,
+        "used": 183380384,
+        "available": 0
+      },
+      "code_large_object_space": {
+        "memorySize": 49152,
+        "committedMemory": 49152,
+        "capacity": 2784,
+        "used": 2784,
+        "available": 0
+      },
+      "new_large_object_space": {
+        "memorySize": 0,
+        "committedMemory": 0,
+        "capacity": 4189824,
+        "used": 0,
+        "available": 4189824
+      }
+    }
+  },
+  "resourceUsage": {
+    "userCpuSeconds": 306.691,
+    "kernelCpuSeconds": 15.3869,
+    "cpuConsumptionPercent": 11.2772,
+    "maxRss": 2231285841920,
+    "pageFaults": {
+      "IORequired": 110,
+      "IONotRequired": 2487718
+    },
+    "fsActivity": {
+      "reads": 0,
+      "writes": 0
+    }
+  },
+  "libuv": [
+  ],
+  "environmentVariables": {
+    "npm_config_save_dev": "",
+    "npm_config_legacy_bundling": "",
+    "npm_config_dry_run": "",
+    "npm_package_dependencies_request": "^2.88.2",
+    "npm_package_dependencies_express_flash": "0.0.2",
+    "npm_package_dependencies__fortawesome_fontawesome_svg_core": "^6.3.0",
+    "NVM_INC": "/Users/sarah/.nvm/versions/node/v12.16.0/include/node",
+    "npm_config_viewer": "man",
+    "npm_config_only": "",
+    "npm_config_commit_hooks": "true",
+    "npm_config_browser": "",
+    "npm_package_gitHead": "5754c1c056ec62e17b5d7badddc4a8fc3637e09f",
+    "npm_package_dependencies_webpack_dev_middleware": "^5.3.1",
+    "npm_package_dependencies_webpack_cli": "^4.10.0",
+    "npm_package_devDependencies_prettier": "^2.7.1",
+    "npm_package_devDependencies_awesome_typescript_loader": "^5.2.1",
+    "npm_package_devDependencies__types_archiver": "^3.1.1",
+    "npm_config_also": "",
+    "npm_package_dependencies_react_jsx_parser": "^1.29.0",
+    "npm_package_dependencies_mongoose": "^5.13.14",
+    "npm_package_dependencies_connect_flash": "^0.1.1",
+    "npm_package_browser_child_process": "false",
+    "npm_config_sign_git_commit": "",
+    "npm_config_rollback": "true",
+    "npm_package_dependencies_material_ui": "^0.20.2",
+    "npm_package_devDependencies__types_sharp": "^0.23.1",
+    "npm_package_devDependencies__types_passport_local": "^1.0.34",
+    "npm_package_devDependencies__types_dotenv": "^6.1.1",
+    "npm_package_devDependencies__types_cookie_parser": "^1.4.2",
+    "TERM_PROGRAM": "Apple_Terminal",
+    "NODE": "/Users/sarah/.nvm/versions/node/v12.16.0/bin/node",
+    "npm_config_usage": "",
+    "npm_config_audit": "true",
+    "npm_package_dependencies_reveal_js": "^4.3.0",
+    "npm_package_dependencies_process": "^0.11.10",
+    "npm_package_dependencies_pdfjs": "^2.4.7",
+    "npm_package_dependencies_html_to_image": "^0.1.3",
+    "npm_package_devDependencies_file_loader": "^3.0.1",
+    "npm_package_devDependencies__types_express_flash": "0.0.0",
+    "npm_package_scripts_monitor": "cross-env MONITORED=true NODE_OPTIONS=--max_old_space_size=4096 ts-node src/server/index.ts",
+    "INIT_CWD": "/Users/sarah/Desktop/dash/Dash-Web",
+    "npm_package_dependencies_rehype_raw": "^6.1.1",
+    "npm_package_dependencies_react_audio_waveform": "0.0.5",
+    "npm_package_dependencies_path_browserify": "^1.0.1",
+    "npm_package_dependencies_nodemailer": "^5.1.1",
+    "npm_package_dependencies_axios": "^0.19.2",
+    "npm_package_devDependencies_typescript": "^4.7.4",
+    "NVM_CD_FLAGS": "-q",
+    "npm_config_globalignorefile": "/Users/sarah/.nvm/versions/node/v12.16.0/etc/npmignore",
+    "npm_package_dependencies_react_grid_layout": "^1.3.4",
+    "npm_package_dependencies_prosemirror_find_replace": "^0.9.0",
+    "npm_package_dependencies_normalize_css": "^8.0.1",
+    "npm_package_devDependencies_mocha": "^5.2.0",
+    "npm_package_devDependencies__types_express_session": "^1.17.5",
+    "SHELL": "/bin/zsh",
+    "TERM": "xterm-256color",
+    "npm_config_shell": "/bin/zsh",
+    "npm_config_maxsockets": "50",
+    "npm_config_init_author_url": "",
+    "npm_package_dependencies_prosemirror_dev_tools": "^3.1.0",
+    "npm_package_dependencies_p_limit": "^2.2.0",
+    "npm_package_dependencies_bson": "^4.6.1",
+    "npm_package_dependencies__types_dom_speech_recognition": "0.0.1",
+    "npm_package_dependencies__emotion_styled": "^11.11.0",
+    "npm_package_devDependencies_style_loader": "^0.23.1",
+    "npm_package_devDependencies__types_react_datepicker": "^3.1.8",
+    "npm_config_shrinkwrap": "true",
+    "npm_config_parseable": "",
+    "npm_config_metrics_registry": "https://registry.npmjs.org/",
+    "npm_package_dependencies_xregexp": "^4.4.1",
+    "npm_package_dependencies_shelljs": "^0.8.5",
+    "npm_package_dependencies_bezier_curve": "^1.0.0",
+    "npm_package_dependencies__mui_icons_material": "^5.11.16",
+    "npm_package_devDependencies_tslint": "^5.20.1",
+    "npm_package_devDependencies__types_react_transition_group": "^4.4.5",
+    "npm_package_scripts_tsc": "tsc",
+    "TMPDIR": "/var/folders/yk/p_39q8jn673c5p8_66mcxm7r0000gn/T/",
+    "npm_config_timing": "",
+    "npm_config_init_license": "ISC",
+    "npm_package_dependencies_socket_io": "^2.5.0",
+    "npm_package_dependencies_probe_image_size": "^4.0.0",
+    "npm_package_dependencies_canvas": "^2.9.3",
+    "npm_package_dependencies__hig_theme_data": "^2.23.1",
+    "npm_package_devDependencies__types_react_select": "^3.1.2",
+    "npm_package_devDependencies__types_prosemirror_model": "^1.16.1",
+    "CONDA_SHLVL": "1",
+    "npm_config_if_present": "",
+    "npm_package_dependencies_typescript_collections": "^1.3.3",
+    "npm_package_dependencies_rimraf": "^3.0.0",
+    "npm_package_dependencies_react_autosuggest": "^9.4.3",
+    "npm_package_dependencies_flexlayout_react": "^0.3.11",
+    "npm_package_dependencies_find_in_files": "^0.5.0",
+    "npm_package_devDependencies__types_chai": "^4.3.0",
+    "CONDA_PROMPT_MODIFIER": "(base) ",
+    "TERM_PROGRAM_VERSION": "447",
+    "npm_package_dependencies_prosemirror_inputrules": "^1.1.3",
+    "npm_package_dependencies_bcrypt_nodejs": "0.0.3",
+    "npm_package_dependencies_async": "^2.6.2",
+    "npm_config_sign_git_tag": "",
+    "npm_config_init_author_email": "",
+    "npm_config_cache_max": "Infinity",
+    "npm_package_dependencies_uuid": "^3.4.0",
+    "npm_package_dependencies_supercluster": "^7.1.4",
+    "npm_package_dependencies_remark_gfm": "^3.0.1",
+    "npm_package_dependencies_connect_mongo": "^2.0.3",
+    "npm_package_dependencies_browser_assert": "^1.2.1",
+    "npm_package_devDependencies_sass_loader": "^7.3.1",
+    "npm_package_scripts_start_release_debug": "cross-env RELEASE=true USE_AZURE=true NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev --inspect -- src/server/index.ts",
+    "npm_config_preid": "",
+    "npm_config_long": "",
+    "npm_config_local_address": "",
+    "npm_config_git_tag_version": "true",
+    "npm_config_cert": "",
+    "npm_package_dependencies_js_datepicker": "^4.6.6",
+    "npm_package_devDependencies__types_webpack_hot_middleware": "^2.25.6",
+    "npm_package_devDependencies__types_mongodb": "^3.6.20",
+    "npm_package_devDependencies__types_mocha": "^5.2.6",
+    "TERM_SESSION_ID": "4AACD142-8780-44F4-A4FA-BB53E1BF6081",
+    "npm_config_registry": "https://registry.npmjs.org/",
+    "npm_config_noproxy": "",
+    "npm_config_fetch_retries": "2",
+    "npm_package_dependencies_react_compound_slider": "^2.5.0",
+    "npm_package_dependencies_prosemirror_history": "^1.2.0",
+    "npm_package_devDependencies__types_react_color": "^2.17.6",
+    "npm_package_devDependencies__types_google_maps_react": "^2.0.5",
+    "npm_package_devDependencies__types_color": "^3.0.3",
+    "npm_package_dependencies_react_dom": "^18.2.0",
+    "npm_package_dependencies_passport_local": "^1.0.0",
+    "npm_package_dependencies__octokit_core": "^4.0.4",
+    "npm_package_devDependencies__types_async": "^2.4.1",
+    "npm_package_scripts_debug": "cross-env  NODE_OPTIONS=--max_old_space_size=8192 ts-node-dev --transpile-only --inspect -- src/server/index.ts",
+    "npm_package_scripts_oldstart": "cross-env NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev --debug -- src/server/index.ts",
+    "npm_config_versions": "",
+    "npm_config_message": "%s",
+    "npm_config_key": "",
+    "npm_package_readmeFilename": "README.md",
+    "npm_package_dependencies_react_refresh_typescript": "^2.0.7",
+    "npm_package_dependencies_react_dropzone": "^14.2.3",
+    "npm_package_dependencies_image_size": "^0.7.5",
+    "npm_package_dependencies_html_to_text": "^5.1.1",
+    "npm_package_dependencies_express_validator": "^5.3.1",
+    "npm_package_devDependencies_eslint_plugin_jsx_a11y": "^6.6.0",
+    "npm_package_node_child_process": "empty",
+    "npm_package_dependencies_react_resizable_rotatable_draggable": "^0.2.0",
+    "npm_package_dependencies_got": "^12.0.1",
+    "npm_package_dependencies__types_d3_color": "^2.0.3",
+    "npm_package_devDependencies_webpack": "^5.69.1",
+    "npm_package_devDependencies__types_nodemailer": "^4.6.6",
+    "npm_package_description": "Install Node.js, then, from the project directory, run",
+    "NVM_DIR": "/Users/sarah/.nvm",
+    "USER": "sarah",
+    "npm_package_dependencies__types_d3_scale": "^3.3.2",
+    "npm_package_devDependencies_dotenv": "^8.6.0",
+    "npm_package_devDependencies__types_react": "^18.0.15",
+    "npm_package_devDependencies__types_prosemirror_transform": "^1.1.5",
+    "npm_package_devDependencies__types_prosemirror_history": "^1.0.3",
+    "npm_package_dependencies_readline": "^1.3.0",
+    "npm_package_dependencies__types_supercluster": "^7.1.0",
+    "npm_package_dependencies__azure_storage_blob": "^12.14.0",
+    "npm_config_globalconfig": "/Users/sarah/.nvm/versions/node/v12.16.0/etc/npmrc",
+    "npm_package_dependencies_depcheck": "^0.9.2",
+    "npm_package_dependencies__types_web": "0.0.53",
+    "CONDA_EXE": "/Users/sarah/miniconda3/bin/conda",
+    "npm_config_prefer_online": "",
+    "npm_config_logs_max": "10",
+    "npm_config_always_auth": "",
+    "npm_package_dependencies_react_icons": "^4.3.1",
+    "npm_package_dependencies_passport_google_oauth20": "^2.0.0",
+    "npm_package_devDependencies_webpack_dev_server": "^3.11.3",
+    "npm_package_devDependencies__types_brotli": "^1.3.1",
+    "npm_package_dependencies_url_loader": "^1.1.2",
+    "npm_package_dependencies_stream_browserify": "^3.0.0",
+    "npm_package_dependencies_prosemirror_transform": "^1.3.4",
+    "npm_package_dependencies_lodash": "^4.17.21",
+    "npm_package_dependencies_i": "^0.3.7",
+    "npm_package_devDependencies_tslint_loader": "^3.6.0",
+    "SSH_AUTH_SOCK": "/private/tmp/com.apple.launchd.dBaRxB6a53/Listeners",
+    "npm_package_dependencies_words_to_numbers": "^1.5.1",
+    "npm_package_dependencies_valid_url": "^1.0.9",
+    "npm_package_dependencies_styled_components": "^4.4.1",
+    "npm_package_dependencies_csv_parser": "^3.0.0",
+    "npm_package_dependencies_class_transformer": "^0.2.0",
+    "npm_package_devDependencies_eslint": "^8.36.0",
+    "npm_package_devDependencies__types_prosemirror_inputrules": "^1.0.4",
+    "npm_package_devDependencies__types_express": "^4.17.13",
+    "__CF_USER_TEXT_ENCODING": "0x1F5:0x0:0x0",
+    "npm_execpath": "/Users/sarah/.nvm/versions/node/v12.16.0/lib/node_modules/npm/bin/npm-cli.js",
+    "npm_config_global_style": "",
+    "npm_config_cache_lock_retries": "10",
+    "npm_package_dependencies_wikijs": "^6.3.3",
+    "npm_package_dependencies_bluebird": "^3.7.2",
+    "npm_package_devDependencies__types_react_typist": "^2.0.3",
+    "npm_config_update_notifier": "true",
+    "npm_config_cafile": "",
+    "npm_package_dependencies_util": "^0.12.4",
+    "npm_package_dependencies_raw_loader": "^1.0.0",
+    "npm_package_dependencies_https_browserify": "^1.0.0",
+    "npm_package_dependencies_brotli": "^1.3.3",
+    "npm_package_dependencies__mui_material": "^5.13.1",
+    "npm_package_dependencies__fortawesome_react_fontawesome": "^0.2.0",
+    "npm_package_devDependencies__types_passport_google_oauth20": "^2.0.11",
+    "npm_package_dependencies_cors": "^2.8.5",
+    "npm_package_dependencies_bezier_js": "^4.1.1",
+    "npm_package_dependencies__fortawesome_free_brands_svg_icons": "^6.3.0",
+    "npm_config_heading": "npm",
+    "npm_config_audit_level": "low",
+    "npm_package_dependencies_chrome": "^0.1.0",
+    "npm_package_dependencies__react_three_fiber": "^6.2.3",
+    "npm_package_devDependencies_eslint_plugin_prettier": "^4.2.1",
+    "npm_package_devDependencies_copy_webpack_plugin": "^4.6.0",
+    "npm_package_devDependencies__types_react_measure": "^2.0.8",
+    "npm_package_devDependencies__types_react_dom": "^18.0.6",
+    "npm_package_devDependencies__types_mobile_detect": "^1.3.4",
+    "_CE_CONDA": "",
+    "npm_config_searchlimit": "20",
+    "npm_config_read_only": "",
+    "npm_config_offline": "",
+    "npm_config_fetch_retry_mintimeout": "10000",
+    "npm_package_dependencies_react_typist": "^2.0.5",
+    "npm_package_dependencies_mobx_react_devtools": "^6.1.1",
+    "npm_package_dependencies_md5_file": "^5.0.0",
+    "npm_package_dependencies_forever_agent": "^0.6.1",
+    "npm_package_devDependencies__types_xregexp": "^4.4.0",
+    "npm_package_devDependencies__types_typescript": "^2.0.0",
+    "npm_package_devDependencies__types_request": "^2.48.8",
+    "npm_package_devDependencies__types_prosemirror_commands": "^1.0.4",
+    "npm_config_json": "",
+    "npm_config_access": "",
+    "npm_config_argv": "{\"remain\":[],\"cooked\":[\"start\"],\"original\":[\"start\"]}",
+    "npm_package_dependencies__fortawesome_free_solid_svg_icons": "^6.3.0",
+    "npm_package_devDependencies__types_socket_io": "^2.1.13",
+    "PATH": "/Users/sarah/.nvm/versions/node/v12.16.0/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/sarah/Desktop/dash/Dash-Web/node_modules/.bin:/Users/sarah/.nvm/versions/node/v12.16.0/bin:/Users/sarah/miniconda3/bin:/Users/sarah/miniconda3/condabin:/Users/sarah/.elan/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin",
+    "npm_config_allow_same_version": "",
+    "npm_package_dependencies_webrtc_adapter": "^7.7.1",
+    "npm_package_dependencies_react_reveal": "^1.2.2",
+    "npm_package_dependencies_prosemirror_schema_list": "^1.1.6",
+    "npm_package_dependencies__material_ui_core": "^4.12.3",
+    "npm_package_devDependencies__types_rimraf": "^2.0.5",
+    "npm_package_devDependencies__types_connect_flash": "0.0.34",
+    "npm_config_https_proxy": "",
+    "npm_config_engine_strict": "",
+    "npm_config_description": "true",
+    "npm_package_dependencies_pug": "^2.0.4",
+    "npm_package_dependencies_prosemirror_keymap": "^1.1.5",
+    "npm_package_dependencies_pdfjs_dist": "^2.14.305",
+    "npm_package_dependencies_mobile_detect": "^1.4.5",
+    "npm_package_dependencies_image_size_stream": "^1.1.0",
+    "npm_package_dependencies_golden_layout": "^1.5.9",
+    "npm_package_dependencies_child_process": "^1.0.2",
+    "npm_package_dependencies__types_d3_axis": "^2.1.3",
+    "_": "/Users/sarah/Desktop/dash/Dash-Web/node_modules/.bin/cross-env",
+    "LaunchInstanceID": "16109DB5-CDB2-454A-9613-8F6F534702AC",
+    "npm_config_userconfig": "/Users/sarah/.npmrc",
+    "npm_config_init_module": "/Users/sarah/.npm-init.js",
+    "npm_package_dependencies__react_google_maps_api": "^2.7.0",
+    "CONDA_PREFIX": "/Users/sarah/miniconda3",
+    "__CFBundleIdentifier": "com.apple.Terminal",
+    "npm_config_cidr": "",
+    "npm_package_dependencies_puppeteer": "^3.3.0",
+    "npm_package_dependencies_prosemirror_view": "^1.26.5",
+    "npm_package_dependencies_mongodb": "^3.7.3",
+    "npm_package_dependencies_google_auth_library": "^4.2.4",
+    "npm_package_dependencies_bootstrap": "^4.6.1",
+    "npm_package_devDependencies_eslint_config_airbnb": "^19.0.4",
+    "PWD": "/Users/sarah/desktop/dash/dash-web",
+    "npm_config_user": "501",
+    "npm_config_node_version": "12.16.0",
+    "npm_package_dependencies_node_sass": "^4.14.1",
+    "npm_package_dependencies_howler": "^2.2.3",
+    "npm_package_dependencies_expressjs": "^1.0.1",
+    "npm_package_dependencies_core_js": "^3.28.0",
+    "npm_package_dependencies_browndash_components": "^0.1.36",
+    "npm_package_devDependencies_eslint_plugin_react_hooks": "^4.6.0",
+    "npm_package_devDependencies__types_lodash": "^4.14.179",
+    "JAVA_HOME": "/Library/Java/JavaVirtualMachines/jdk1.8.0_341.jdk/Contents/Home",
+    "npm_lifecycle_event": "start",
+    "npm_package_dependencies_react_table": "^6.11.5",
+    "npm_package_dependencies_react_loading": "^2.0.3",
+    "npm_package_dependencies_mobx": "^5.15.7",
+    "npm_package_dependencies_babel": "^6.23.0",
+    "npm_package_devDependencies_jsdom": "^15.2.1",
+    "npm_package_devDependencies_chai": "^4.3.6",
+    "npm_config_save": "true",
+    "npm_config_ignore_prepublish": "",
+    "npm_config_editor": "vi",
+    "npm_config_auth_type": "legacy",
+    "npm_package_dependencies_npm": "^6.14.18",
+    "npm_package_dependencies_node_stream_zip": "^1.15.0",
+    "npm_package_dependencies_image_data_uri": "^2.0.1",
+    "npm_package_scripts_start_release": "cross-env RELEASE=true USE_AZURE=false NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev -- src/server/index.ts",
+    "npm_package_name": "dash",
+    "LANG": "en_US.UTF-8",
+    "npm_config_tag": "latest",
+    "npm_config_script_shell": "",
+    "npm_package_dependencies_query_string": "^6.14.1",
+    "npm_package_dependencies_mobx_utils": "^5.6.2",
+    "npm_package_dependencies_file_saver": "^2.0.5",
+    "npm_package_dependencies_body_parser": "^1.19.2",
+    "npm_package_dependencies__types_reveal": "^3.3.33",
+    "npm_package_devDependencies_eslint_plugin_import": "^2.26.0",
+    "npm_package_devDependencies__types_prosemirror_view": "^1.23.1",
+    "npm_config_progress": "true",
+    "npm_config_global": "",
+    "npm_config_before": "",
+    "npm_package_dependencies_xoauth2": "^1.2.0",
+    "npm_package_dependencies_standard_http_error": "^2.0.1",
+    "npm_package_dependencies_react_loader_spinner": "^5.3.4",
+    "npm_package_dependencies_http_browserify": "^1.7.0",
+    "npm_package_dependencies__types_d3_selection": "^2.0.1",
+    "npm_package_dependencies__hig_flyout": "^1.3.1",
+    "npm_package_devDependencies_fork_ts_checker_webpack_plugin": "^1.6.0",
+    "npm_package_scripts_build": "cross-env NODE_OPTIONS=--max_old_space_size=8192 webpack --env production",
+    "npm_package_scripts_start": "cross-env NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev --debug --transpile-only -- src/server/index.ts",
+    "npm_config_searchstaleness": "900",
+    "npm_config_optional": "true",
+    "npm_config_ham_it_up": "",
+    "npm_package_dependencies_sharp": "^0.23.4",
+    "npm_package_dependencies_rc_switch": "^1.9.2",
+    "npm_package_dependencies_googlephotos": "^0.2.5",
+    "npm_package_dependencies_exifr": "^7.1.3",
+    "npm_package_dependencies__types_google_maps": "^3.2.3",
+    "npm_package_dependencies__types_bezier_js": "^4.1.0",
+    "npm_package_dependencies__ffmpeg_core": "0.10.0",
+    "npm_package_devDependencies_ts_loader": "^5.3.3",
+    "npm_package_devDependencies__types_bcrypt_nodejs": "0.0.30",
+    "XPC_FLAGS": "0x0",
+    "npm_config_save_prod": "",
+    "npm_config_force": "",
+    "npm_config_bin_links": "true",
+    "npm_package_devDependencies__types_youtube": "0.0.39",
+    "npm_config_searchopts": "",
+    "npm_package_dependencies_react_beautiful_dnd": "^13.1.0",
+    "npm_package_dependencies_jszip": "^3.7.1",
+    "npm_package_dependencies_csv_stringify": "^6.3.0",
+    "npm_package_devDependencies__types_react_icons": "^3.0.0",
+    "npm_config_node_gyp": "/Users/sarah/.nvm/versions/node/v12.16.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js",
+    "npm_config_depth": "Infinity",
+    "npm_package_dependencies_google_maps_react": "^2.0.6",
+    "npm_package_dependencies_express_session": "^1.17.2",
+    "npm_package_devDependencies_eslint_plugin_node": "^11.1.0",
+    "npm_package_devDependencies_eslint_config_prettier": "^8.5.0",
+    "npm_package_main": "index.js",
+    "npm_config_sso_poll_frequency": "500",
+    "npm_config_rebuild_bundle": "true",
+    "npm_package_dependencies_chart_js": "^3.8.0",
+    "npm_package_dependencies__emotion_react": "^11.11.0",
+    "npm_package_devDependencies__types_prosemirror_menu": "^1.0.6",
+    "npm_package_devDependencies__types_prosemirror_keymap": "^1.0.4",
+    "npm_package_devDependencies__types_pdfjs_dist": "^2.10.378",
+    "npm_package_devDependencies__types_exif": "^0.6.3",
+    "npm_package_version": "1.0.0",
+    "_CE_M": "",
+    "XPC_SERVICE_NAME": "0",
+    "npm_config_unicode": "true",
+    "npm_package_dependencies_typescript_language_server": "^0.4.0",
+    "npm_package_dependencies_prosemirror_model": "^1.18.1",
+    "npm_package_dependencies__ffmpeg_ffmpeg": "0.10.0",
+    "SHLVL": "2",
+    "HOME": "/Users/sarah",
+    "npm_config_fetch_retry_maxtimeout": "60000",
+    "npm_package_dependencies_request_promise": "^4.2.6",
+    "npm_package_dependencies_react_markdown": "^8.0.3",
+    "npm_package_dependencies__hig_theme_context": "^2.1.3",
+    "npm_package_devDependencies__types_react_autosuggest": "^9.3.14",
+    "npm_package_devDependencies__types_mongoose": "^5.11.97",
+    "npm_package_devDependencies__types_d3": "^7.4.0",
+    "npm_package_devDependencies__types_animejs": "^2.0.2",
+    "npm_package_scripts_test": "mocha -r ts-node/register test/**/*.ts",
+    "npm_config_tag_version_prefix": "v",
+    "npm_config_strict_ssl": "true",
+    "npm_config_sso_type": "oauth",
+    "npm_config_scripts_prepend_node_path": "warn-only",
+    "npm_config_save_prefix": "^",
+    "npm_config_loglevel": "notice",
+    "npm_config_ca": "",
+    "npm_package_dependencies_three": "^0.127.0",
+    "npm_package_dependencies_openai": "^3.2.1",
+    "npm_package_dependencies_mobx_react": "^5.4.4",
+    "npm_package_dependencies_google_translate_api_browser": "^3.0.1",
+    "npm_package_dependencies_cookie_parser": "^1.4.6",
+    "npm_package_dependencies_adm_zip": "^0.4.16",
+    "npm_package_devDependencies_eslint_config_node": "^4.1.0",
+    "npm_config_save_exact": "",
+    "npm_config_group": "20",
+    "npm_config_fetch_retry_factor": "10",
+    "npm_config_dev": "",
+    "npm_package_devDependencies_webpack_hot_middleware": "^2.25.1",
+    "npm_package_devDependencies_cross_env": "^5.2.1",
+    "npm_config_version": "",
+    "npm_config_prefer_offline": "",
+    "npm_config_cache_lock_stale": "60000",
+    "npm_package_devDependencies__types_prosemirror_state": "^1.2.8",
+    "npm_package_devDependencies__types_body_parser": "^1.19.2",
+    "npm_config_otp": "",
+    "npm_config_cache_min": "10",
+    "npm_package_dependencies_react_color": "^2.19.3",
+    "npm_package_dependencies_d3": "^7.6.1",
+    "npm_package_devDependencies_ts_node": "^10.9.1",
+    "npm_package_devDependencies__types_react_grid_layout": "^1.3.2",
+    "npm_config_searchexclude": "",
+    "npm_config_cache": "/Users/sarah/.npm",
+    "npm_package_dependencies_tough_cookie": "^4.0.0",
+    "npm_package_dependencies_googleapis": "^40.0.0",
+    "npm_package_devDependencies__types_valid_url": "^1.0.3",
+    "npm_package_devDependencies__types_passport": "^1.0.9",
+    "npm_package_devDependencies__types_adm_zip": "^0.4.34",
+    "CONDA_PYTHON_EXE": "/Users/sarah/miniconda3/bin/python",
+    "LOGNAME": "sarah",
+    "npm_lifecycle_script": "cross-env NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev --debug --transpile-only -- src/server/index.ts",
+    "npm_config_color": "true",
+    "npm_package_dependencies_solr_node": "^1.2.1",
+    "npm_package_dependencies_react_transition_group": "^4.4.2",
+    "npm_package_dependencies_iink_js": "^1.5.4",
+    "npm_package_dependencies_html_webpack_plugin": "^5.5.0",
+    "npm_config_proxy": "",
+    "npm_config_package_lock": "true",
+    "npm_package_dependencies_prosemirror_state": "^1.4.1",
+    "npm_package_dependencies_nodemon": "^1.19.4",
+    "npm_package_dependencies_function_plot": "^1.22.8",
+    "npm_package_dependencies_equation_editor_react": "github:bobzel/equation-editor-react#useLocally",
+    "npm_package_devDependencies__types_socket_io_parser": "^3.0.0",
+    "CLASSPATH": "/Users/sarah/Downloads/cs15/*:.",
+    "npm_config_package_lock_only": "",
+    "npm_config_fund": "true",
+    "npm_package_dependencies_react": "^18.2.0",
+    "npm_package_dependencies_bingmaps_react": "^1.2.10",
+    "npm_package_devDependencies_scss_loader": "0.0.1",
+    "npm_package_devDependencies__types_cookie_session": "^2.0.44",
+    "npm_config_save_optional": "",
+    "npm_package_dependencies_textarea_caret": "^3.1.0",
+    "npm_package_dependencies_react_measure": "^2.5.2",
+    "npm_package_dependencies_exif": "^0.6.0",
+    "NVM_BIN": "/Users/sarah/.nvm/versions/node/v12.16.0/bin",
+    "CONDA_DEFAULT_ENV": "base",
+    "npm_config_ignore_scripts": "",
+    "npm_config_user_agent": "npm/6.14.7 node/v12.16.0 darwin x64",
+    "npm_package_dependencies_react_resizable": "^1.11.1",
+    "npm_package_dependencies_prosemirror_commands": "^1.2.1",
+    "npm_package_dependencies_memorystream": "^0.3.1",
+    "npm_package_dependencies_formidable": "1.2.1",
+    "npm_package_devDependencies__types_uuid": "^3.4.10",
+    "npm_config_cache_lock_wait": "10000",
+    "npm_package_dependencies_socket_io_client": "^2.5.0",
+    "npm_package_dependencies_recharts": "^2.1.12",
+    "npm_package_dependencies_react_chartjs_2": "^4.3.0",
+    "npm_package_dependencies_fluent_ffmpeg": "^2.1.2",
+    "npm_package_dependencies__types_cors": "^2.8.12",
+    "npm_package_devDependencies__types_node": "^10.17.60",
+    "npm_package_devDependencies__types_file_saver": "^2.0.5",
+    "npm_config_production": "",
+    "npm_package_dependencies_jsonschema": "^1.4.0",
+    "npm_package_dependencies_ffmpeg": "0.0.4",
+    "npm_package_dependencies_cookie_session": "^2.0.0",
+    "npm_package_dependencies_color": "^3.2.1",
+    "npm_package_devDependencies__types_webpack": "^4.41.32",
+    "npm_package_devDependencies__types_request_promise": "^4.1.48",
+    "npm_package_devDependencies__types_prosemirror_schema_list": "^1.0.3",
+    "npm_config_send_metrics": "",
+    "npm_config_save_bundle": "",
+    "npm_package_dependencies_web_request": "^1.0.7",
+    "npm_package_dependencies_react_datepicker": "^3.8.0",
+    "npm_package_dependencies_express": "^4.17.3",
+    "npm_package_dependencies_D": "^1.0.0",
+    "npm_package_dependencies__types_formidable": "1.0.31",
+    "npm_package_devDependencies__types_rc_switch": "^1.9.2",
+    "npm_package_devDependencies__types_prosemirror_dev_tools": "^2.1.0",
+    "npm_package_devDependencies__types_jquery": "^3.5.14",
+    "npm_config_umask": "0022",
+    "npm_config_node_options": "",
+    "npm_config_init_version": "1.0.0",
+    "npm_package_dependencies_https": "^1.0.0",
+    "npm_package_dependencies_array_batcher": "^1.2.3",
+    "npm_package_dependencies__fortawesome_free_regular_svg_icons": "^6.3.0",
+    "npm_package_devDependencies__types_shelljs": "^0.8.11",
+    "npm_package_devDependencies__types_libxmljs": "^0.18.7",
+    "npm_package_devDependencies__types_express_validator": "^3.0.0",
+    "npm_package_devDependencies__types_bluebird": "^3.5.36",
+    "npm_config_init_author_name": "",
+    "npm_config_git": "git",
+    "npm_config_scope": "",
+    "npm_package_dependencies_react_select": "^3.2.0",
+    "npm_package_dependencies_pdf_parse": "^1.1.1",
+    "npm_package_dependencies_colors": "^1.4.0",
+    "npm_package_dependencies_archiver": "^3.1.1",
+    "npm_package_devDependencies_css_loader": "^2.1.1",
+    "npm_package_devDependencies__types_socket_io_client": "^1.4.36",
+    "SECURITYSESSIONID": "186a6",
+    "npm_config_unsafe_perm": "true",
+    "npm_config_tmp": "/var/folders/yk/p_39q8jn673c5p8_66mcxm7r0000gn/T",
+    "npm_config_onload_script": "",
+    "npm_package_dependencies_serializr": "^1.5.4",
+    "npm_package_dependencies_fit_curve": "^0.1.7",
+    "npm_package_dependencies__webscopeio_react_textarea_autocomplete": "^4.9.1",
+    "npm_package_dependencies__types_three": "^0.126.2",
+    "npm_package_devDependencies_ts_node_dev": "^2.0.0",
+    "npm_node_execpath": "/Users/sarah/.nvm/versions/node/v12.16.0/bin/node",
+    "npm_config_prefix": "/Users/sarah/.nvm/versions/node/v12.16.0",
+    "npm_config_link": "",
+    "npm_config_format_package_lock": "true",
+    "npm_package_dependencies_passport": "^0.4.0",
+    "npm_package_devDependencies_eslint_plugin_react": "^7.30.1",
+    "npm_package_devDependencies__types_react_table": "^6.8.9",
+    "npm_package_devDependencies__types_react_reconciler": "^0.26.4",
+    "NODE_OPTIONS": "--max_old_space_size=4096",
+    "TS_NODE_DEV": "true",
+    "_CLIENT_OPENAI_KEY": "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",
+    "VIPSHOME": "/usr/local/Cellar/vips/8.8.1",
+    "TYPESCRIPT_PATH": "/Users/sarah/Desktop/dash/Dash-Web/node_modules/typescript/lib/typescript.js",
+    "TSCONFIG": "/Users/sarah/Desktop/dash/Dash-Web/tsconfig.json",
+    "COMPILER_OPTIONS": "{}",
+    "TSLINT": "true",
+    "CONTEXT": "/Users/sarah/Desktop/dash/Dash-Web",
+    "TSLINTAUTOFIX": "false",
+    "ESLINT": "false",
+    "ESLINT_OPTIONS": "{}",
+    "WATCH": "",
+    "WORK_DIVISION": "1",
+    "MEMORY_LIMIT": "2048",
+    "CHECK_SYNTACTIC_ERRORS": "false",
+    "USE_INCREMENTAL_API": "true",
+    "VUE": "false"
+  },
+  "userLimits": {
+    "core_file_size_blocks": {
+      "soft": 0,
+      "hard": "unlimited"
+    },
+    "data_seg_size_kbytes": {
+      "soft": "unlimited",
+      "hard": "unlimited"
+    },
+    "file_size_blocks": {
+      "soft": "unlimited",
+      "hard": "unlimited"
+    },
+    "max_locked_memory_bytes": {
+      "soft": "unlimited",
+      "hard": "unlimited"
+    },
+    "max_memory_size_kbytes": {
+      "soft": "unlimited",
+      "hard": "unlimited"
+    },
+    "open_files": {
+      "soft": 1048575,
+      "hard": "unlimited"
+    },
+    "stack_size_bytes": {
+      "soft": 8388608,
+      "hard": 67104768
+    },
+    "cpu_time_seconds": {
+      "soft": "unlimited",
+      "hard": "unlimited"
+    },
+    "max_user_processes": {
+      "soft": 2784,
+      "hard": 4176
+    },
+    "virtual_memory_kbytes": {
+      "soft": "unlimited",
+      "hard": "unlimited"
+    }
+  },
+  "sharedObjects": [
+    "/Users/sarah/.nvm/versions/node/v12.16.0/bin/node",
+    "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation",
+    "/usr/lib/libobjc.A.dylib",
+    "/System/Library/PrivateFrameworks/CoreServicesInternal.framework/Versions/A/CoreServicesInternal",
+    "/usr/lib/liboah.dylib",
+    "/usr/lib/libfakelink.dylib",
+    "/usr/lib/libicucore.A.dylib",
+    "/usr/lib/libSystem.B.dylib",
+    "/System/Library/PrivateFrameworks/SoftLinking.framework/Versions/A/SoftLinking",
+    "/usr/lib/libc++abi.dylib",
+    "/usr/lib/libc++.1.dylib",
+    "/usr/lib/system/libcache.dylib",
+    "/usr/lib/system/libcommonCrypto.dylib",
+    "/usr/lib/system/libcompiler_rt.dylib",
+    "/usr/lib/system/libcopyfile.dylib",
+    "/usr/lib/system/libcorecrypto.dylib",
+    "/usr/lib/system/libdispatch.dylib",
+    "/usr/lib/system/libdyld.dylib",
+    "/usr/lib/system/libkeymgr.dylib",
+    "/usr/lib/system/libmacho.dylib",
+    "/usr/lib/system/libquarantine.dylib",
+    "/usr/lib/system/libremovefile.dylib",
+    "/usr/lib/system/libsystem_asl.dylib",
+    "/usr/lib/system/libsystem_blocks.dylib",
+    "/usr/lib/system/libsystem_c.dylib",
+    "/usr/lib/system/libsystem_collections.dylib",
+    "/usr/lib/system/libsystem_configuration.dylib",
+    "/usr/lib/system/libsystem_containermanager.dylib",
+    "/usr/lib/system/libsystem_coreservices.dylib",
+    "/usr/lib/system/libsystem_darwin.dylib",
+    "/usr/lib/system/libsystem_dnssd.dylib",
+    "/usr/lib/system/libsystem_featureflags.dylib",
+    "/usr/lib/system/libsystem_info.dylib",
+    "/usr/lib/system/libsystem_m.dylib",
+    "/usr/lib/system/libsystem_malloc.dylib",
+    "/usr/lib/system/libsystem_networkextension.dylib",
+    "/usr/lib/system/libsystem_notify.dylib",
+    "/usr/lib/system/libsystem_sandbox.dylib",
+    "/usr/lib/system/libsystem_secinit.dylib",
+    "/usr/lib/system/libsystem_kernel.dylib",
+    "/usr/lib/system/libsystem_platform.dylib",
+    "/usr/lib/system/libsystem_pthread.dylib",
+    "/usr/lib/system/libsystem_symptoms.dylib",
+    "/usr/lib/system/libsystem_trace.dylib",
+    "/usr/lib/system/libunwind.dylib",
+    "/usr/lib/system/libxpc.dylib",
+    "/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit",
+    "/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices",
+    "/usr/lib/libDiagnosticMessagesClient.dylib",
+    "/usr/lib/libenergytrace.dylib",
+    "/usr/lib/libbsm.0.dylib",
+    "/usr/lib/libz.1.dylib",
+    "/usr/lib/system/libkxld.dylib",
+    "/System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork",
+    "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents",
+    "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore",
+    "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata",
+    "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices",
+    "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit",
+    "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE",
+    "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices",
+    "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices",
+    "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList",
+    "/System/Library/Frameworks/Security.framework/Versions/A/Security",
+    "/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration",
+    "/usr/lib/libapple_nghttp2.dylib",
+    "/usr/lib/libcompression.dylib",
+    "/usr/lib/libnetwork.dylib",
+    "/usr/lib/libsqlite3.dylib",
+    "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation",
+    "/System/Library/Frameworks/Network.framework/Versions/A/Network",
+    "/usr/lib/libCoreEntitlements.dylib",
+    "/System/Library/PrivateFrameworks/MessageSecurity.framework/Versions/A/MessageSecurity",
+    "/System/Library/PrivateFrameworks/ProtocolBuffer.framework/Versions/A/ProtocolBuffer",
+    "/usr/lib/libMobileGestalt.dylib",
+    "/System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression",
+    "/usr/lib/libcoretls.dylib",
+    "/usr/lib/libcoretls_cfhelpers.dylib",
+    "/usr/lib/libpam.2.dylib",
+    "/usr/lib/libxar.1.dylib",
+    "/System/Library/PrivateFrameworks/CoreAutoLayout.framework/Versions/A/CoreAutoLayout",
+    "/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration",
+    "/usr/lib/libarchive.2.dylib",
+    "/usr/lib/libxml2.2.dylib",
+    "/usr/lib/liblangid.dylib",
+    "/System/Library/Frameworks/Combine.framework/Versions/A/Combine",
+    "/usr/lib/swift/libswiftCore.dylib",
+    "/usr/lib/swift/libswiftCoreFoundation.dylib",
+    "/usr/lib/swift/libswiftDarwin.dylib",
+    "/usr/lib/swift/libswiftDispatch.dylib",
+    "/usr/lib/swift/libswiftIOKit.dylib",
+    "/usr/lib/swift/libswiftObjectiveC.dylib",
+    "/usr/lib/swift/libswiftXPC.dylib",
+    "/usr/lib/swift/libswift_Concurrency.dylib",
+    "/usr/lib/swift/libswift_StringProcessing.dylib",
+    "/usr/lib/swift/libswiftos.dylib",
+    "/System/Library/PrivateFrameworks/AppleSystemInfo.framework/Versions/A/AppleSystemInfo",
+    "/System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/Versions/A/IOMobileFramebuffer",
+    "/System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface",
+    "/usr/lib/libpcap.A.dylib",
+    "/usr/lib/libdns_services.dylib",
+    "/usr/lib/liblzma.5.dylib",
+    "/usr/lib/libbz2.1.0.dylib",
+    "/usr/lib/libiconv.2.dylib",
+    "/usr/lib/libcharset.1.dylib",
+    "/usr/lib/swift/libswift_RegexParser.dylib",
+    "/usr/lib/libheimdal-asn1.dylib",
+    "/usr/lib/libCheckFix.dylib",
+    "/System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC",
+    "/System/Library/PrivateFrameworks/CoreNLP.framework/Versions/A/CoreNLP",
+    "/System/Library/PrivateFrameworks/MetadataUtilities.framework/Versions/A/MetadataUtilities",
+    "/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate",
+    "/usr/lib/libmecab.dylib",
+    "/usr/lib/libCRFSuite.dylib",
+    "/usr/lib/libgermantok.dylib",
+    "/usr/lib/libThaiTokenizer.dylib",
+    "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage",
+    "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib",
+    "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib",
+    "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib",
+    "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib",
+    "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib",
+    "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib",
+    "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib",
+    "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib",
+    "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib",
+    "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib",
+    "/System/Library/PrivateFrameworks/MIL.framework/Versions/A/MIL",
+    "/System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory",
+    "/System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory",
+    "/System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS",
+    "/System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation",
+    "/usr/lib/libutil.dylib",
+    "/System/Library/PrivateFrameworks/InstalledContentLibrary.framework/Versions/A/InstalledContentLibrary",
+    "/System/Library/PrivateFrameworks/CoreServicesStore.framework/Versions/A/CoreServicesStore",
+    "/usr/lib/libapp_launch_measurement.dylib",
+    "/System/Library/PrivateFrameworks/AppleMobileFileIntegrity.framework/Versions/A/AppleMobileFileIntegrity",
+    "/usr/lib/libmis.dylib",
+    "/System/Library/PrivateFrameworks/MobileSystemServices.framework/Versions/A/MobileSystemServices",
+    "/System/Library/PrivateFrameworks/ConfigProfileHelper.framework/Versions/A/ConfigProfileHelper",
+    "/System/Library/PrivateFrameworks/CoreAnalytics.framework/Versions/A/CoreAnalytics",
+    "/System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce",
+    "/System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling",
+    "/usr/lib/libxslt.1.dylib",
+    "/usr/lib/libcmph.dylib",
+    "/System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji",
+    "/System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData",
+    "/System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon",
+    "/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement",
+    "/usr/lib/libTLE.dylib",
+    "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices",
+    "/System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics",
+    "/System/Library/Frameworks/CoreText.framework/Versions/A/CoreText",
+    "/System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO",
+    "/System/Library/Frameworks/ColorSync.framework/Versions/A/ColorSync",
+    "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS",
+    "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices",
+    "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore",
+    "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD",
+    "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy",
+    "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis",
+    "/System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight",
+    "/System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib",
+    "/System/Library/PrivateFrameworks/RunningBoardServices.framework/Versions/A/RunningBoardServices",
+    "/System/Library/PrivateFrameworks/IOSurfaceAccelerator.framework/Versions/A/IOSurfaceAccelerator",
+    "/System/Library/PrivateFrameworks/WatchdogClient.framework/Versions/A/WatchdogClient",
+    "/System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay",
+    "/System/Library/Frameworks/CoreMedia.framework/Versions/A/CoreMedia",
+    "/System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator",
+    "/System/Library/Frameworks/Metal.framework/Versions/A/Metal",
+    "/System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo",
+    "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders",
+    "/System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport",
+    "/System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore",
+    "/System/Library/Frameworks/VideoToolbox.framework/Versions/A/VideoToolbox",
+    "/System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard",
+    "/System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG",
+    "/usr/lib/libexpat.1.dylib",
+    "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib",
+    "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib",
+    "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib",
+    "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib",
+    "/usr/lib/libate.dylib",
+    "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib",
+    "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib",
+    "/System/Library/PrivateFrameworks/GPUWrangler.framework/Versions/A/GPUWrangler",
+    "/System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment",
+    "/System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay",
+    "/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/libllvm-flatbuffers.dylib",
+    "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib",
+    "/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/libGPUCompilerUtils.dylib",
+    "/System/Library/PrivateFrameworks/CMCaptureCore.framework/Versions/A/CMCaptureCore",
+    "/usr/lib/libspindump.dylib",
+    "/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio",
+    "/System/Library/Frameworks/ExtensionFoundation.framework/Versions/A/ExtensionFoundation",
+    "/System/Library/PrivateFrameworks/CoreTime.framework/Versions/A/CoreTime",
+    "/System/Library/PrivateFrameworks/AppServerSupport.framework/Versions/A/AppServerSupport",
+    "/System/Library/PrivateFrameworks/perfdata.framework/Versions/A/perfdata",
+    "/System/Library/PrivateFrameworks/AudioToolboxCore.framework/Versions/A/AudioToolboxCore",
+    "/System/Library/PrivateFrameworks/caulk.framework/Versions/A/caulk",
+    "/usr/lib/libAudioStatistics.dylib",
+    "/System/Library/PrivateFrameworks/SystemPolicy.framework/Versions/A/SystemPolicy",
+    "/usr/lib/libSMC.dylib",
+    "/System/Library/Frameworks/CoreMIDI.framework/Versions/A/CoreMIDI",
+    "/usr/lib/libAudioToolboxUtility.dylib",
+    "/System/Library/PrivateFrameworks/OSAServicesClient.framework/Versions/A/OSAServicesClient",
+    "/usr/lib/libperfcheck.dylib",
+    "/System/Library/PrivateFrameworks/PlugInKit.framework/Versions/A/PlugInKit",
+    "/System/Library/PrivateFrameworks/AssertionServices.framework/Versions/A/AssertionServices",
+    "/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL",
+    "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib",
+    "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib",
+    "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib",
+    "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib",
+    "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib",
+    "/usr/lib/libRosetta.dylib",
+    "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib",
+    "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSCore.framework/Versions/A/MPSCore",
+    "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSImage.framework/Versions/A/MPSImage",
+    "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNeuralNetwork.framework/Versions/A/MPSNeuralNetwork",
+    "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSMatrix.framework/Versions/A/MPSMatrix",
+    "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSRayIntersector.framework/Versions/A/MPSRayIntersector",
+    "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNDArray.framework/Versions/A/MPSNDArray",
+    "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSFunctions.framework/Versions/A/MPSFunctions",
+    "/System/Library/PrivateFrameworks/MetalTools.framework/Versions/A/MetalTools",
+    "/System/Library/PrivateFrameworks/AggregateDictionary.framework/Versions/A/AggregateDictionary",
+    "/usr/lib/libIOReport.dylib",
+    "/System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage",
+    "/System/Library/PrivateFrameworks/PhotosensitivityProcessing.framework/Versions/A/PhotosensitivityProcessing",
+    "/System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL",
+    "/System/Library/PrivateFrameworks/GraphVisualizer.framework/Versions/A/GraphVisualizer",
+    "/System/Library/PrivateFrameworks/FontServices.framework/Versions/A/FontServices",
+    "/System/Library/Frameworks/UniformTypeIdentifiers.framework/Versions/A/UniformTypeIdentifiers",
+    "/System/Library/PrivateFrameworks/OTSVG.framework/Versions/A/OTSVG",
+    "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib",
+    "/System/Library/PrivateFrameworks/FontServices.framework/libhvf.dylib",
+    "/System/Library/PrivateFrameworks/FontServices.framework/libXTFontStaticRegistryData.dylib",
+    "/usr/lib/swift/libswiftMetal.dylib",
+    "/usr/lib/swift/libswiftsimd.dylib",
+    "/System/Library/PrivateFrameworks/VideoToolboxParavirtualizationSupport.framework/Versions/A/VideoToolboxParavirtualizationSupport",
+    "/System/Library/PrivateFrameworks/AppleVA.framework/Versions/A/AppleVA",
+    "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATSUI.framework/Versions/A/ATSUI",
+    "/usr/lib/libcups.2.dylib",
+    "/System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos",
+    "/System/Library/Frameworks/GSS.framework/Versions/A/GSS",
+    "/usr/lib/libresolv.9.dylib",
+    "/System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal",
+    "/System/Library/Frameworks/Kerberos.framework/Versions/A/Libraries/libHeimdalProxy.dylib",
+    "/System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth",
+    "/System/Library/Frameworks/AVFAudio.framework/Versions/A/AVFAudio",
+    "/System/Library/PrivateFrameworks/AXCoreUtilities.framework/Versions/A/AXCoreUtilities",
+    "/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox",
+    "/System/Library/PrivateFrameworks/AudioSession.framework/Versions/A/AudioSession",
+    "/System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth",
+    "/System/Library/PrivateFrameworks/MediaExperience.framework/Versions/A/MediaExperience",
+    "/System/Library/PrivateFrameworks/AudioSession.framework/libSessionUtility.dylib",
+    "/System/Library/PrivateFrameworks/AudioResourceArbitration.framework/Versions/A/AudioResourceArbitration",
+    "/System/Library/PrivateFrameworks/PowerLog.framework/Versions/A/PowerLog",
+    "/System/Library/Frameworks/CoreData.framework/Versions/A/CoreData",
+    "/System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth",
+    "/System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit",
+    "/System/Library/PrivateFrameworks/CoreUtils.framework/Versions/A/CoreUtils",
+    "/System/Library/PrivateFrameworks/CoreUtilsExtras.framework/Versions/A/CoreUtilsExtras",
+    "/System/Library/PrivateFrameworks/IO80211.framework/Versions/A/IO80211",
+    "/System/Library/PrivateFrameworks/MobileKeyBag.framework/Versions/A/MobileKeyBag",
+    "/Users/sarah/Desktop/dash/Dash-Web/node_modules/fsevents/build/Release/fse.node"
+  ]
+}
\ No newline at end of file
diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index caddc41a2..8e08265d6 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -13,6 +13,7 @@ enum GPTCallType {
     MERMAID = 'mermaid',
     DATA = 'data',
     STACK = 'stack',
+    PRONUNCIATION = 'pronunciation',
 }
 
 type GPTCallOpts = {
@@ -58,7 +59,13 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
         model: 'gpt-4-turbo',
         maxTokens: 1024,
         temp: 0,
-        prompt: 'List unique differences between the content of the UserAnswer and Rubric. Before each difference, label it and provide any additional information the UserAnswer missed and explain it in second person without separating it into UserAnswer and Rubric content and additional information. If the Rubric is incorrect, explain why. If there are no differences, say correct. If it is empty, say there is nothing for me to evaluate.',
+        prompt: 'List unique differences between the content of the UserAnswer and Rubric. Before each difference, label it and provide any additional information the UserAnswer missed and explain it in second person without separating it into UserAnswer and Rubric content and additional information. If the Rubric is incorrect, explain why. If there are no differences, say correct. If it is empty, say there is nothing for me to evaluate. If it is comparing two words, look for spelling and not capitalization and not punctuation.',
+    },
+    pronunciation: {
+        model: 'gpt-4-turbo',
+        maxTokens: 1024,
+        temp: 0,
+        prompt: 'List unique differences between the pronunciation of the ',
     },
 };
 
diff --git a/src/client/util/CurrentUserUtils.ts b/src/client/util/CurrentUserUtils.ts
index e095bc659..c712dba21 100644
--- a/src/client/util/CurrentUserUtils.ts
+++ b/src/client/util/CurrentUserUtils.ts
@@ -262,6 +262,7 @@ export class CurrentUserUtils {
             }
             return plotly;
         }
+        
         const plotlyView = (opts:DocumentOptions) => {
             const rtfield = new RichTextField(JSON.stringify(
                 {doc: {type:"doc",content:[
diff --git a/src/client/util/DictationManager.ts b/src/client/util/DictationManager.ts
index bc9fe813f..b9a465515 100644
--- a/src/client/util/DictationManager.ts
+++ b/src/client/util/DictationManager.ts
@@ -350,7 +350,7 @@ export namespace DictationManager {
                         const head = 3;
                         const anchor = head + prompt.length;
                         const proseMirrorState = `{"doc":{"type":"doc","content":[{"type":"ordered_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"type":"text","text":"${prompt}"}]}]}]}]},"selection":{"type":"text","anchor":${anchor},"head":${head}}}`;
-                        proto.data = new RichTextField(proseMirrorState);
+                        proto.data = new RichTextField(proseMirrorState, prompt);
                         proto.backgroundColor = '#eeffff';
                         target.props.addDocTab(newBox, OpenWhere.addRight);
                     },
diff --git a/src/client/views/.MetadataEntryMenu.tsx.icloud b/src/client/views/.MetadataEntryMenu.tsx.icloud
new file mode 100644
index 000000000..ada9927c9
Binary files /dev/null and b/src/client/views/.MetadataEntryMenu.tsx.icloud differ
diff --git a/src/client/views/.Touchable.tsx.icloud b/src/client/views/.Touchable.tsx.icloud
new file mode 100644
index 000000000..e458bbe47
Binary files /dev/null and b/src/client/views/.Touchable.tsx.icloud differ
diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index 6976deea5..c45b1494b 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -2,7 +2,7 @@
 /* eslint-disable jsx-a11y/click-events-have-key-events */
 /* eslint-disable react/jsx-props-no-spreading */
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { action, computed, makeObservable, observable } from 'mobx';
+import { action, computed, makeObservable, observable, trace } from 'mobx';
 import { observer } from 'mobx-react';
 import { Docs } from '../../documents/Documents';
 import * as React from 'react';
@@ -56,6 +56,8 @@ export class CollectionCarouselView extends CollectionSubView() {
         Doc.setDocFilter(this.Document, 'star', undefined, 'match');
         this.layoutDoc.practiceMode = practiceMode.NORMAL;
         this.layoutDoc._carousel_index = 0;
+        this.carouselItems.forEach(item => { item.layout[this.practiceField] = undefined}); //prettier-ignore
+        console.log(this.carouselItems.length);
     }
 
     componentWillUnmount() {
@@ -202,6 +204,7 @@ export class CollectionCarouselView extends CollectionSubView() {
     };
 
     @computed get content() {
+        trace();
         if (this.layoutDoc._carousel_index === this.carouselItems.length && this.layoutDoc._carousel_index !== 0) {
             this.move(1);
         }
diff --git a/src/client/views/nodes/.LinkAnchorBox.scss.icloud b/src/client/views/nodes/.LinkAnchorBox.scss.icloud
new file mode 100644
index 000000000..193619551
Binary files /dev/null and b/src/client/views/nodes/.LinkAnchorBox.scss.icloud differ
diff --git a/src/client/views/nodes/AudioBox.tsx b/src/client/views/nodes/AudioBox.tsx
index 9deed4de4..5d0ed7eab 100644
--- a/src/client/views/nodes/AudioBox.tsx
+++ b/src/client/views/nodes/AudioBox.tsx
@@ -10,7 +10,7 @@ import { DateField } from '../../../fields/DateField';
 import { Doc } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
 import { ComputedField } from '../../../fields/ScriptField';
-import { Cast, DateCast, NumCast } from '../../../fields/Types';
+import { Cast, DateCast, DocCast, NumCast } from '../../../fields/Types';
 import { AudioField, nullAudio } from '../../../fields/URLField';
 import { formatTime } from '../../../Utils';
 import { Docs } from '../../documents/Documents';
@@ -29,6 +29,7 @@ import './AudioBox.scss';
 import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { OpenWhere } from './OpenWhere';
+import axios from 'axios';
 
 /**
  * AudioBox
@@ -257,6 +258,8 @@ export class AudioBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
             const [{ result }] = await Networking.UploadFilesToServer({ file: e.data });
             if (!(result instanceof Error)) {
                 this.Document[this.fieldKey] = new AudioField(result.accessPaths.agnostic.client);
+                this.Document.url = result.accessPaths.agnostic.client;
+                await this.pushInfo();
             }
         };
         this._recordStart = new Date().getTime();
@@ -284,9 +287,23 @@ export class AudioBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         }
     };
 
+    pushInfo = async () => {
+        const audio = {
+            file: this.path,
+        };
+        const response = await axios.post('http://localhost:105/recognize/', audio, {
+            headers: {
+                'Content-Type': 'application/json',
+            },
+        });
+        this.Document[DocData].phoneticTranscription = response.data['transcription'];
+        console.log('RESPONSE: ' + response.data['transcription']);
+    };
+
     // context menu
     specificContextMenu = (): void => {
         const funcs: ContextMenuProps[] = [];
+        // funcs.push({ description: 'Push info', event: this.pushInfo, icon: 'redo-alt' });
         funcs.push({
             description: (this.layoutDoc.hideAnchors ? "Don't hide" : 'Hide') + ' anchors',
             event: () => { this.layoutDoc.hideAnchors = !this.layoutDoc.hideAnchors; }, // prettier-ignore
diff --git a/src/client/views/nodes/ComparisonBox.scss b/src/client/views/nodes/ComparisonBox.scss
index 41ff56514..56a1e4fcc 100644
--- a/src/client/views/nodes/ComparisonBox.scss
+++ b/src/client/views/nodes/ComparisonBox.scss
@@ -26,11 +26,12 @@
     .submit-button {
         position: absolute;
         padding-bottom: 10px;
+        padding-top: 5px;
         padding-left: 5px;
         padding-right: 5px;
         // width: 80%;
         border-radius: 2px;
-        height: 15%;
+        height: 17%;
         display: inline-block;
         bottom: 0;
         // right: 0;
@@ -48,8 +49,13 @@
             }
         }
 
+        &.pronunciation {
+            width: 40%;
+            align-items: center;
+            justify-content: center;
+        }
         &.submit {
-            width: 80%;
+            width: 40%;
             // float: right;
 
             // position: absolute;
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 3d2a1f0a9..ce29a63b4 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -1,4 +1,5 @@
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { MathJax, MathJaxContext } from 'better-react-mathjax';
 import { Tooltip } from '@mui/material';
 import { action, computed, makeObservable, observable, reaction } from 'mobx';
 import { observer } from 'mobx-react';
@@ -33,6 +34,8 @@ import { FollowLinkScript } from '../../documents/DocUtils';
 import { schema } from '../nodes/formattedText/schema_rts';
 import { Id } from '../../../fields/FieldSymbols';
 import axios from 'axios';
+import ReactMarkdown from 'react-markdown';
+import { WebField, nullAudio } from '../../../fields/URLField';
 
 const API_URL = 'https://api.unsplash.com/search/photos';
 @observer
@@ -51,9 +54,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @observable private _outputValue = '';
     @observable private _loading = false;
     @observable private _isEmpty = false;
+    @observable private _audio: Doc = Docs.Create.TextDocument('');
     @observable childActive = false;
     @observable _yRelativeToTop: boolean = true;
     @observable _animating = '';
+    @observable mathJaxConfig = {
+        loader: { load: ['input/asciimath'] },
+    };
     private _ref = React.createRef<HTMLDivElement>();
 
     get revealOp() {
@@ -237,11 +244,71 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this.childActive = true;
     };
 
-    @action handleRenderGPTClick = () => {
+    @action handleRenderGPTClick = async () => {
         // Call the GPT model and get the output
+        // await this.pushInfo();
+        // console.log('PHONETIC TRANSCRIPTION: ' + DocCast(this._audio)[DocData]);
+        // this.Document.audio = this._audio;
+        console.log('Phonetic transcription: ' + DocCast(this.Document.audio).phoneticTranscription);
+        const phonTrans = DocCast(this.Document.audio).phoneticTranscription;
+        if (phonTrans) {
+            this._inputValue = StrCast(phonTrans);
+            console.log('INPUT:' + this._inputValue);
+            this.askGPTPhonemes(this._inputValue);
+        } else if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = 'alternate';
         this._outputValue = '';
-        if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
+    };
+
+    askGPTPhonemes = async (phonemes: string) => {
+        const question0 = 'These phonemes should match "what is your name": ' + phonemes + 'Use the structure of this response as guidance: "Your pronunciation of the vowel in "what" is not front enough. It should be pronounced like /uh/."';
+        const question =
+            'Match the following phonemes with each word in "what is your name": ' +
+            phonemes +
+            '. Note if a letter is added or missing that changes the meaning. If the mismatches are not allophones of the same phoneme and they are far away from each other on the vowel chart, list the difference. For the mismatches, use the structure of this response as guidance: "Your pronunciation of the vowel in "what" is not front enough. It should be pronounced like /uh/."';
+        const question1 =
+            'Consider all phonetic transcriptions of "what is your name" with different vowel pronunications. Compares these phonemes with that phonetic transcription: ' +
+            phonemes +
+            '. If the differences are not allophones of the same phoneme and they are far away from each other on the vowel chart, list the difference. If it is missing or added a letter, say that.';
+        //Only describe sound changes that will change the meaning drastically. Provide two sentences describing this. Do not list differences that do not change the meaning.';
+        const question2 = 'Is this a valid phonetic transcription of the phrase "what is your name": ' + phonemes + '.';
+        // If the difference found will definitely make the word be not understood and change the meaning, then list it. If the difference is minimal or the sound matches, do not list it.';
+        //These phonemes are supposed to match the pronunciation of ' +
+        //'hello: ' +
+        //phonemes +
+        //'. If there is a difference in sound that would change the meaning of the word or sentence, such as "pen" vs. "pin", describe that. Otherwise say "good job."';
+        // Identify any differences in pronunciation that would change the meaning of the intended word or sentence and only list differences that would change the meaning. If there are no major differences, say "Good job." If there are differences, describe it in terms of sounds in sentences.';
+        // const question =
+        //     'These phonemes are supposed to match the pronunciation of ' +
+        //     StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text) +
+        //     '. Identify any differences in pronunciation that would change the meaning of the intended word or sentence.';
+        console.log(question);
+        const res = await gptAPICall(question, GPTCallType.PRONUNCIATION);
+        console.log('GPT: ' + res);
+        if (!res) {
+            console.error('GPT call failed');
+            return;
+        }
+        // const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
+        // const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
+        // const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
+        // this._loading = true;
+    };
+
+    pushInfo = async () => {
+        const formData = new FormData();
+
+        console.log(DocCast(this._audio).dataDoc);
+        const audio = {
+            file: this._audio.url,
+        };
+        const response = await axios.post('http://localhost:105/recognize/', audio, {
+            headers: {
+                'Content-Type': 'application/json',
+            },
+        });
+        this.Document.phoneticTranscription = response.data['transcription'];
+        console.log('RESPONSE: ' + response.data['transcription']);
     };
 
     @action handleHover = () => {
@@ -391,22 +458,41 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         var collectionArr: Doc[] = [];
         for (let i = 1; i < senArr?.length!; i++) {
             const newDoc = Docs.Create.ComparisonDocument(senArr![i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
-            // newDoc.text = senArr![i];
-            // const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-            // newDoc[this.fieldKey + '_0'] = Docs.Create.TextDocument(dataSplit[1]);
-            // newDoc[this.fieldKey + '_1'] = Docs.Create.TextDocument(dataSplit[0]);
-            // newDoc['backgroundColor'] = 'lightgray';
-            // newDoc.image =
+
             if (StrCast(senArr![i]).includes('Keyword: ')) {
-                console.log('Here');
-                const img = await this.fetchImages(StrCast(senArr![i]).split('Keyword: ')[1]);
-                console.log(img);
-                DocCast(newDoc).image = img;
-                // DocCast(DocCast(newDoc).dataDoc)['image'] = img;
-                Doc.AddToMyOverlay(img);
+                const question = StrCast(senArr![i]).split('Keyword: ');
+                const img = await this.fetchImages(question[1]);
+                // newDoc['image'] = img;
+                // const newDoc = Docs.Create.TextDocument(dataSplit[1]);
+                const textSide1 = question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0];
+                const textDoc1 = Docs.Create.TextDocument(question[0]);
+                const rtfiel = new RichTextField(
+                    JSON.stringify({
+                        doc: {
+                            type: 'doc',
+                            content: [
+                                {
+                                    type: 'paragraph',
+                                    attrs: { align: null, color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
+                                    content: [
+                                        { type: 'text', text: question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0] },
+                                        { type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: img![Id] } },
+                                    ],
+                                },
+                            ],
+                        },
+                        selection: { type: 'text', anchor: 2, head: 2 },
+                    }),
+                    textSide1
+                );
+
+                textDoc1[DocData].text = rtfiel;
+                DocCast(newDoc)[DocData][this.fieldKey + '_1'] = textDoc1;
+
+                DocCast(newDoc)[DocData][this.fieldKey + '_0'] = Docs.Create.TextDocument(question[0].includes('Answer: ') ? question[0].split('Answer: ')[1] : question[1]);
+                // Doc.AddToMyOverlay(img!);
             }
 
-            console.log('ARR' + i + senArr![i]);
             collectionArr.push(newDoc);
         }
         this.createFlashcardPile(collectionArr, true);
@@ -473,7 +559,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             if (callType == GPTCallType.CHATCARD) {
                 DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
                 // this.flipFlashcard();
-            } else if (callType == GPTCallType.QUIZ) this._outputValue = res;
+            } else if (callType == GPTCallType.QUIZ) {
+                console.log(this._inputValue);
+                this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
+            }
             // DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
             // this._outputValue = res;
             else if (callType === GPTCallType.FLASHCARD) {
@@ -511,7 +600,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 if (i.className !== 'ProseMirror-separator') await this.getImageDesc(i.src);
             }
             this._loading = false;
-            this.flipFlashcard();
+            // this.flipFlashcard();
         }
         // console.log('HI' + this.ProseRef?.getElementsByTagName('img'));
     };
@@ -558,22 +647,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 _height: 150,
                 title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
             });
-            // return imageSnapshot;
             imageSnapshot['x'] = this.layoutDoc['x'];
             imageSnapshot['y'] = this.layoutDoc['y'];
-
-            // const newDoc = Docs.Create.TextDocument(selection);
-            // newDoc.text = selection;
-            // newDoc['backgroundColor'] = 'lightgray';
-
-            // Doc.AddToMyOverlay(imageSnapshot);
             return imageSnapshot;
-            return data.results[0].urls.small;
-            // Doc.AddEmbedding(newDoc, imageSnapshot);
-            // Doc.MakeEmbedding(imageSnapshot);
-            // return imageSnapshot;
-            // imageSnapshot['zIndex'] = 20000;
-            // this._props.DocumentView?.()._props.addDocument?.(newDoc);
         } catch (error) {
             console.log(error);
         }
@@ -660,6 +736,14 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         ContextMenu.Instance.displayMenu(x, y);
     };
 
+    evaluatePronunciation = () => {
+        const newAudio = Docs.Create.AudioDocument(nullAudio, { _width: 200, _height: 100 });
+        this.Document.audio = newAudio[DocData];
+        // DocCast(this.Document.embedContainer)()._props.addDocument?.(newAudio);
+        this._props.DocumentView?.()._props.addDocument?.(newAudio);
+        // Doc.AddToMyOverlay(newAudio);
+    };
+
     render() {
         const clearButton = (which: string) => (
             <Tooltip title={<div className="dash-tooltip">remove</div>}>
@@ -680,6 +764,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             // whichDoc['backgroundColor'] = this.layoutDoc['backgroundColor'];
 
             return targetDoc || layoutString ? (
+                // <MathJaxContext config={this.mathJaxConfig}>
+                //     <MathJax>
                 <>
                     <DocumentView
                         // eslint-disable-next-line react/jsx-props-no-spreading
@@ -701,8 +787,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         hideLinkButton
                         pointerEvents={this.childActive ? undefined : returnNone}
                     />
+                    {/* </MathJax> */}
                     {/* <div style={{ position: 'absolute', top: '-5px', left: '2px' }}>{layoutString ? null : clearButton(whichSlot)}</div> */}
-                </> // placeholder image if doc is missingleft: `${NumCast(this.layoutDoc.width, 200) - 33}px`
+                    {/* </MathJaxContext> // placeholder image if doc is missingleft: `${NumCast(this.layoutDoc.width, 200) - 33}px` */}
+                </>
             ) : (
                 <div className="placeholder">
                     <FontAwesomeIcon className="upload-icon" icon="cloud-upload-alt" size="lg" />
@@ -732,79 +820,36 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
                 const newDoc = Docs.Create.TextDocument(dataSplit[1]);
-                if (this.Document.image) DocCast(newDoc).image = DocCast(this.Document.image);
-                // console.log('D' + this.Document.image);
-                //if (DocCast(DocCast(newDoc).dataDoc)) DocCast(DocCast(newDoc).dataDoc)['image'] = this.dataDoc['image'];
-
-                // console.log('HI' + this.Document.image);
-                // const imageSnapshot = Docs.Create.ImageDocument(StrCast(this.Document.image), {
-                //     _nativeWidth: Doc.NativeWidth(this.layoutDoc),
-                //     _nativeHeight: Doc.NativeHeight(this.layoutDoc),
-                //     x: NumCast(this.layoutDoc.x),
-                //     y: NumCast(this.layoutDoc.y),
-                //     onClick: FollowLinkScript(),
-                //     _width: 150,
-                //     _height: 150,
-                //     title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
-                // });
-                // // return imageSnapshot;
-                // imageSnapshot['x'] = this.layoutDoc['x'];
-                // imageSnapshot['y'] = this.layoutDoc['y'];
-
-                // const newDoc = Docs.Create.TextDocument(selection);
-                // newDoc.text = selection;
-                // newDoc['backgroundColor'] = 'lightgray';
-                // newDoc.data = imageSnapshot;
-                // this.createDropTarget(this., this.fieldKey + '_0', 0)
-                // Doc.AddEmbedding(imageSnapshot, newDoc);
-                // Doc.SetContainer(imageSnapshot, newDoc);
-                // Doc.AddToMyOverlay(imageSnapshot);
-
-                // if (StrCast(this.dataDoc.data).includes('Keyword: ')) {
-                //     console.log('HERE' + this.dataDoc.data);
-                //     this.fetchImages(StrCast(this.dataDoc.data).split('Keyword: ')[1]);
-                // }
-                //     // const node = schema.nodes.dashDoc.create({
-                //     //     width: NumCast(newDoc._width),
-                //     //     height: NumCast(newDoc._height),
-                //     //     title: 'dashDoc',
-                //     //     docId: newDoc[Id],
-                //     //     float: 'unset',
-                //     // });
-                //     // Doc.AddEmbedding(images!, newDoc);
-                //     // Doc.SetContainer(images, this.newDoc);
-                // } else {
-                // newDoc.text = dataSplit[1];
-                // newDoc['backgroundColor'] = 'lightgray';
                 this.addDoc(newDoc, this.fieldKey + '_0');
-                // this.addDoc()
-                // }
-                // newDoc?.addDocument?.(images);
-
-                // if there is text from the pdf ai cards, put the question on the front side.
-                // eslint-disable-next-line prefer-destructuring
-                // newDoc.text = dataSplit[1];
-                // newDoc['backgroundColor'] = 'lightgray';
-                // this.addDoc(newDoc, this.fieldKey + '_0');
-                // DocCast(this.dataDoc[this.fieldKey + '_0'])[DocData].text = dataSplit[1];
-                // DocCast(this.dataDoc[this.fieldKey + '_0']).text = dataSplit[1];
-                // console.log('HI' + DocCast(this.dataDoc[this.fieldKey + '_0']).text);
-                //console.log('HEREEE' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text));
             }
 
             if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
                 const newDoc = Docs.Create.TextDocument(dataSplit[0]);
                 this.addDoc(newDoc, this.fieldKey + '_1');
-                // if there is text from the pdf ai cards, put the answer on the alternate side.
-                // eslint-disable-next-line prefer-destructuring
-
-                // newDoc[DocData].text = dataSplit[0];
-                // console.log('HEREEE' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text));
-                // console.log('HI' + DocCast(this.dataDoc[this.fieldKey + '_1']).text);
-                // DocCast(this.dataDoc[this.props.fieldKey + '_1'])[DocData].text = dataSplit[0];
-                // console.log('HEREEE' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text));
-                // DocCast(this.dataDoc[this.fieldKey + '_1'])[DocData].text = dataSplit[0];
+                // if (this.Document.image) {
+                //     console.log('ID: ' + DocCast(this.Document.image)[Id]);
+                //     const rtfiel = new RichTextField(
+                //         JSON.stringify({
+                //             doc: {
+                //                 type: 'doc',
+                //                 content: [
+                //                     {
+                //                         type: 'paragraph',
+                //                         attrs: { align: null, color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
+                //                         content: [
+                //                             { type: 'text', text: dataSplit[0] },
+                //                             { type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: DocCast(this.Document.image)[Id] } },
+                //                         ],
+                //                     },
+                //                 ],
+                //             },
+                //             selection: { type: 'text', anchor: 2, head: 2 },
+                //         })
+                //     );
+
+                //     newDoc[DocData].text = rtfiel;
+                // }
             }
 
             // render the QuizCards
@@ -819,7 +864,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             <textarea
                                 value={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._outputValue : this._inputValue}
                                 onChange={this.handleInputChange}
-                                onScroll={e => e.stopPropagation()}
+                                onScroll={e => {
+                                    e.stopPropagation();
+                                    e.preventDefault();
+                                }}
                                 placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
                                 readOnly={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate'}></textarea>
 
@@ -834,19 +882,25 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                 <div
                                     className="submit-buttonschema-header-button"
                                     onPointerDown={e => this.openContextMenu(e.clientX, e.clientY)}
-                                    style={{ position: 'absolute', top: '1px', left: '11px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
+                                    style={{ position: 'absolute', top: '5px', left: '11px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
                                     <FontAwesomeIcon color={'white'} icon="caret-down" />
                                 </div>
                                 <button className="submit-buttonrecord" onClick={this._listening ? this.stopListening : this.startListening} style={{ background: this._listening ? 'lightgray' : '', borderRadius: '2px' }}>
                                     {<FontAwesomeIcon icon="microphone" size="lg" />}
                                 </button>
+                                <button
+                                    className="submit-buttonpronunciation"
+                                    onClick={this.evaluatePronunciation}
+                                    style={{ display: 'inline-flex', alignItems: 'center', background: this._listening ? 'lightgray' : '', borderRadius: '2px', width: '100%' }}>
+                                    Evaluate Pronunciation
+                                </button>
 
                                 {this.layoutDoc[`_${this._props.fieldKey}_usePath`] !== 'alternate' ? (
-                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '300%' }}>
+                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
                                         Submit
                                     </button>
                                 ) : (
-                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderClick} style={{ borderRadius: '2px' }}>
+                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
                                         Redo the Question
                                     </button>
                                 )}
@@ -871,7 +925,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     }}
                     // onPointerUp={() => (this._isAnyChildContentActive = true)}
                 >
-                    {!this.layoutDoc[`_${this._props.fieldKey}_usePath`] && StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '' && !this.childActive ? <p className="explain">Enter text in the flashcard. </p> : null}
+                    {/* {!this.layoutDoc[`_${this._props.fieldKey}_usePath`] && StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '' && !this.childActive ? <p className="explain">Enter text in the flashcard. </p> : null} */}
                     {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
                     {this._loading ? (
                         <div className="loading-spinner" style={{ position: 'absolute' }}>
diff --git a/src/client/views/nodes/FieldView.tsx b/src/client/views/nodes/FieldView.tsx
index 138f00492..b9c3528d3 100644
--- a/src/client/views/nodes/FieldView.tsx
+++ b/src/client/views/nodes/FieldView.tsx
@@ -50,7 +50,7 @@ export interface FieldViewSharedProps {
     PanelHeight: () => number;
     isDocumentActive?: () => boolean | undefined; // whether a document should handle pointer events
     isContentActive: () => boolean | undefined; // whether document contents should handle pointer events
-    dontSelect: () => boolean | undefined;
+    dontSelect?: () => boolean | undefined;
     childFilters: () => string[];
     childFiltersByRanges: () => string[];
     styleProvider: Opt<StyleProviderFuncType>;
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index 93c07f3a8..ab7605829 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -384,17 +384,93 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         this._loading = false;
     };
 
+    getImageLabels = async () => {
+        this._loading = true;
+        try {
+            const hrefBase64 = await this.createCanvas();
+            // const hw = await gptImageLabel(hrefBase64, 'Find the image dimensions. Return as height and width.');
+            const response = await gptImageLabel(
+                hrefBase64,
+                //'What is the height and width of the image'
+                'For each group of words in the image, find the x-coordinate and ycoordinate of the top left corner. Find the width and height of the group. Return this information in this format with the correct information replacing the underscores: "observed word: _, x: _, y: _, width: _, height: _," No additional text, asterisks and put it all in one line. Divide the x and width by the width of the image. Divide the y and the height by the height of the image.'
+            );
+            // console.log(hw);
+            console.log('RESPONSE: ' + response);
+            this.createTextboxes(response);
+
+            //AnchorMenu.Instance.transferToFlashcard(response, NumCast(this.layoutDoc['x']), NumCast(this.layoutDoc['y']));
+        } catch (error) {
+            console.log('Error');
+        }
+        this._loading = false;
+    };
+
+    createTextboxes = (response: string) => {
+        const groups = response.replace('*', '').toLowerCase().split('observed word: ');
+        groups.shift();
+        for (var i = 0; i < groups.length; i++) {
+            console.log('Group ' + i + ': ' + groups[i]);
+        }
+        // console.log('GROUPS: ' + groups);
+        groups.forEach(
+            group => {
+                const groupArr = group.split(', ');
+                const word = groupArr[0];
+                const x = parseFloat(groupArr[1].substring(3));
+                const y = parseFloat(groupArr[2].substring(3));
+                const width = parseFloat(groupArr[3].substring(7));
+                const height = parseFloat(groupArr[4].substring(8));
+                const scaling = 1 / (this._props.NativeDimScaling?.() || 1);
+                const w = AnchorMenu.Instance.marqueeWidth * scaling;
+                const h = AnchorMenu.Instance.marqueeHeight * scaling;
+
+                const newCol = Docs.Create.TextDocument(word, {
+                    _width: w * width,
+                    //width * NumCast(this.dataDoc[this.fieldKey + '_nativeWidth']),
+                    _height: h * height + 20,
+                    //height * NumCast(this.dataDoc[this.fieldKey + '_nativeHeight']),
+                    _layout_fitWidth: true,
+                    _layout_autoHeight: true,
+                });
+                newCol.x = x * w;
+                newCol.y = y * h;
+                // newCol.x = x * NumCast(this.dataDoc[this.fieldKey + '_nativeWidth']);
+                // newCol.y = y * NumCast(this.dataDoc[this.fieldKey + '_nativeHeight']);
+                newCol.zIndex = 1000;
+                newCol.forceActive = true;
+                newCol.quiz = true;
+                this.addDocument(newCol);
+            }
+            // console.log(group);
+        );
+    };
+
     @action
     setRef = (iref: HTMLImageElement | null) => {
         this._imageRef = iref;
     };
 
+    pushInfo = async () => {
+        const formData = new FormData();
+
+        const newArticle = {
+            file: '/files/audio/6b412a6222d631a7fff8a8320.mp3',
+        };
+        const response = await axios.post('http://localhost:105/recognize/', newArticle, {
+            headers: {
+                'Content-Type': 'application/json',
+            },
+        });
+        console.log('RESPONSE: ' + response.data['transcription']);
+    };
+
     specificContextMenu = (): void => {
         const field = Cast(this.dataDoc[this.fieldKey], ImageField);
         if (field) {
             const funcs: ContextMenuProps[] = [];
             // funcs.push({ description: 'Create ai flashcards', event: () => this.getImageDesc(), icon: 'id-card' });
-            funcs.push({ description: 'Get Images', event: () => this.handleSelection('Cats'), icon: 'redo-alt' });
+            // funcs.push({ description: 'Push info', event: this.pushInfo, icon: 'redo-alt' });
+            funcs.push({ description: 'Get Labels', event: this.getImageLabels, icon: 'redo-alt' });
             funcs.push({ description: 'Rotate Clockwise 90', event: this.rotate, icon: 'redo-alt' });
             funcs.push({ description: `Show ${this.layoutDoc._showFullRes ? 'Dynamic Res' : 'Full Res'}`, event: this.resolution, icon: 'expand' });
             funcs.push({ description: 'Set Native Pixel Size', event: this.setNativeSize, icon: 'expand-arrows-alt' });
diff --git a/src/client/views/nodes/LinkAnchorBox.tsx b/src/client/views/nodes/LinkAnchorBox.tsx
new file mode 100644
index 000000000..0a4325d8c
--- /dev/null
+++ b/src/client/views/nodes/LinkAnchorBox.tsx
@@ -0,0 +1,115 @@
+import { action, computed, makeObservable } from 'mobx';
+import { observer } from 'mobx-react';
+import * as React from 'react';
+import { Utils, emptyFunction, setupMoveUpEvents } from '../../../Utils';
+import { Doc } from '../../../fields/Doc';
+import { NumCast, StrCast } from '../../../fields/Types';
+import { TraceMobx } from '../../../fields/util';
+import { DragManager, dropActionType } from '../../util/DragManager';
+import { LinkFollower } from '../../util/LinkFollower';
+import { SelectionManager } from '../../util/SelectionManager';
+import { ViewBoxBaseComponent } from '../DocComponent';
+import { StyleProp } from '../StyleProvider';
+import { FieldView, FieldViewProps } from './FieldView';
+import './LinkAnchorBox.scss';
+import { LinkInfo } from './LinkDocPreview';
+const { default: { MEDIUM_GRAY }, } = require('../global/globalCssVariables.module.scss'); // prettier-ignore
+@observer
+export class LinkAnchorBox extends ViewBoxBaseComponent<FieldViewProps>() {
+    public static LayoutString(fieldKey: string) {
+        return FieldView.LayoutString(LinkAnchorBox, fieldKey);
+    }
+    _doubleTap = false;
+    _lastTap: number = 0;
+    _ref = React.createRef<HTMLDivElement>();
+    _isOpen = false;
+    _timeout: NodeJS.Timeout | undefined;
+
+    constructor(props: FieldViewProps) {
+        super(props);
+        makeObservable(this);
+    }
+
+    componentDidMount() {
+        this._props.setContentViewBox?.(this);
+    }
+
+    @computed get linkSource() {
+        return this.DocumentView?.().containerViewPath?.().lastElement().Document; // this._props.styleProvider?.(this.dataDoc, this._props, StyleProp.LinkSource);
+    }
+
+    onPointerDown = (e: React.PointerEvent) => {
+        const linkSource = this.linkSource;
+        linkSource &&
+            setupMoveUpEvents(this, e, this.onPointerMove, emptyFunction, (e, doubleTap) => {
+                if (doubleTap) LinkFollower.FollowLink(this.Document, linkSource, false);
+                else this._props.select(false);
+            });
+    };
+    onPointerMove = action((e: PointerEvent, down: number[], delta: number[]) => {
+        const cdiv = this._ref?.current?.parentElement;
+        if (!this._isOpen && cdiv) {
+            const bounds = cdiv.getBoundingClientRect();
+            const pt = Utils.getNearestPointInPerimeter(bounds.left, bounds.top, bounds.width, bounds.height, e.clientX, e.clientY);
+            const separation = Math.sqrt((pt[0] - e.clientX) * (pt[0] - e.clientX) + (pt[1] - e.clientY) * (pt[1] - e.clientY));
+            if (separation > 100) {
+                const dragData = new DragManager.DocumentDragData([this.Document]);
+                dragData.dropAction = dropActionType.embed;
+                dragData.dropPropertiesToRemove = ['link_anchor_1_x', 'link_anchor_1_y', 'link_anchor_2_x', 'link_anchor_2_y', 'onClick'];
+                DragManager.StartDocumentDrag([this._ref.current!], dragData, pt[0], pt[1]);
+                return true;
+            } else {
+                this.layoutDoc[this.fieldKey + '_x'] = ((pt[0] - bounds.left) / bounds.width) * 100;
+                this.layoutDoc[this.fieldKey + '_y'] = ((pt[1] - bounds.top) / bounds.height) * 100;
+                this.layoutDoc.link_autoMoveAnchors = false;
+            }
+        }
+        return false;
+    });
+
+    specificContextMenu = (e: React.MouseEvent): void => {};
+
+    render() {
+        TraceMobx();
+        const small = this._props.PanelWidth() <= 1; // this happens when rendered in a treeView
+        const x = NumCast(this.layoutDoc[this.fieldKey + '_x'], 100);
+        const y = NumCast(this.layoutDoc[this.fieldKey + '_y'], 100);
+        const background = this._props.styleProvider?.(this.dataDoc, this._props, StyleProp.BackgroundColor + ':anchor');
+        const anchor = this.fieldKey === 'link_anchor_1' ? 'link_anchor_2' : 'link_anchor_1';
+        const anchorScale = !this.dataDoc[this.fieldKey + '_useSmallAnchor'] && (x === 0 || x === 100 || y === 0 || y === 100) ? 1 : 0.25;
+        const targetTitle = StrCast((this.dataDoc[anchor] as Doc)?.title);
+        const selView = SelectionManager.Views.lastElement()?._props.LayoutTemplateString?.includes('link_anchor_1')
+            ? 'link_anchor_1'
+            : SelectionManager.Views.lastElement()?._props.LayoutTemplateString?.includes('link_anchor_2')
+              ? 'link_anchor_2'
+              : '';
+        return (
+            <div
+                ref={this._ref}
+                title={targetTitle}
+                className={`linkAnchorBox-cont${small ? '-small' : ''}`}
+                onPointerEnter={e =>
+                    LinkInfo.SetLinkInfo({
+                        DocumentView: this.DocumentView,
+                        styleProvider: this._props.styleProvider,
+                        linkSrc: this.linkSource,
+                        linkDoc: this.Document,
+                        showHeader: true,
+                        location: [e.clientX, e.clientY + 20],
+                        noPreview: false,
+                    })
+                }
+                onPointerDown={this.onPointerDown}
+                onContextMenu={this.specificContextMenu}
+                style={{
+                    border: selView && this.dataDoc[selView] === this.dataDoc[this.fieldKey] ? `solid ${MEDIUM_GRAY} 2px` : undefined,
+                    background,
+                    left: `calc(${x}% - ${small ? 2.5 : 7.5}px)`,
+                    top: `calc(${y}% - ${small ? 2.5 : 7.5}px)`,
+                    transform: `scale(${anchorScale})`,
+                    cursor: 'grab',
+                }}
+            />
+        );
+    }
+}
diff --git a/src/client/views/nodes/ae6d-ba67-4ace-93aa-0f9e0bd96b88.wav b/src/client/views/nodes/ae6d-ba67-4ace-93aa-0f9e0bd96b88.wav
new file mode 100644
index 000000000..dc71e7886
Binary files /dev/null and b/src/client/views/nodes/ae6d-ba67-4ace-93aa-0f9e0bd96b88.wav differ
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 3c12db965..274330d31 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -3,7 +3,7 @@
 import { IconProp } from '@fortawesome/fontawesome-svg-core';
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { Tooltip } from '@mui/material';
-import { action, computed, IReactionDisposer, makeObservable, observable, ObservableSet, reaction, runInAction } from 'mobx';
+import { action, computed, IReactionDisposer, makeObservable, observable, ObservableSet, reaction, runInAction, trace } from 'mobx';
 import { observer } from 'mobx-react';
 import { baseKeymap, selectAll } from 'prosemirror-commands';
 import { history } from 'prosemirror-history';
@@ -361,10 +361,10 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
                 const rtField = (layoutData !== prevData ? layoutData : undefined) ?? protoData;
                 if (this._applyingChange !== this.fieldKey && (force || textChange || removeSelection(newJson) !== removeSelection(prevData?.Data))) {
                     this._applyingChange = this.fieldKey;
-                    textChange && (dataDoc[this.fieldKey + '_modificationDate'] = new DateField(new Date(Date.now())));
                     if ((!prevData && !protoData && !layoutData) || newText || (!newText && !protoData && !layoutData)) {
                         // if no template, or there's text that didn't come from the layout template, write it to the document. (if this is driven by a template, then this overwrites the template text which is intended)
                         if (force || ((this._finishingLink || this._props.isContentActive() || this._inDrop) && (textChange || removeSelection(newJson) !== removeSelection(prevData?.Data)))) {
+                            textChange && (dataDoc[this.fieldKey + '_modificationDate'] = new DateField(new Date(Date.now())));
                             const numstring = NumCast(dataDoc[this.fieldKey], null);
                             dataDoc[this.fieldKey] =
                                 numstring !== undefined ? Number(newText) : newText || (DocCast(dataDoc.proto)?.[this.fieldKey] === undefined && this.layoutDoc[this.fieldKey] === undefined) ? new RichTextField(newJson, newText) : undefined;
@@ -373,6 +373,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
                             unchanged = false;
                         }
                     } else if (rtField) {
+                        textChange && (dataDoc[this.fieldKey + '_modificationDate'] = new DateField(new Date(Date.now())));
                         // if we've deleted all the text in a note driven by a template, then restore the template data
                         dataDoc[this.fieldKey] = undefined;
                         this._editorView.updateState(EditorState.fromJSON(this.config, JSON.parse(rtField.Data)));
@@ -2206,7 +2207,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
                         />
                     </div>
                     {this.noSidebar || !this.SidebarShown || this.layout_sidebarWidthPercent === '0%' ? null : this.sidebarCollection}
-                    {this.noSidebar || this.Document._layout_noSidebar || this.Document._createDocOnCR || this.layoutDoc._chromeHidden ? null : this.sidebarHandle}
+                    {this.noSidebar || this.Document._layout_noSidebar || this.Document._createDocOnCR || this.layoutDoc._chromeHidden || this.Document.quiz ? null : this.sidebarHandle}
                     {this.audioHandle}
                     {this.layoutDoc._layout_enableAltContentUI && !this.layoutDoc._chromeHidden ? this.overlayAlternateIcon : null}
                 </div>
diff --git a/src/fields/RichTextField.ts b/src/fields/RichTextField.ts
index 3f13f7e6d..613bb0fd1 100644
--- a/src/fields/RichTextField.ts
+++ b/src/fields/RichTextField.ts
@@ -13,10 +13,15 @@ export class RichTextField extends ObjectField {
     @serializable(true)
     readonly Text: string;
 
-    constructor(data: string, text: string = '') {
+    /**
+     * NOTE: if 'text' doesn't match the plain text of 'data', this can cause infinite loop problems or other artifacts when rendered.
+     * @param data this is the formatted text representation of the RTF
+     * @param text this is the plain text of whatever text is in the 'data'
+     */
+    constructor(data: string, text: string) {
         super();
         this.Data = data;
-        this.Text = text;
+        this.Text = text; // ideally, we'd compute 'text' from 'data' by doing what Prosemirror does at run-time ... just need to figure out how to write that function accurately
     }
 
     Empty() {
-- 
cgit v1.2.3-70-g09d2


From 7155035307d774fdd7a19e871667be7147dbfa96 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Tue, 9 Jul 2024 14:59:23 -0400
Subject: prompt

---
 src/client/apis/gpt/GPT.ts               |  2 +-
 src/client/views/nodes/ComparisonBox.tsx | 18 +++++++++++++++---
 2 files changed, 16 insertions(+), 4 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index 8e08265d6..568e28d02 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -63,7 +63,7 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
     },
     pronunciation: {
         model: 'gpt-4-turbo',
-        maxTokens: 1024,
+        maxTokens: 4096,
         temp: 0,
         prompt: 'List unique differences between the pronunciation of the ',
     },
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index ce29a63b4..8b3b6578c 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -261,11 +261,23 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     };
 
     askGPTPhonemes = async (phonemes: string) => {
-        const question0 = 'These phonemes should match "what is your name": ' + phonemes + 'Use the structure of this response as guidance: "Your pronunciation of the vowel in "what" is not front enough. It should be pronounced like /uh/."';
+        const phon = 'w ʌ t ɪ z j ɔː ɹ n e ɪ m ';
+        const phon2 = 'h aʊ ɛ r j u t ʌ d eɪ';
         const question =
-            'Match the following phonemes with each word in "what is your name": ' +
+            'Consider all possible phonetic transcriptions of "she sells seashells by the sea shore" that is standard in speech without showing the user. Align the phonemes with each word based on what is similar; if it seems like a part of the word is missing, check the phonemes beforehand and after to see if they should be part of that word and reevaluate to see if those phonemes should be a part of that word. Note if a word or sound missing, including missing vowels and consonants. Compare the phonemes in each word with those phonetic transcriptions without displaying anything to the user: "' +
             phonemes +
-            '. Note if a letter is added or missing that changes the meaning. If the mismatches are not allophones of the same phoneme and they are far away from each other on the vowel chart, list the difference. For the mismatches, use the structure of this response as guidance: "Your pronunciation of the vowel in "what" is not front enough. It should be pronounced like /uh/."';
+            '". If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference. If there is a sound missing, note that. If nothing is wrong, say "good job" for the word. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ".';
+        const question5 =
+            'Consider all possible phonetic transcriptions of "how are you today" that is standard in speech without showing the user. Compare these phonemes with those phonetic transcriptions without displaying anything to the user: "' +
+            phonemes +
+            '". If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat, note this difference. If not, say "good job" for the word. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r".';
+        const question4 =
+            'Match the following phonemes as words with each word in "what is your name" without displaying this to the user: "w ɛ t ɪ z j i ɹ n eɪ m ". If everything is correct, return only "good job" with no other notes. Note if a letter is added or missing if that letter changes the meaning. If a letter does not match the real phonetic transcription of the phrase, note this only if the letters are not allophones of the same phoneme and if they are far away from each other on the vowel chart.';
+        const question0 = 'These phonemes should match "what is your name": ' + phon + 'Use the structure of this response as guidance: "Your pronunciation of the vowel in "what" is not front enough. It should be pronounced like /uh/."';
+        const question3 =
+            'Match the following phonemes as words with each word in "what is your name" without displaying this to the user and there will be spaces between diphthongs and colons so treat it like they are together: ' +
+            phon +
+            '.  If everything is correct, return only "good job" with no other notes. Note if a letter is added or missing if that letter changes the meaning. If mismatching sounds are not allophones of the same phoneme and they are far away from each other on the vowel chart, describe the difference. For the mismatches, use the structure of this response as guidance: "Your pronunciation of the vowel in "what" is not pronounced correctly. It should be pronounced like /uh/." Do not list anything that is correct.';
         const question1 =
             'Consider all phonetic transcriptions of "what is your name" with different vowel pronunications. Compares these phonemes with that phonetic transcription: ' +
             phonemes +
-- 
cgit v1.2.3-70-g09d2


From f7165ab3f0d9c652aea41c92aa4a820f2d5d6b94 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Wed, 10 Jul 2024 13:45:10 -0400
Subject: stuff

---
 src/client/apis/gpt/GPT.ts               |  4 ++--
 src/client/views/nodes/ComparisonBox.tsx | 30 ++++++++++++++++++++++++------
 2 files changed, 26 insertions(+), 8 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index 568e28d02..0a4dc2423 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -64,8 +64,8 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
     pronunciation: {
         model: 'gpt-4-turbo',
         maxTokens: 4096,
-        temp: 0,
-        prompt: 'List unique differences between the pronunciation of the ',
+        temp: 0.3,
+        prompt: '',
     },
 };
 
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 8b3b6578c..b28ef24ec 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -250,7 +250,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         // console.log('PHONETIC TRANSCRIPTION: ' + DocCast(this._audio)[DocData]);
         // this.Document.audio = this._audio;
         console.log('Phonetic transcription: ' + DocCast(this.Document.audio).phoneticTranscription);
-        const phonTrans = DocCast(this.Document.audio).phoneticTranscription;
+        // const phonTrans = DocCast(this.Document.audio).phoneticTranscription;
+        const phonTrans = 's';
         if (phonTrans) {
             this._inputValue = StrCast(phonTrans);
             console.log('INPUT:' + this._inputValue);
@@ -261,12 +262,29 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     };
 
     askGPTPhonemes = async (phonemes: string) => {
-        const phon = 'w ʌ t ɪ z j ɔː ɹ n e ɪ m ';
-        const phon2 = 'h aʊ ɛ r j u t ʌ d eɪ';
-        const question =
-            'Consider all possible phonetic transcriptions of "she sells seashells by the sea shore" that is standard in speech without showing the user. Align the phonemes with each word based on what is similar; if it seems like a part of the word is missing, check the phonemes beforehand and after to see if they should be part of that word and reevaluate to see if those phonemes should be a part of that word. Note if a word or sound missing, including missing vowels and consonants. Compare the phonemes in each word with those phonetic transcriptions without displaying anything to the user: "' +
+        const phon = 'w ʌ ɪ z j ɔː ɹ n e ɪ m ';
+        const phon2 = 'h ʌ ɛ r j ʌ t ʌ d eɪ';
+        const phon3 = 'ʃ eɪ oʊ s i ʃ oʊ z b aɪ ð ə s iː ʃ oʊ';
+        const phon4 = 'k a m o e s t a s h ɔi';
+        const phon5 = 'e l s e n a l';
+        const question10 =
+            'Break into syllables by putting some of the phonemes together if they create a syllable or alone if it does not in "ʃ eɪ oʊ s i ʃ oʊ z b a ɪ ð ə s iː ʃ oʊ". Then align the syllables with the words of "she sells sea shells by the sea shore". Multiple syllables can be part of one word. Then consider all possible phonetic transcriptions of "she sells seashells by the sea shore" that is standard in speech without showing the user. Align the phoneme syllables with each word based on what is similar; if it seems like a part of the word is missing, check the phonemes beforehand and after to see if they should be part of that word and reevaluate to see if those phonemes should be a part of that word. Note if a word or sound missing, including missing vowels and consonants. Compare the phonemes in each word with those phonetic transcriptions without displaying anything to the user. phonemes. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference. If there is a sound missing, note that. If nothing is wrong, say "good job" for the word. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and the splitting of words since that is your issue, not the users.';
+        const question11 =
+            "Consider all possible phonetic transcriptions of the sentence 'cómo' as commonly spoken. Compare these with provided phonetic transcriptions: " +
+            phon3 +
+            ". Align phonemes with each word to approximate its pronunciation without revealing details. Ensure correct syllable alignment and identify any missing sounds or mismatched vowels/consonants. Provide feedback per word on pronunciation accuracy. Note specific mismatches or missing sounds, and clarify pronunciation guidelines (e.g., 'i' sounds like 'ee'). Just so you know, 'i' sounds like 'ee' as in 'bee', not 'ih' as an 'lick'. Interpret 'ɹ' as the same as 'r'. Interpret 'ʌ' as the same as 'ə'. If 'ɚ', 'ɔː', and 'ɔ' are options for pronunciation, do not choose 'ɚ'. Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence.'";
+        const questionEng =
+            'Consider all possible phonetic transcriptions of the intended sentence “vamos por un café" that is standard in speech without showing the user. Compare the phonemes in each word with those phonetic transcriptions without displaying anything to the user: "' +
             phonemes +
-            '". If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference. If there is a sound missing, note that. If nothing is wrong, say "good job" for the word. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ".';
+            '". Steps to do this: Align the list phonemes with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Individual phonemes can represent a word - they do not have to be combined. If it seems like a part of the word is missing, check the phonemes beforehand and after to see if they should instead be part of that word and reevaluate to see if those phonemes should be a part of that word; consider syllables of the words to do this alignment but do not process the letters in the wrong order. Do not use the same instance of a letter twice for the words - figure out where it belongs by evaluating which combinations with the letters before and after match better. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. If there is a sound missing, note that. If nothing is wrong, say "good job" for the word. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence.';
+        const question =
+            'Consider all possible phonetic transcriptions of the intended sentence “la señal" that is standard in Spanish speech without showing the user. Compare the phonemes in each word with those phonetic transcriptions without displaying anything to the user: "' +
+            phon5 +
+            '". Steps to do this: Align the list phonemes with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Individual phonemes can represent a word - they do not have to be combined. If it seems like a part of the word is missing, check the phonemes beforehand and after to see if they should instead be part of that word and reevaluate to see if those phonemes should be a part of that word; consider syllables of the words to do this alignment but do not process the letters in the wrong order. Only combine phonemes that are next to each other and do not take phonemes out of order. For example, if "al" is at the end, it should not be matched to "la" in the beginning. Do not use the same instance of a letter twice for the words - figure out where it belongs by evaluating which combinations with the letters before and after match better. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in Spanish speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. If there is a sound missing, note that. If nothing is wrong, say "good job" for the word. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable.';
+        const questionL =
+            'Consider all possible phonetic transcriptions of "she sells seashells by the sea shore" that is standard in speech without showing the user. Align the phonemes with each word based on what is similar in order; if it seems like a part of the word is missing, check the phonemes beforehand and after to see if they should be part of that word and reevaluate to see if those phonemes should be a part of that word; consider syllables of the words to do this alignment but do not process the letters in the wrong order. Note if a word or sound missing, including missing vowels and consonants. Compare the phonemes in each word with those phonetic transcriptions without displaying anything to the user: "' +
+            'ʃ eɪ oʊ s i ʃ oʊ z b aɪ ð ə s iː ʃ oʊ' +
+            '". If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference. If there is a sound missing, note that. If nothing is wrong, say "good job" for the word. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə" - do not distinguish between the schwa and "ʌ". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this.';
         const question5 =
             'Consider all possible phonetic transcriptions of "how are you today" that is standard in speech without showing the user. Compare these phonemes with those phonetic transcriptions without displaying anything to the user: "' +
             phonemes +
-- 
cgit v1.2.3-70-g09d2


From 3c873d191feec296aef82c48a912617a8d66eb18 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Fri, 19 Jul 2024 12:00:07 -0400
Subject: image labels

---
 deploy/assets/.pdf.worker.2.4.456.min.js.icloud |   Bin 0 -> 177 bytes
 deploy/assets/.pdf.worker.js.icloud             |   Bin 0 -> 163 bytes
 package-lock.json                               | 12482 ++++++++++------------
 package.json                                    |     3 +-
 src/client/apis/gpt/GPT.ts                      |     6 +-
 src/client/views/nodes/ComparisonBox.tsx        |   131 +-
 src/client/views/nodes/ImageBox.tsx             |    96 +-
 src/fields/.PresField.ts.icloud                 |   Bin 0 -> 159 bytes
 8 files changed, 5710 insertions(+), 7008 deletions(-)
 create mode 100644 deploy/assets/.pdf.worker.2.4.456.min.js.icloud
 create mode 100644 deploy/assets/.pdf.worker.js.icloud
 create mode 100644 src/fields/.PresField.ts.icloud

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/deploy/assets/.pdf.worker.2.4.456.min.js.icloud b/deploy/assets/.pdf.worker.2.4.456.min.js.icloud
new file mode 100644
index 000000000..160b48b59
Binary files /dev/null and b/deploy/assets/.pdf.worker.2.4.456.min.js.icloud differ
diff --git a/deploy/assets/.pdf.worker.js.icloud b/deploy/assets/.pdf.worker.js.icloud
new file mode 100644
index 000000000..3ad6d7be0
Binary files /dev/null and b/deploy/assets/.pdf.worker.js.icloud differ
diff --git a/package-lock.json b/package-lock.json
index 1a8e04611..c232c8acf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -221,6 +221,7 @@
                 "stream-browserify": "^3.0.0",
                 "styled-components": "^6.1.1",
                 "supercluster": "^8.0.1",
+                "tesseract.js": "^5.1.0",
                 "textarea-caret": "^3.1.0",
                 "tough-cookie": "^4.1.3",
                 "tslint": "^6.1.3",
@@ -321,7 +322,7 @@
         },
         "node_modules/@adobe/react-spectrum": {
             "version": "3.35.1",
-            "integrity": "sha512-QNhsaEHv5S5Vqsk7b8aCV9F7qAnWw8VJ/Nep/SOjeiJ7vK993jEOetEhSsUIQ8VHsMKs6qkTtZr0/DKoV+Z/9w==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/string": "^3.2.3",
                 "@react-aria/i18n": "^3.11.1",
@@ -390,8 +391,7 @@
         },
         "node_modules/@adobe/react-spectrum-ui": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/@adobe/react-spectrum-ui/-/react-spectrum-ui-1.2.0.tgz",
-            "integrity": "sha512-os3EdjfyJbrukLcZ5uYtdFRiDlLB3zq2JoXp19J/IDpZ8btibJeRZYSwjL+LscEiT2pOYaF2McMQdkZTIwnllw==",
+            "license": "CC-BY-ND-4.0",
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
                 "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
@@ -399,8 +399,7 @@
         },
         "node_modules/@adobe/react-spectrum-workflow": {
             "version": "2.3.4",
-            "resolved": "https://registry.npmjs.org/@adobe/react-spectrum-workflow/-/react-spectrum-workflow-2.3.4.tgz",
-            "integrity": "sha512-XPLzIBl58HdLF9WIPB7RDAvVXvCE3SjG+HaWQhW2P9MnxSz1DEA9O7mlTlYblJkMbfk10T/+RFaSupc1yoN+TA==",
+            "license": "CC-BY-ND-4.0",
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
                 "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
@@ -421,8 +420,7 @@
         },
         "node_modules/@azure/abort-controller": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz",
-            "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==",
+            "license": "MIT",
             "dependencies": {
                 "tslib": "^2.2.0"
             },
@@ -432,8 +430,7 @@
         },
         "node_modules/@azure/core-auth": {
             "version": "1.7.2",
-            "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.2.tgz",
-            "integrity": "sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==",
+            "license": "MIT",
             "dependencies": {
                 "@azure/abort-controller": "^2.0.0",
                 "@azure/core-util": "^1.1.0",
@@ -445,8 +442,7 @@
         },
         "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": {
             "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
-            "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
+            "license": "MIT",
             "dependencies": {
                 "tslib": "^2.6.2"
             },
@@ -456,8 +452,7 @@
         },
         "node_modules/@azure/core-http": {
             "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-3.0.4.tgz",
-            "integrity": "sha512-Fok9VVhMdxAFOtqiiAtg74fL0UJkt0z3D+ouUUxcRLzZNBioPRAMJFVxiWoJljYpXsRi4GDQHzQHDc9AiYaIUQ==",
+            "license": "MIT",
             "dependencies": {
                 "@azure/abort-controller": "^1.0.0",
                 "@azure/core-auth": "^1.3.0",
@@ -480,16 +475,14 @@
         },
         "node_modules/@azure/core-http/node_modules/uuid": {
             "version": "8.3.2",
-            "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-            "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+            "license": "MIT",
             "bin": {
                 "uuid": "dist/bin/uuid"
             }
         },
         "node_modules/@azure/core-lro": {
             "version": "2.7.2",
-            "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz",
-            "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==",
+            "license": "MIT",
             "dependencies": {
                 "@azure/abort-controller": "^2.0.0",
                 "@azure/core-util": "^1.2.0",
@@ -502,8 +495,7 @@
         },
         "node_modules/@azure/core-lro/node_modules/@azure/abort-controller": {
             "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
-            "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
+            "license": "MIT",
             "dependencies": {
                 "tslib": "^2.6.2"
             },
@@ -513,8 +505,7 @@
         },
         "node_modules/@azure/core-paging": {
             "version": "1.6.2",
-            "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz",
-            "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==",
+            "license": "MIT",
             "dependencies": {
                 "tslib": "^2.6.2"
             },
@@ -524,8 +515,7 @@
         },
         "node_modules/@azure/core-tracing": {
             "version": "1.0.0-preview.13",
-            "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz",
-            "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==",
+            "license": "MIT",
             "dependencies": {
                 "@opentelemetry/api": "^1.0.1",
                 "tslib": "^2.2.0"
@@ -536,8 +526,7 @@
         },
         "node_modules/@azure/core-util": {
             "version": "1.9.0",
-            "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz",
-            "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==",
+            "license": "MIT",
             "dependencies": {
                 "@azure/abort-controller": "^2.0.0",
                 "tslib": "^2.6.2"
@@ -548,8 +537,7 @@
         },
         "node_modules/@azure/core-util/node_modules/@azure/abort-controller": {
             "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
-            "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
+            "license": "MIT",
             "dependencies": {
                 "tslib": "^2.6.2"
             },
@@ -559,8 +547,7 @@
         },
         "node_modules/@azure/logger": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.2.tgz",
-            "integrity": "sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==",
+            "license": "MIT",
             "dependencies": {
                 "tslib": "^2.6.2"
             },
@@ -570,7 +557,7 @@
         },
         "node_modules/@azure/storage-blob": {
             "version": "12.18.0",
-            "integrity": "sha512-BzBZJobMoDyjJsPRMLNHvqHycTGrT8R/dtcTx9qUFcqwSRfGVK9A/cZ7Nx38UQydT9usZGbaDCN75QRNjezSAA==",
+            "license": "MIT",
             "dependencies": {
                 "@azure/abort-controller": "^1.0.0",
                 "@azure/core-http": "^3.0.0",
@@ -587,8 +574,7 @@
         },
         "node_modules/@babel/code-frame": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
-            "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/highlight": "^7.24.7",
                 "picocolors": "^1.0.0"
@@ -598,29 +584,29 @@
             }
         },
         "node_modules/@babel/compat-data": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz",
-            "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==",
+            "version": "7.24.9",
+            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz",
+            "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/core": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz",
-            "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==",
+            "version": "7.24.9",
+            "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz",
+            "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==",
             "peer": true,
             "dependencies": {
                 "@ampproject/remapping": "^2.2.0",
                 "@babel/code-frame": "^7.24.7",
-                "@babel/generator": "^7.24.7",
-                "@babel/helper-compilation-targets": "^7.24.7",
-                "@babel/helper-module-transforms": "^7.24.7",
-                "@babel/helpers": "^7.24.7",
-                "@babel/parser": "^7.24.7",
+                "@babel/generator": "^7.24.9",
+                "@babel/helper-compilation-targets": "^7.24.8",
+                "@babel/helper-module-transforms": "^7.24.9",
+                "@babel/helpers": "^7.24.8",
+                "@babel/parser": "^7.24.8",
                 "@babel/template": "^7.24.7",
-                "@babel/traverse": "^7.24.7",
-                "@babel/types": "^7.24.7",
+                "@babel/traverse": "^7.24.8",
+                "@babel/types": "^7.24.9",
                 "convert-source-map": "^2.0.0",
                 "debug": "^4.1.0",
                 "gensync": "^1.0.0-beta.2",
@@ -636,11 +622,11 @@
             }
         },
         "node_modules/@babel/generator": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz",
-            "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==",
+            "version": "7.24.10",
+            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz",
+            "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==",
             "dependencies": {
-                "@babel/types": "^7.24.7",
+                "@babel/types": "^7.24.9",
                 "@jridgewell/gen-mapping": "^0.3.5",
                 "@jridgewell/trace-mapping": "^0.3.25",
                 "jsesc": "^2.5.1"
@@ -651,8 +637,7 @@
         },
         "node_modules/@babel/helper-annotate-as-pure": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz",
-            "integrity": "sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/types": "^7.24.6"
             },
@@ -662,8 +647,7 @@
         },
         "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
-            "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/traverse": "^7.24.7",
                 "@babel/types": "^7.24.7"
@@ -673,13 +657,13 @@
             }
         },
         "node_modules/@babel/helper-compilation-targets": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz",
-            "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==",
+            "version": "7.24.8",
+            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz",
+            "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==",
             "dependencies": {
-                "@babel/compat-data": "^7.24.7",
-                "@babel/helper-validator-option": "^7.24.7",
-                "browserslist": "^4.22.2",
+                "@babel/compat-data": "^7.24.8",
+                "@babel/helper-validator-option": "^7.24.8",
+                "browserslist": "^4.23.1",
                 "lru-cache": "^5.1.1",
                 "semver": "^6.3.1"
             },
@@ -689,8 +673,7 @@
         },
         "node_modules/@babel/helper-create-class-features-plugin": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz",
-            "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-annotate-as-pure": "^7.24.7",
                 "@babel/helper-environment-visitor": "^7.24.7",
@@ -711,8 +694,7 @@
         },
         "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-            "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/types": "^7.24.7"
             },
@@ -722,8 +704,7 @@
         },
         "node_modules/@babel/helper-create-regexp-features-plugin": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz",
-            "integrity": "sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-annotate-as-pure": "^7.24.6",
                 "regexpu-core": "^5.3.1",
@@ -738,8 +719,7 @@
         },
         "node_modules/@babel/helper-define-polyfill-provider": {
             "version": "0.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
-            "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-compilation-targets": "^7.22.6",
                 "@babel/helper-plugin-utils": "^7.22.5",
@@ -753,8 +733,7 @@
         },
         "node_modules/@babel/helper-environment-visitor": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
-            "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/types": "^7.24.7"
             },
@@ -764,8 +743,7 @@
         },
         "node_modules/@babel/helper-function-name": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
-            "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/template": "^7.24.7",
                 "@babel/types": "^7.24.7"
@@ -776,8 +754,7 @@
         },
         "node_modules/@babel/helper-hoist-variables": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
-            "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/types": "^7.24.7"
             },
@@ -787,8 +764,7 @@
         },
         "node_modules/@babel/helper-member-expression-to-functions": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz",
-            "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/traverse": "^7.24.7",
                 "@babel/types": "^7.24.7"
@@ -799,8 +775,7 @@
         },
         "node_modules/@babel/helper-module-imports": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz",
-            "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/types": "^7.24.6"
             },
@@ -809,9 +784,9 @@
             }
         },
         "node_modules/@babel/helper-module-transforms": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz",
-            "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==",
+            "version": "7.24.9",
+            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz",
+            "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==",
             "dependencies": {
                 "@babel/helper-environment-visitor": "^7.24.7",
                 "@babel/helper-module-imports": "^7.24.7",
@@ -828,8 +803,7 @@
         },
         "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-module-imports": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
-            "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/traverse": "^7.24.7",
                 "@babel/types": "^7.24.7"
@@ -840,8 +814,7 @@
         },
         "node_modules/@babel/helper-optimise-call-expression": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
-            "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/types": "^7.24.7"
             },
@@ -851,16 +824,14 @@
         },
         "node_modules/@babel/helper-plugin-utils": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz",
-            "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-remap-async-to-generator": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz",
-            "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-annotate-as-pure": "^7.24.7",
                 "@babel/helper-environment-visitor": "^7.24.7",
@@ -875,8 +846,7 @@
         },
         "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-            "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/types": "^7.24.7"
             },
@@ -886,8 +856,7 @@
         },
         "node_modules/@babel/helper-replace-supers": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz",
-            "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-environment-visitor": "^7.24.7",
                 "@babel/helper-member-expression-to-functions": "^7.24.7",
@@ -902,8 +871,7 @@
         },
         "node_modules/@babel/helper-simple-access": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
-            "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/traverse": "^7.24.7",
                 "@babel/types": "^7.24.7"
@@ -914,8 +882,7 @@
         },
         "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
-            "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/traverse": "^7.24.7",
                 "@babel/types": "^7.24.7"
@@ -926,8 +893,7 @@
         },
         "node_modules/@babel/helper-split-export-declaration": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
-            "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/types": "^7.24.7"
             },
@@ -936,33 +902,30 @@
             }
         },
         "node_modules/@babel/helper-string-parser": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz",
-            "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==",
+            "version": "7.24.8",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-validator-identifier": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
-            "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-validator-option": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz",
-            "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==",
+            "version": "7.24.8",
+            "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
+            "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-wrap-function": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz",
-            "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-function-name": "^7.24.7",
                 "@babel/template": "^7.24.7",
@@ -974,13 +937,13 @@
             }
         },
         "node_modules/@babel/helpers": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz",
-            "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==",
+            "version": "7.24.8",
+            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz",
+            "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==",
             "peer": true,
             "dependencies": {
                 "@babel/template": "^7.24.7",
-                "@babel/types": "^7.24.7"
+                "@babel/types": "^7.24.8"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -988,8 +951,7 @@
         },
         "node_modules/@babel/highlight": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
-            "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-validator-identifier": "^7.24.7",
                 "chalk": "^2.4.2",
@@ -1001,9 +963,9 @@
             }
         },
         "node_modules/@babel/parser": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz",
-            "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
+            "version": "7.24.8",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz",
+            "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==",
             "bin": {
                 "parser": "bin/babel-parser.js"
             },
@@ -1013,8 +975,7 @@
         },
         "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz",
-            "integrity": "sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-environment-visitor": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -1028,8 +989,7 @@
         },
         "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.6.tgz",
-            "integrity": "sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1042,8 +1002,7 @@
         },
         "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz",
-            "integrity": "sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6",
@@ -1058,8 +1017,7 @@
         },
         "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz",
-            "integrity": "sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-environment-visitor": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -1073,8 +1031,7 @@
         },
         "node_modules/@babel/plugin-proposal-private-property-in-object": {
             "version": "7.21.0-placeholder-for-preset-env.2",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
-            "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.9.0"
             },
@@ -1084,8 +1041,7 @@
         },
         "node_modules/@babel/plugin-syntax-async-generators": {
             "version": "7.8.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
-            "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.8.0"
             },
@@ -1095,8 +1051,7 @@
         },
         "node_modules/@babel/plugin-syntax-class-properties": {
             "version": "7.12.13",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
-            "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.12.13"
             },
@@ -1106,8 +1061,7 @@
         },
         "node_modules/@babel/plugin-syntax-class-static-block": {
             "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
-            "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.14.5"
             },
@@ -1120,8 +1074,7 @@
         },
         "node_modules/@babel/plugin-syntax-dynamic-import": {
             "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
-            "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.8.0"
             },
@@ -1131,8 +1084,7 @@
         },
         "node_modules/@babel/plugin-syntax-export-namespace-from": {
             "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
-            "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.8.3"
             },
@@ -1142,8 +1094,7 @@
         },
         "node_modules/@babel/plugin-syntax-import-assertions": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz",
-            "integrity": "sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1156,8 +1107,7 @@
         },
         "node_modules/@babel/plugin-syntax-import-attributes": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz",
-            "integrity": "sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1170,8 +1120,7 @@
         },
         "node_modules/@babel/plugin-syntax-import-meta": {
             "version": "7.10.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
-            "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.10.4"
             },
@@ -1181,8 +1130,7 @@
         },
         "node_modules/@babel/plugin-syntax-json-strings": {
             "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
-            "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.8.0"
             },
@@ -1192,8 +1140,7 @@
         },
         "node_modules/@babel/plugin-syntax-jsx": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
-            "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.7"
             },
@@ -1206,16 +1153,14 @@
         },
         "node_modules/@babel/plugin-syntax-jsx/node_modules/@babel/helper-plugin-utils": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz",
-            "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
             "version": "7.10.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
-            "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.10.4"
             },
@@ -1225,8 +1170,7 @@
         },
         "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
             "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
-            "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.8.0"
             },
@@ -1236,8 +1180,7 @@
         },
         "node_modules/@babel/plugin-syntax-numeric-separator": {
             "version": "7.10.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
-            "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.10.4"
             },
@@ -1247,8 +1190,7 @@
         },
         "node_modules/@babel/plugin-syntax-object-rest-spread": {
             "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
-            "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.8.0"
             },
@@ -1258,8 +1200,7 @@
         },
         "node_modules/@babel/plugin-syntax-optional-catch-binding": {
             "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
-            "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.8.0"
             },
@@ -1269,8 +1210,7 @@
         },
         "node_modules/@babel/plugin-syntax-optional-chaining": {
             "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
-            "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.8.0"
             },
@@ -1280,8 +1220,7 @@
         },
         "node_modules/@babel/plugin-syntax-private-property-in-object": {
             "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
-            "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.14.5"
             },
@@ -1294,8 +1233,7 @@
         },
         "node_modules/@babel/plugin-syntax-top-level-await": {
             "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
-            "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.14.5"
             },
@@ -1308,8 +1246,7 @@
         },
         "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
             "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
-            "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-create-regexp-features-plugin": "^7.18.6",
                 "@babel/helper-plugin-utils": "^7.18.6"
@@ -1323,8 +1260,7 @@
         },
         "node_modules/@babel/plugin-transform-arrow-functions": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz",
-            "integrity": "sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1337,8 +1273,7 @@
         },
         "node_modules/@babel/plugin-transform-async-generator-functions": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz",
-            "integrity": "sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-environment-visitor": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6",
@@ -1354,8 +1289,7 @@
         },
         "node_modules/@babel/plugin-transform-async-to-generator": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz",
-            "integrity": "sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-module-imports": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6",
@@ -1370,8 +1304,7 @@
         },
         "node_modules/@babel/plugin-transform-block-scoped-functions": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz",
-            "integrity": "sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1384,8 +1317,7 @@
         },
         "node_modules/@babel/plugin-transform-block-scoping": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz",
-            "integrity": "sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1398,8 +1330,7 @@
         },
         "node_modules/@babel/plugin-transform-class-properties": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz",
-            "integrity": "sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-create-class-features-plugin": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -1413,8 +1344,7 @@
         },
         "node_modules/@babel/plugin-transform-class-static-block": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz",
-            "integrity": "sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-create-class-features-plugin": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6",
@@ -1429,8 +1359,7 @@
         },
         "node_modules/@babel/plugin-transform-classes": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz",
-            "integrity": "sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-annotate-as-pure": "^7.24.6",
                 "@babel/helper-compilation-targets": "^7.24.6",
@@ -1450,16 +1379,14 @@
         },
         "node_modules/@babel/plugin-transform-classes/node_modules/globals": {
             "version": "11.12.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-            "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/@babel/plugin-transform-computed-properties": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz",
-            "integrity": "sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/template": "^7.24.6"
@@ -1473,8 +1400,7 @@
         },
         "node_modules/@babel/plugin-transform-destructuring": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz",
-            "integrity": "sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1487,8 +1413,7 @@
         },
         "node_modules/@babel/plugin-transform-dotall-regex": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz",
-            "integrity": "sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-create-regexp-features-plugin": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -1502,8 +1427,7 @@
         },
         "node_modules/@babel/plugin-transform-duplicate-keys": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz",
-            "integrity": "sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1516,8 +1440,7 @@
         },
         "node_modules/@babel/plugin-transform-dynamic-import": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz",
-            "integrity": "sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-dynamic-import": "^7.8.3"
@@ -1531,8 +1454,7 @@
         },
         "node_modules/@babel/plugin-transform-exponentiation-operator": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz",
-            "integrity": "sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -1546,8 +1468,7 @@
         },
         "node_modules/@babel/plugin-transform-export-namespace-from": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz",
-            "integrity": "sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
@@ -1561,8 +1482,7 @@
         },
         "node_modules/@babel/plugin-transform-for-of": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz",
-            "integrity": "sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6"
@@ -1576,8 +1496,7 @@
         },
         "node_modules/@babel/plugin-transform-function-name": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz",
-            "integrity": "sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-compilation-targets": "^7.24.6",
                 "@babel/helper-function-name": "^7.24.6",
@@ -1592,8 +1511,7 @@
         },
         "node_modules/@babel/plugin-transform-json-strings": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz",
-            "integrity": "sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-json-strings": "^7.8.3"
@@ -1607,8 +1525,7 @@
         },
         "node_modules/@babel/plugin-transform-literals": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz",
-            "integrity": "sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1621,8 +1538,7 @@
         },
         "node_modules/@babel/plugin-transform-logical-assignment-operators": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz",
-            "integrity": "sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
@@ -1636,8 +1552,7 @@
         },
         "node_modules/@babel/plugin-transform-member-expression-literals": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz",
-            "integrity": "sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1650,8 +1565,7 @@
         },
         "node_modules/@babel/plugin-transform-modules-amd": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz",
-            "integrity": "sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-module-transforms": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -1665,8 +1579,7 @@
         },
         "node_modules/@babel/plugin-transform-modules-commonjs": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz",
-            "integrity": "sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-module-transforms": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6",
@@ -1681,8 +1594,7 @@
         },
         "node_modules/@babel/plugin-transform-modules-systemjs": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz",
-            "integrity": "sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-hoist-variables": "^7.24.6",
                 "@babel/helper-module-transforms": "^7.24.6",
@@ -1698,8 +1610,7 @@
         },
         "node_modules/@babel/plugin-transform-modules-umd": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz",
-            "integrity": "sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-module-transforms": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -1713,8 +1624,7 @@
         },
         "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz",
-            "integrity": "sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-create-regexp-features-plugin": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -1728,8 +1638,7 @@
         },
         "node_modules/@babel/plugin-transform-new-target": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz",
-            "integrity": "sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1742,8 +1651,7 @@
         },
         "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz",
-            "integrity": "sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
@@ -1757,8 +1665,7 @@
         },
         "node_modules/@babel/plugin-transform-numeric-separator": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz",
-            "integrity": "sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-numeric-separator": "^7.10.4"
@@ -1772,8 +1679,7 @@
         },
         "node_modules/@babel/plugin-transform-object-rest-spread": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz",
-            "integrity": "sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-compilation-targets": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6",
@@ -1789,8 +1695,7 @@
         },
         "node_modules/@babel/plugin-transform-object-super": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz",
-            "integrity": "sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/helper-replace-supers": "^7.24.6"
@@ -1804,8 +1709,7 @@
         },
         "node_modules/@babel/plugin-transform-optional-catch-binding": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz",
-            "integrity": "sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
@@ -1819,8 +1723,7 @@
         },
         "node_modules/@babel/plugin-transform-optional-chaining": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz",
-            "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.7",
                 "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
@@ -1835,16 +1738,14 @@
         },
         "node_modules/@babel/plugin-transform-optional-chaining/node_modules/@babel/helper-plugin-utils": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz",
-            "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/plugin-transform-parameters": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
-            "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.7"
             },
@@ -1857,16 +1758,14 @@
         },
         "node_modules/@babel/plugin-transform-parameters/node_modules/@babel/helper-plugin-utils": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz",
-            "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/plugin-transform-private-methods": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz",
-            "integrity": "sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-create-class-features-plugin": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -1880,8 +1779,7 @@
         },
         "node_modules/@babel/plugin-transform-private-property-in-object": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz",
-            "integrity": "sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-annotate-as-pure": "^7.24.6",
                 "@babel/helper-create-class-features-plugin": "^7.24.6",
@@ -1897,8 +1795,7 @@
         },
         "node_modules/@babel/plugin-transform-property-literals": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz",
-            "integrity": "sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1911,8 +1808,7 @@
         },
         "node_modules/@babel/plugin-transform-react-display-name": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.6.tgz",
-            "integrity": "sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -1925,8 +1821,7 @@
         },
         "node_modules/@babel/plugin-transform-react-jsx": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.6.tgz",
-            "integrity": "sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-annotate-as-pure": "^7.24.6",
                 "@babel/helper-module-imports": "^7.24.6",
@@ -1943,8 +1838,7 @@
         },
         "node_modules/@babel/plugin-transform-react-jsx-development": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.6.tgz",
-            "integrity": "sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/plugin-transform-react-jsx": "^7.24.6"
             },
@@ -1957,8 +1851,7 @@
         },
         "node_modules/@babel/plugin-transform-react-pure-annotations": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.6.tgz",
-            "integrity": "sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-annotate-as-pure": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -1972,8 +1865,7 @@
         },
         "node_modules/@babel/plugin-transform-regenerator": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz",
-            "integrity": "sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "regenerator-transform": "^0.15.2"
@@ -1987,8 +1879,7 @@
         },
         "node_modules/@babel/plugin-transform-reserved-words": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz",
-            "integrity": "sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -2001,8 +1892,7 @@
         },
         "node_modules/@babel/plugin-transform-shorthand-properties": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz",
-            "integrity": "sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -2015,8 +1905,7 @@
         },
         "node_modules/@babel/plugin-transform-spread": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz",
-            "integrity": "sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6"
@@ -2030,8 +1919,7 @@
         },
         "node_modules/@babel/plugin-transform-sticky-regex": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz",
-            "integrity": "sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -2044,8 +1932,7 @@
         },
         "node_modules/@babel/plugin-transform-template-literals": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz",
-            "integrity": "sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -2058,8 +1945,7 @@
         },
         "node_modules/@babel/plugin-transform-typeof-symbol": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz",
-            "integrity": "sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -2072,8 +1958,7 @@
         },
         "node_modules/@babel/plugin-transform-unicode-escapes": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz",
-            "integrity": "sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6"
             },
@@ -2086,8 +1971,7 @@
         },
         "node_modules/@babel/plugin-transform-unicode-property-regex": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz",
-            "integrity": "sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-create-regexp-features-plugin": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -2101,8 +1985,7 @@
         },
         "node_modules/@babel/plugin-transform-unicode-regex": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz",
-            "integrity": "sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-create-regexp-features-plugin": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -2116,8 +1999,7 @@
         },
         "node_modules/@babel/plugin-transform-unicode-sets-regex": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz",
-            "integrity": "sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-create-regexp-features-plugin": "^7.24.6",
                 "@babel/helper-plugin-utils": "^7.24.6"
@@ -2131,7 +2013,7 @@
         },
         "node_modules/@babel/preset-env": {
             "version": "7.24.6",
-            "integrity": "sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/compat-data": "^7.24.6",
                 "@babel/helper-compilation-targets": "^7.24.6",
@@ -2224,8 +2106,7 @@
         },
         "node_modules/@babel/preset-modules": {
             "version": "0.1.6-no-external-plugins",
-            "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
-            "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.0.0",
                 "@babel/types": "^7.4.4",
@@ -2237,7 +2118,7 @@
         },
         "node_modules/@babel/preset-react": {
             "version": "7.24.6",
-            "integrity": "sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.24.6",
                 "@babel/helper-validator-option": "^7.24.6",
@@ -2255,13 +2136,11 @@
         },
         "node_modules/@babel/regjsgen": {
             "version": "0.8.0",
-            "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
-            "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA=="
+            "license": "MIT"
         },
         "node_modules/@babel/runtime": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz",
-            "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==",
+            "license": "MIT",
             "dependencies": {
                 "regenerator-runtime": "^0.14.0"
             },
@@ -2271,8 +2150,7 @@
         },
         "node_modules/@babel/runtime-corejs3": {
             "version": "7.24.6",
-            "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.6.tgz",
-            "integrity": "sha512-tbC3o8uHK9xMgMsvUm9qGqxVpbv6yborMBLbDteHIc7JDNHsTV0vDMQ5j1O1NXvO+BDELtL9KgoWYaUVIVGt8w==",
+            "license": "MIT",
             "dependencies": {
                 "core-js-pure": "^3.30.2",
                 "regenerator-runtime": "^0.14.0"
@@ -2283,8 +2161,7 @@
         },
         "node_modules/@babel/template": {
             "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
-            "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/code-frame": "^7.24.7",
                 "@babel/parser": "^7.24.7",
@@ -2295,18 +2172,18 @@
             }
         },
         "node_modules/@babel/traverse": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
-            "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+            "version": "7.24.8",
+            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz",
+            "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==",
             "dependencies": {
                 "@babel/code-frame": "^7.24.7",
-                "@babel/generator": "^7.24.7",
+                "@babel/generator": "^7.24.8",
                 "@babel/helper-environment-visitor": "^7.24.7",
                 "@babel/helper-function-name": "^7.24.7",
                 "@babel/helper-hoist-variables": "^7.24.7",
                 "@babel/helper-split-export-declaration": "^7.24.7",
-                "@babel/parser": "^7.24.7",
-                "@babel/types": "^7.24.7",
+                "@babel/parser": "^7.24.8",
+                "@babel/types": "^7.24.8",
                 "debug": "^4.3.1",
                 "globals": "^11.1.0"
             },
@@ -2316,18 +2193,17 @@
         },
         "node_modules/@babel/traverse/node_modules/globals": {
             "version": "11.12.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-            "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/@babel/types": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz",
-            "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==",
+            "version": "7.24.9",
+            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz",
+            "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==",
             "dependencies": {
-                "@babel/helper-string-parser": "^7.24.7",
+                "@babel/helper-string-parser": "^7.24.8",
                 "@babel/helper-validator-identifier": "^7.24.7",
                 "to-fast-properties": "^2.0.0"
             },
@@ -2337,19 +2213,16 @@
         },
         "node_modules/@braintree/sanitize-url": {
             "version": "6.0.4",
-            "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz",
-            "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A=="
+            "license": "MIT"
         },
         "node_modules/@bundled-es-modules/pdfjs-dist": {
             "version": "3.6.172-alpha.1",
-            "resolved": "https://registry.npmjs.org/@bundled-es-modules/pdfjs-dist/-/pdfjs-dist-3.6.172-alpha.1.tgz",
-            "integrity": "sha512-edQXn/5UR1LU1rPoFaZCBk22X8COSO4xctUjakkX6YtZ8BYT9J4EStU8X4bqX7ht2FLC3J21YMQ6RPDmut/l2g=="
+            "license": "Apache-2.0"
         },
         "node_modules/@cspotcode/source-map-support": {
             "version": "0.8.1",
-            "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
-            "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@jridgewell/trace-mapping": "0.3.9"
             },
@@ -2359,9 +2232,8 @@
         },
         "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
             "version": "0.3.9",
-            "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
-            "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@jridgewell/resolve-uri": "^3.0.3",
                 "@jridgewell/sourcemap-codec": "^1.4.10"
@@ -2369,16 +2241,14 @@
         },
         "node_modules/@discoveryjs/json-ext": {
             "version": "0.5.7",
-            "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
-            "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10.0.0"
             }
         },
         "node_modules/@emotion/babel-plugin": {
             "version": "11.11.0",
-            "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz",
-            "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-module-imports": "^7.16.7",
                 "@babel/runtime": "^7.18.3",
@@ -2395,13 +2265,11 @@
         },
         "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": {
             "version": "1.9.0",
-            "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
-            "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
+            "license": "MIT"
         },
         "node_modules/@emotion/cache": {
             "version": "11.11.0",
-            "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz",
-            "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==",
+            "license": "MIT",
             "dependencies": {
                 "@emotion/memoize": "^0.8.1",
                 "@emotion/sheet": "^1.2.2",
@@ -2412,26 +2280,22 @@
         },
         "node_modules/@emotion/hash": {
             "version": "0.9.1",
-            "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz",
-            "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ=="
+            "license": "MIT"
         },
         "node_modules/@emotion/is-prop-valid": {
             "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz",
-            "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==",
+            "license": "MIT",
             "dependencies": {
                 "@emotion/memoize": "^0.8.1"
             }
         },
         "node_modules/@emotion/memoize": {
             "version": "0.8.1",
-            "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
-            "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA=="
+            "license": "MIT"
         },
         "node_modules/@emotion/react": {
             "version": "11.11.4",
-            "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz",
-            "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.18.3",
                 "@emotion/babel-plugin": "^11.11.0",
@@ -2453,8 +2317,7 @@
         },
         "node_modules/@emotion/serialize": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz",
-            "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==",
+            "license": "MIT",
             "dependencies": {
                 "@emotion/hash": "^0.9.1",
                 "@emotion/memoize": "^0.8.1",
@@ -2465,13 +2328,11 @@
         },
         "node_modules/@emotion/sheet": {
             "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz",
-            "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA=="
+            "license": "MIT"
         },
         "node_modules/@emotion/styled": {
             "version": "11.11.5",
-            "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.5.tgz",
-            "integrity": "sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.18.3",
                 "@emotion/babel-plugin": "^11.11.0",
@@ -2492,31 +2353,26 @@
         },
         "node_modules/@emotion/unitless": {
             "version": "0.8.1",
-            "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
-            "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
+            "license": "MIT"
         },
         "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz",
-            "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==",
+            "license": "MIT",
             "peerDependencies": {
                 "react": ">=16.8.0"
             }
         },
         "node_modules/@emotion/utils": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz",
-            "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg=="
+            "license": "MIT"
         },
         "node_modules/@emotion/weak-memoize": {
             "version": "0.3.1",
-            "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz",
-            "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww=="
+            "license": "MIT"
         },
         "node_modules/@eslint-community/eslint-utils": {
             "version": "4.4.0",
-            "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
-            "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+            "license": "MIT",
             "dependencies": {
                 "eslint-visitor-keys": "^3.3.0"
             },
@@ -2529,16 +2385,14 @@
         },
         "node_modules/@eslint-community/regexpp": {
             "version": "4.10.0",
-            "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
-            "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+            "license": "MIT",
             "engines": {
                 "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
             }
         },
         "node_modules/@eslint/eslintrc": {
             "version": "2.1.4",
-            "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
-            "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+            "license": "MIT",
             "dependencies": {
                 "ajv": "^6.12.4",
                 "debug": "^4.3.2",
@@ -2559,13 +2413,11 @@
         },
         "node_modules/@eslint/eslintrc/node_modules/argparse": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+            "license": "Python-2.0"
         },
         "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -2573,8 +2425,7 @@
         },
         "node_modules/@eslint/eslintrc/node_modules/globals": {
             "version": "13.24.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-            "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+            "license": "MIT",
             "dependencies": {
                 "type-fest": "^0.20.2"
             },
@@ -2585,10 +2436,19 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
+        "node_modules/@eslint/eslintrc/node_modules/globals/node_modules/type-fest": {
+            "version": "0.20.2",
+            "license": "(MIT OR CC0-1.0)",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-            "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+            "license": "MIT",
             "dependencies": {
                 "argparse": "^2.0.1"
             },
@@ -2598,8 +2458,7 @@
         },
         "node_modules/@eslint/eslintrc/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -2609,24 +2468,22 @@
         },
         "node_modules/@eslint/js": {
             "version": "9.3.0",
-            "integrity": "sha512-niBqk8iwv96+yuTwjM6bWg8ovzAPF9qkICsGtcoa5/dmqcEMfdwNAX7+/OHcJHc7wj7XqPxH98oAHytFYlw6Sw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
             }
         },
         "node_modules/@ffmpeg/core": {
             "version": "0.12.6",
-            "resolved": "https://registry.npmjs.org/@ffmpeg/core/-/core-0.12.6.tgz",
-            "integrity": "sha512-PrjWBTfGn2WVn9T7wGnzfFwChbqWeZc7tM9vvJZVRadYFUDakfzy7W0LpYC0cvvK0xT82qlBsk38lQhJ/Hps5A==",
+            "license": "MIT",
             "engines": {
                 "node": ">=16.x"
             }
         },
         "node_modules/@ffmpeg/ffmpeg": {
             "version": "0.12.10",
-            "resolved": "https://registry.npmjs.org/@ffmpeg/ffmpeg/-/ffmpeg-0.12.10.tgz",
-            "integrity": "sha512-lVtk8PW8e+NUzGZhPTWj2P1J4/NyuCrbDD3O9IGpSeLYtUZKBqZO8CNj1WYGghep/MXoM8e1qVY1GztTkf8YYQ==",
+            "license": "MIT",
             "dependencies": {
                 "@ffmpeg/types": "^0.12.2"
             },
@@ -2636,24 +2493,21 @@
         },
         "node_modules/@ffmpeg/types": {
             "version": "0.12.2",
-            "resolved": "https://registry.npmjs.org/@ffmpeg/types/-/types-0.12.2.tgz",
-            "integrity": "sha512-NJtxwPoLb60/z1Klv0ueshguWQ/7mNm106qdHkB4HL49LXszjhjCCiL+ldHJGQ9ai2Igx0s4F24ghigy//ERdA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=16.x"
             }
         },
         "node_modules/@floating-ui/core": {
             "version": "1.6.2",
-            "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz",
-            "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==",
+            "license": "MIT",
             "dependencies": {
                 "@floating-ui/utils": "^0.2.0"
             }
         },
         "node_modules/@floating-ui/dom": {
             "version": "1.6.5",
-            "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz",
-            "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==",
+            "license": "MIT",
             "dependencies": {
                 "@floating-ui/core": "^1.0.0",
                 "@floating-ui/utils": "^0.2.0"
@@ -2661,8 +2515,7 @@
         },
         "node_modules/@floating-ui/react": {
             "version": "0.26.16",
-            "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.16.tgz",
-            "integrity": "sha512-HEf43zxZNAI/E781QIVpYSF3K2VH4TTYZpqecjdsFkjsaU1EbaWcM++kw0HXFffj7gDUcBFevX8s0rQGQpxkow==",
+            "license": "MIT",
             "dependencies": {
                 "@floating-ui/react-dom": "^2.1.0",
                 "@floating-ui/utils": "^0.2.0",
@@ -2675,8 +2528,7 @@
         },
         "node_modules/@floating-ui/react-dom": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz",
-            "integrity": "sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==",
+            "license": "MIT",
             "dependencies": {
                 "@floating-ui/dom": "^1.0.0"
             },
@@ -2687,13 +2539,11 @@
         },
         "node_modules/@floating-ui/utils": {
             "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz",
-            "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw=="
+            "license": "MIT"
         },
         "node_modules/@formatjs/ecma402-abstract": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz",
-            "integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==",
+            "license": "MIT",
             "dependencies": {
                 "@formatjs/intl-localematcher": "0.5.4",
                 "tslib": "^2.4.0"
@@ -2701,16 +2551,14 @@
         },
         "node_modules/@formatjs/fast-memoize": {
             "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz",
-            "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==",
+            "license": "MIT",
             "dependencies": {
                 "tslib": "^2.4.0"
             }
         },
         "node_modules/@formatjs/icu-messageformat-parser": {
             "version": "2.7.8",
-            "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz",
-            "integrity": "sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==",
+            "license": "MIT",
             "dependencies": {
                 "@formatjs/ecma402-abstract": "2.0.0",
                 "@formatjs/icu-skeleton-parser": "1.8.2",
@@ -2719,8 +2567,7 @@
         },
         "node_modules/@formatjs/icu-skeleton-parser": {
             "version": "1.8.2",
-            "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz",
-            "integrity": "sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==",
+            "license": "MIT",
             "dependencies": {
                 "@formatjs/ecma402-abstract": "2.0.0",
                 "tslib": "^2.4.0"
@@ -2728,26 +2575,23 @@
         },
         "node_modules/@formatjs/intl-localematcher": {
             "version": "0.5.4",
-            "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz",
-            "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==",
+            "license": "MIT",
             "dependencies": {
                 "tslib": "^2.4.0"
             }
         },
         "node_modules/@fortawesome/fontawesome-common-types": {
             "version": "6.5.2",
-            "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.2.tgz",
-            "integrity": "sha512-gBxPg3aVO6J0kpfHNILc+NMhXnqHumFxOmjYCFfOiLZfwhnnfhtsdA2hfJlDnj+8PjAs6kKQPenOTKj3Rf7zHw==",
             "hasInstallScript": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/@fortawesome/fontawesome-svg-core": {
             "version": "6.5.2",
-            "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.2.tgz",
-            "integrity": "sha512-5CdaCBGl8Rh9ohNdxeeTMxIj8oc3KNBgIeLMvJosBMdslK/UnEB8rzyDRrbKdL1kDweqBPo4GT9wvnakHWucZw==",
             "hasInstallScript": true,
+            "license": "MIT",
             "dependencies": {
                 "@fortawesome/fontawesome-common-types": "6.5.2"
             },
@@ -2757,9 +2601,8 @@
         },
         "node_modules/@fortawesome/free-brands-svg-icons": {
             "version": "6.5.2",
-            "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.5.2.tgz",
-            "integrity": "sha512-zi5FNYdmKLnEc0jc0uuHH17kz/hfYTg4Uei0wMGzcoCL/4d3WM3u1VMc0iGGa31HuhV5i7ZK8ZlTCQrHqRHSGQ==",
             "hasInstallScript": true,
+            "license": "(CC-BY-4.0 AND MIT)",
             "dependencies": {
                 "@fortawesome/fontawesome-common-types": "6.5.2"
             },
@@ -2769,9 +2612,8 @@
         },
         "node_modules/@fortawesome/free-regular-svg-icons": {
             "version": "6.5.2",
-            "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.5.2.tgz",
-            "integrity": "sha512-iabw/f5f8Uy2nTRtJ13XZTS1O5+t+anvlamJ3zJGLEVE2pKsAWhPv2lq01uQlfgCX7VaveT3EVs515cCN9jRbw==",
             "hasInstallScript": true,
+            "license": "(CC-BY-4.0 AND MIT)",
             "dependencies": {
                 "@fortawesome/fontawesome-common-types": "6.5.2"
             },
@@ -2781,9 +2623,8 @@
         },
         "node_modules/@fortawesome/free-solid-svg-icons": {
             "version": "6.5.2",
-            "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.2.tgz",
-            "integrity": "sha512-QWFZYXFE7O1Gr1dTIp+D6UcFUF0qElOnZptpi7PBUMylJh+vFmIedVe1Ir6RM1t2tEQLLSV1k7bR4o92M+uqlw==",
             "hasInstallScript": true,
+            "license": "(CC-BY-4.0 AND MIT)",
             "dependencies": {
                 "@fortawesome/fontawesome-common-types": "6.5.2"
             },
@@ -2793,7 +2634,7 @@
         },
         "node_modules/@fortawesome/react-fontawesome": {
             "version": "0.2.2",
-            "integrity": "sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==",
+            "license": "MIT",
             "dependencies": {
                 "prop-types": "^15.8.1"
             },
@@ -2803,23 +2644,24 @@
             }
         },
         "node_modules/@fullcalendar/core": {
-            "version": "6.1.14",
-            "integrity": "sha512-hIPRBevm0aMc2aHy1hRIJgXmI1QTvQM1neQa9oxtuqUmF1+ApYC3oAdwcQMTuI7lHHw3pKJDyJFkKLPPnL6HXA==",
+            "version": "6.1.15",
+            "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.15.tgz",
+            "integrity": "sha512-BuX7o6ALpLb84cMw1FCB9/cSgF4JbVO894cjJZ6kP74jzbUZNjtwffwRdA+Id8rrLjT30d/7TrkW90k4zbXB5Q==",
             "dependencies": {
                 "preact": "~10.12.1"
             }
         },
         "node_modules/@fullcalendar/daygrid": {
-            "version": "6.1.14",
-            "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.14.tgz",
-            "integrity": "sha512-DSyjiA1dEM8k3bOCrZpZOmAOZu71KGtH02ze+4QKuhxkmn/zQghmmLRdfzpOrcyJg6xGKkoB4pBcO+2lXar8XQ==",
+            "version": "6.1.15",
+            "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.15.tgz",
+            "integrity": "sha512-j8tL0HhfiVsdtOCLfzK2J0RtSkiad3BYYemwQKq512cx6btz6ZZ2RNc/hVnIxluuWFyvx5sXZwoeTJsFSFTEFA==",
             "peerDependencies": {
-                "@fullcalendar/core": "~6.1.14"
+                "@fullcalendar/core": "~6.1.15"
             }
         },
         "node_modules/@fullcalendar/multimonth": {
             "version": "6.1.13",
-            "integrity": "sha512-fn0BaLaMNkLmFzxijGZXYcO/fHQkuCcQV1R44mnu/01V4uSnFM1KPt2+V+6SgNiW1+ZNkUBHkkSLST1XdZjodw==",
+            "license": "MIT",
             "dependencies": {
                 "@fullcalendar/daygrid": "~6.1.13"
             },
@@ -2829,16 +2671,14 @@
         },
         "node_modules/@googlemaps/js-api-loader": {
             "version": "1.16.2",
-            "resolved": "https://registry.npmjs.org/@googlemaps/js-api-loader/-/js-api-loader-1.16.2.tgz",
-            "integrity": "sha512-psGw5u0QM6humao48Hn4lrChOM2/rA43ZCm3tKK9qQsEj1/VzqkCqnvGfEOshDbBQflydfaRovbKwZMF4AyqbA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "fast-deep-equal": "^3.1.3"
             }
         },
         "node_modules/@googlemaps/markerclusterer": {
             "version": "2.5.3",
-            "resolved": "https://registry.npmjs.org/@googlemaps/markerclusterer/-/markerclusterer-2.5.3.tgz",
-            "integrity": "sha512-x7lX0R5yYOoiNectr10wLgCBasNcXFHiADIBdmn7jQllF2B5ENQw5XtZK+hIw4xnV0Df0xhN4LN98XqA5jaiOw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "fast-deep-equal": "^3.1.3",
                 "supercluster": "^8.0.1"
@@ -2846,9 +2686,7 @@
         },
         "node_modules/@humanwhocodes/config-array": {
             "version": "0.11.14",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
-            "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
-            "deprecated": "Use @eslint/config-array instead",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@humanwhocodes/object-schema": "^2.0.2",
                 "debug": "^4.3.1",
@@ -2860,8 +2698,7 @@
         },
         "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -2869,8 +2706,7 @@
         },
         "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -2880,8 +2716,7 @@
         },
         "node_modules/@humanwhocodes/module-importer": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-            "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=12.22"
             },
@@ -2892,14 +2727,11 @@
         },
         "node_modules/@humanwhocodes/object-schema": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
-            "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
-            "deprecated": "Use @eslint/object-schema instead"
+            "license": "BSD-3-Clause"
         },
         "node_modules/@icons/material": {
             "version": "0.2.4",
-            "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz",
-            "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==",
+            "license": "MIT",
             "peerDependencies": {
                 "react": "*"
             }
@@ -2914,8 +2746,7 @@
         },
         "node_modules/@internationalized/message": {
             "version": "3.1.4",
-            "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.4.tgz",
-            "integrity": "sha512-Dygi9hH1s7V9nha07pggCkvmRfDd3q2lWnMGvrJyrOwYMe1yj4D2T9BoH9I6MGR7xz0biQrtLPsqUkqXzIrBOw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@swc/helpers": "^0.5.0",
                 "intl-messageformat": "^10.1.0"
@@ -2923,24 +2754,21 @@
         },
         "node_modules/@internationalized/number": {
             "version": "3.5.3",
-            "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.5.3.tgz",
-            "integrity": "sha512-rd1wA3ebzlp0Mehj5YTuTI50AQEx80gWFyHcQu+u91/5NgdwBecO8BH6ipPfE+lmQ9d63vpB3H9SHoIUiupllw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@swc/helpers": "^0.5.0"
             }
         },
         "node_modules/@internationalized/string": {
             "version": "3.2.3",
-            "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.3.tgz",
-            "integrity": "sha512-9kpfLoA8HegiWTeCbR2livhdVeKobCnVv8tlJ6M2jF+4tcMqDo94ezwlnrUANBWPgd8U7OXIHCk2Ov2qhk4KXw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@swc/helpers": "^0.5.0"
             }
         },
         "node_modules/@isaacs/cliui": {
             "version": "8.0.2",
-            "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
-            "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+            "license": "ISC",
             "dependencies": {
                 "string-width": "^5.1.2",
                 "string-width-cjs": "npm:string-width@^4.2.0",
@@ -2955,8 +2783,7 @@
         },
         "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
             "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-            "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=12"
             },
@@ -2966,8 +2793,7 @@
         },
         "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
             "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-            "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-regex": "^6.0.1"
             },
@@ -2980,13 +2806,11 @@
         },
         "node_modules/@isaacs/string-locale-compare": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz",
-            "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ=="
+            "license": "ISC"
         },
         "node_modules/@jest/schemas": {
             "version": "29.6.3",
-            "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
-            "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+            "license": "MIT",
             "dependencies": {
                 "@sinclair/typebox": "^0.27.8"
             },
@@ -2996,8 +2820,7 @@
         },
         "node_modules/@jest/types": {
             "version": "29.6.3",
-            "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
-            "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+            "license": "MIT",
             "dependencies": {
                 "@jest/schemas": "^29.6.3",
                 "@types/istanbul-lib-coverage": "^2.0.0",
@@ -3012,8 +2835,7 @@
         },
         "node_modules/@jest/types/node_modules/ansi-styles": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+            "license": "MIT",
             "dependencies": {
                 "color-convert": "^2.0.1"
             },
@@ -3026,8 +2848,7 @@
         },
         "node_modules/@jest/types/node_modules/chalk": {
             "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-            "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^4.1.0",
                 "supports-color": "^7.1.0"
@@ -3041,8 +2862,7 @@
         },
         "node_modules/@jest/types/node_modules/color-convert": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+            "license": "MIT",
             "dependencies": {
                 "color-name": "~1.1.4"
             },
@@ -3052,21 +2872,18 @@
         },
         "node_modules/@jest/types/node_modules/color-name": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+            "license": "MIT"
         },
         "node_modules/@jest/types/node_modules/has-flag": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/@jest/types/node_modules/supports-color": {
             "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-            "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+            "license": "MIT",
             "dependencies": {
                 "has-flag": "^4.0.0"
             },
@@ -3076,8 +2893,7 @@
         },
         "node_modules/@jimp/bmp": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.22.12.tgz",
-            "integrity": "sha512-aeI64HD0npropd+AR76MCcvvRaa+Qck6loCOS03CkkxGHN5/r336qTM5HPUdHKMDOGzqknuVPA8+kK1t03z12g==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12",
                 "bmp-js": "^0.1.0"
@@ -3088,8 +2904,7 @@
         },
         "node_modules/@jimp/core": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.22.12.tgz",
-            "integrity": "sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12",
                 "any-base": "^1.1.0",
@@ -3103,16 +2918,14 @@
         },
         "node_modules/@jimp/custom": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.22.12.tgz",
-            "integrity": "sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/core": "^0.22.12"
             }
         },
         "node_modules/@jimp/gif": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.22.12.tgz",
-            "integrity": "sha512-y6BFTJgch9mbor2H234VSjd9iwAhaNf/t3US5qpYIs0TSbAvM02Fbc28IaDETj9+4YB4676sz4RcN/zwhfu1pg==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12",
                 "gifwrap": "^0.10.1",
@@ -3124,8 +2937,7 @@
         },
         "node_modules/@jimp/jpeg": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.22.12.tgz",
-            "integrity": "sha512-Rq26XC/uQWaQKyb/5lksCTCxXhtY01NJeBN+dQv5yNYedN0i7iYu+fXEoRsfaJ8xZzjoANH8sns7rVP4GE7d/Q==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12",
                 "jpeg-js": "^0.4.4"
@@ -3136,8 +2948,7 @@
         },
         "node_modules/@jimp/plugin-blit": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.22.12.tgz",
-            "integrity": "sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3147,8 +2958,7 @@
         },
         "node_modules/@jimp/plugin-blur": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.22.12.tgz",
-            "integrity": "sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3158,8 +2968,7 @@
         },
         "node_modules/@jimp/plugin-circle": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.22.12.tgz",
-            "integrity": "sha512-SWVXx1yiuj5jZtMijqUfvVOJBwOifFn0918ou4ftoHgegc5aHWW5dZbYPjvC9fLpvz7oSlptNl2Sxr1zwofjTg==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3169,8 +2978,7 @@
         },
         "node_modules/@jimp/plugin-color": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.22.12.tgz",
-            "integrity": "sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12",
                 "tinycolor2": "^1.6.0"
@@ -3181,8 +2989,7 @@
         },
         "node_modules/@jimp/plugin-contain": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.22.12.tgz",
-            "integrity": "sha512-Eo3DmfixJw3N79lWk8q/0SDYbqmKt1xSTJ69yy8XLYQj9svoBbyRpSnHR+n9hOw5pKXytHwUW6nU4u1wegHNoQ==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3195,8 +3002,7 @@
         },
         "node_modules/@jimp/plugin-cover": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.22.12.tgz",
-            "integrity": "sha512-z0w/1xH/v/knZkpTNx+E8a7fnasQ2wHG5ze6y5oL2dhH1UufNua8gLQXlv8/W56+4nJ1brhSd233HBJCo01BXA==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3209,8 +3015,7 @@
         },
         "node_modules/@jimp/plugin-crop": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.22.12.tgz",
-            "integrity": "sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3220,8 +3025,7 @@
         },
         "node_modules/@jimp/plugin-displace": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.22.12.tgz",
-            "integrity": "sha512-qpRM8JRicxfK6aPPqKZA6+GzBwUIitiHaZw0QrJ64Ygd3+AsTc7BXr+37k2x7QcyCvmKXY4haUrSIsBug4S3CA==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3231,8 +3035,7 @@
         },
         "node_modules/@jimp/plugin-dither": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.22.12.tgz",
-            "integrity": "sha512-jYgGdSdSKl1UUEanX8A85v4+QUm+PE8vHFwlamaKk89s+PXQe7eVE3eNeSZX4inCq63EHL7cX580dMqkoC3ZLw==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3242,8 +3045,7 @@
         },
         "node_modules/@jimp/plugin-fisheye": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.12.tgz",
-            "integrity": "sha512-LGuUTsFg+fOp6KBKrmLkX4LfyCy8IIsROwoUvsUPKzutSqMJnsm3JGDW2eOmWIS/jJpPaeaishjlxvczjgII+Q==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3253,8 +3055,7 @@
         },
         "node_modules/@jimp/plugin-flip": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.22.12.tgz",
-            "integrity": "sha512-m251Rop7GN8W0Yo/rF9LWk6kNclngyjIJs/VXHToGQ6EGveOSTSQaX2Isi9f9lCDLxt+inBIb7nlaLLxnvHX8Q==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3265,8 +3066,7 @@
         },
         "node_modules/@jimp/plugin-gaussian": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.12.tgz",
-            "integrity": "sha512-sBfbzoOmJ6FczfG2PquiK84NtVGeScw97JsCC3rpQv1PHVWyW+uqWFF53+n3c8Y0P2HWlUjflEla2h/vWShvhg==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3276,8 +3076,7 @@
         },
         "node_modules/@jimp/plugin-invert": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.22.12.tgz",
-            "integrity": "sha512-N+6rwxdB+7OCR6PYijaA/iizXXodpxOGvT/smd/lxeXsZ/empHmFFFJ/FaXcYh19Tm04dGDaXcNF/dN5nm6+xQ==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3287,8 +3086,7 @@
         },
         "node_modules/@jimp/plugin-mask": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.22.12.tgz",
-            "integrity": "sha512-4AWZg+DomtpUA099jRV8IEZUfn1wLv6+nem4NRJC7L/82vxzLCgXKTxvNvBcNmJjT9yS1LAAmiJGdWKXG63/NA==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3298,8 +3096,7 @@
         },
         "node_modules/@jimp/plugin-normalize": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.22.12.tgz",
-            "integrity": "sha512-0So0rexQivnWgnhacX4cfkM2223YdExnJTTy6d06WbkfZk5alHUx8MM3yEzwoCN0ErO7oyqEWRnEkGC+As1FtA==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3309,8 +3106,7 @@
         },
         "node_modules/@jimp/plugin-print": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.22.12.tgz",
-            "integrity": "sha512-c7TnhHlxm87DJeSnwr/XOLjJU/whoiKYY7r21SbuJ5nuH+7a78EW1teOaj5gEr2wYEd7QtkFqGlmyGXY/YclyQ==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12",
                 "load-bmfont": "^1.4.1"
@@ -3322,8 +3118,7 @@
         },
         "node_modules/@jimp/plugin-resize": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.22.12.tgz",
-            "integrity": "sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3333,8 +3128,7 @@
         },
         "node_modules/@jimp/plugin-rotate": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.22.12.tgz",
-            "integrity": "sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3347,8 +3141,7 @@
         },
         "node_modules/@jimp/plugin-scale": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.22.12.tgz",
-            "integrity": "sha512-dghs92qM6MhHj0HrV2qAwKPMklQtjNpoYgAB94ysYpsXslhRTiPisueSIELRwZGEr0J0VUxpUY7HgJwlSIgGZw==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3359,8 +3152,7 @@
         },
         "node_modules/@jimp/plugin-shadow": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.22.12.tgz",
-            "integrity": "sha512-FX8mTJuCt7/3zXVoeD/qHlm4YH2bVqBuWQHXSuBK054e7wFRnRnbSLPUqAwSeYP3lWqpuQzJtgiiBxV3+WWwTg==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3372,8 +3164,7 @@
         },
         "node_modules/@jimp/plugin-threshold": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.22.12.tgz",
-            "integrity": "sha512-4x5GrQr1a/9L0paBC/MZZJjjgjxLYrqSmWd+e+QfAEPvmRxdRoQ5uKEuNgXnm9/weHQBTnQBQsOY2iFja+XGAw==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12"
             },
@@ -3385,8 +3176,7 @@
         },
         "node_modules/@jimp/plugins": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.22.12.tgz",
-            "integrity": "sha512-yBJ8vQrDkBbTgQZLty9k4+KtUQdRjsIDJSPjuI21YdVeqZxYywifHl4/XWILoTZsjTUASQcGoH0TuC0N7xm3ww==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/plugin-blit": "^0.22.12",
                 "@jimp/plugin-blur": "^0.22.12",
@@ -3417,8 +3207,7 @@
         },
         "node_modules/@jimp/png": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.22.12.tgz",
-            "integrity": "sha512-Mrp6dr3UTn+aLK8ty/dSKELz+Otdz1v4aAXzV5q53UDD2rbB5joKVJ/ChY310B+eRzNxIovbUF1KVrUsYdE8Hg==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/utils": "^0.22.12",
                 "pngjs": "^6.0.0"
@@ -3429,8 +3218,7 @@
         },
         "node_modules/@jimp/tiff": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.22.12.tgz",
-            "integrity": "sha512-E1LtMh4RyJsoCAfAkBRVSYyZDTtLq9p9LUiiYP0vPtXyxX4BiYBUYihTLSBlCQg5nF2e4OpQg7SPrLdJ66u7jg==",
+            "license": "MIT",
             "dependencies": {
                 "utif2": "^4.0.1"
             },
@@ -3440,8 +3228,7 @@
         },
         "node_modules/@jimp/types": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.22.12.tgz",
-            "integrity": "sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/bmp": "^0.22.12",
                 "@jimp/gif": "^0.22.12",
@@ -3456,21 +3243,18 @@
         },
         "node_modules/@jimp/utils": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",
-            "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",
+            "license": "MIT",
             "dependencies": {
                 "regenerator-runtime": "^0.13.3"
             }
         },
         "node_modules/@jimp/utils/node_modules/regenerator-runtime": {
             "version": "0.13.11",
-            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
-            "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+            "license": "MIT"
         },
         "node_modules/@jridgewell/gen-mapping": {
             "version": "0.3.5",
-            "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
-            "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+            "license": "MIT",
             "dependencies": {
                 "@jridgewell/set-array": "^1.2.1",
                 "@jridgewell/sourcemap-codec": "^1.4.10",
@@ -3482,24 +3266,21 @@
         },
         "node_modules/@jridgewell/resolve-uri": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
-            "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.0.0"
             }
         },
         "node_modules/@jridgewell/set-array": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
-            "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.0.0"
             }
         },
         "node_modules/@jridgewell/source-map": {
             "version": "0.3.6",
-            "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
-            "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+            "license": "MIT",
             "dependencies": {
                 "@jridgewell/gen-mapping": "^0.3.5",
                 "@jridgewell/trace-mapping": "^0.3.25"
@@ -3507,13 +3288,11 @@
         },
         "node_modules/@jridgewell/sourcemap-codec": {
             "version": "1.4.15",
-            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
-            "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+            "license": "MIT"
         },
         "node_modules/@jridgewell/trace-mapping": {
             "version": "0.3.25",
-            "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
-            "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+            "license": "MIT",
             "dependencies": {
                 "@jridgewell/resolve-uri": "^3.1.0",
                 "@jridgewell/sourcemap-codec": "^1.4.14"
@@ -3521,8 +3300,7 @@
         },
         "node_modules/@jsonjoy.com/base64": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
-            "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=10.0"
             },
@@ -3536,32 +3314,26 @@
         },
         "node_modules/@kurkle/color": {
             "version": "0.3.2",
-            "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz",
-            "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw=="
+            "license": "MIT"
         },
         "node_modules/@leichtgewicht/ip-codec": {
             "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
-            "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@mapbox/jsonlint-lines-primitives": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz",
-            "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/@mapbox/mapbox-gl-supported": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-3.0.0.tgz",
-            "integrity": "sha512-2XghOwu16ZwPJLOFVuIOaLbN0iKMn867evzXFyf0P22dqugezfJwLmdanAgU25ITvz1TvOfVP4jsDImlDJzcWg=="
+            "license": "BSD-3-Clause"
         },
         "node_modules/@mapbox/node-pre-gyp": {
             "version": "1.0.11",
-            "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
-            "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "detect-libc": "^2.0.0",
                 "https-proxy-agent": "^5.0.0",
@@ -3579,8 +3351,7 @@
         },
         "node_modules/@mapbox/node-pre-gyp/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -3588,9 +3359,7 @@
         },
         "node_modules/@mapbox/node-pre-gyp/node_modules/glob": {
             "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "deprecated": "Glob versions prior to v9 are no longer supported",
+            "license": "ISC",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -3608,8 +3377,7 @@
         },
         "node_modules/@mapbox/node-pre-gyp/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -3619,9 +3387,7 @@
         },
         "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-            "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-            "deprecated": "Rimraf versions prior to v4 are no longer supported",
+            "license": "ISC",
             "dependencies": {
                 "glob": "^7.1.3"
             },
@@ -3634,8 +3400,7 @@
         },
         "node_modules/@mapbox/node-pre-gyp/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -3645,39 +3410,33 @@
         },
         "node_modules/@mapbox/point-geometry": {
             "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz",
-            "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ=="
+            "license": "ISC"
         },
         "node_modules/@mapbox/tiny-sdf": {
             "version": "2.0.6",
-            "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz",
-            "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA=="
+            "license": "BSD-2-Clause"
         },
         "node_modules/@mapbox/unitbezier": {
             "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz",
-            "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw=="
+            "license": "BSD-2-Clause"
         },
         "node_modules/@mapbox/vector-tile": {
             "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz",
-            "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "@mapbox/point-geometry": "~0.1.0"
             }
         },
         "node_modules/@mapbox/whoots-js": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz",
-            "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==",
+            "license": "ISC",
             "engines": {
                 "node": ">=6.0.0"
             }
         },
         "node_modules/@maplibre/maplibre-gl-style-spec": {
             "version": "19.3.3",
-            "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.3.tgz",
-            "integrity": "sha512-cOZZOVhDSulgK0meTsTkmNXb1ahVvmTmWmfx9gRBwc6hq98wS9JP35ESIoNq3xqEan+UN+gn8187Z6E4NKhLsw==",
+            "license": "ISC",
             "dependencies": {
                 "@mapbox/jsonlint-lines-primitives": "~2.0.2",
                 "@mapbox/unitbezier": "^0.0.1",
@@ -3694,47 +3453,14 @@
         },
         "node_modules/@mongodb-js/saslprep": {
             "version": "1.1.7",
-            "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz",
-            "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==",
+            "license": "MIT",
             "dependencies": {
                 "sparse-bitfield": "^3.0.3"
             }
         },
-        "node_modules/@mui/base": {
-            "version": "5.0.0-beta.40",
-            "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz",
-            "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==",
-            "dependencies": {
-                "@babel/runtime": "^7.23.9",
-                "@floating-ui/react-dom": "^2.0.8",
-                "@mui/types": "^7.2.14",
-                "@mui/utils": "^5.15.14",
-                "@popperjs/core": "^2.11.8",
-                "clsx": "^2.1.0",
-                "prop-types": "^15.8.1"
-            },
-            "engines": {
-                "node": ">=12.0.0"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/mui-org"
-            },
-            "peerDependencies": {
-                "@types/react": "^17.0.0 || ^18.0.0",
-                "react": "^17.0.0 || ^18.0.0",
-                "react-dom": "^17.0.0 || ^18.0.0"
-            },
-            "peerDependenciesMeta": {
-                "@types/react": {
-                    "optional": true
-                }
-            }
-        },
         "node_modules/@mui/core-downloads-tracker": {
-            "version": "5.15.20",
-            "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.20.tgz",
-            "integrity": "sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==",
+            "version": "5.16.4",
+            "license": "MIT",
             "funding": {
                 "type": "opencollective",
                 "url": "https://opencollective.com/mui-org"
@@ -3742,7 +3468,7 @@
         },
         "node_modules/@mui/icons-material": {
             "version": "5.15.18",
-            "integrity": "sha512-jGhyw02TSLM0NgW+MDQRLLRUD/K4eN9rlK2pTBTL1OtzyZmQ8nB060zK1wA0b7cVrIiG+zyrRmNAvGWXwm2N9Q==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.23.9"
             },
@@ -3765,21 +3491,21 @@
             }
         },
         "node_modules/@mui/material": {
-            "version": "5.15.20",
-            "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.20.tgz",
-            "integrity": "sha512-tVq3l4qoXx/NxUgIx/x3lZiPn/5xDbdTE8VrLczNpfblLYZzlrbxA7kb9mI8NoBF6+w9WE9IrxWnKK5KlPI2bg==",
+            "version": "5.16.4",
+            "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.4.tgz",
+            "integrity": "sha512-dBnh3/zRYgEVIS3OE4oTbujse3gifA0qLMmuUk13ywsDCbngJsdgwW5LuYeiT5pfA8PGPGSqM7mxNytYXgiMCw==",
             "dependencies": {
                 "@babel/runtime": "^7.23.9",
-                "@mui/base": "5.0.0-beta.40",
-                "@mui/core-downloads-tracker": "^5.15.20",
-                "@mui/system": "^5.15.20",
-                "@mui/types": "^7.2.14",
-                "@mui/utils": "^5.15.20",
+                "@mui/core-downloads-tracker": "^5.16.4",
+                "@mui/system": "^5.16.4",
+                "@mui/types": "^7.2.15",
+                "@mui/utils": "^5.16.4",
+                "@popperjs/core": "^2.11.8",
                 "@types/react-transition-group": "^4.4.10",
                 "clsx": "^2.1.0",
                 "csstype": "^3.1.3",
                 "prop-types": "^15.8.1",
-                "react-is": "^18.2.0",
+                "react-is": "^18.3.1",
                 "react-transition-group": "^4.4.5"
             },
             "engines": {
@@ -3809,12 +3535,11 @@
             }
         },
         "node_modules/@mui/private-theming": {
-            "version": "5.15.20",
-            "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.20.tgz",
-            "integrity": "sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==",
+            "version": "5.16.4",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.23.9",
-                "@mui/utils": "^5.15.20",
+                "@mui/utils": "^5.16.4",
                 "prop-types": "^15.8.1"
             },
             "engines": {
@@ -3835,9 +3560,8 @@
             }
         },
         "node_modules/@mui/styled-engine": {
-            "version": "5.15.14",
-            "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz",
-            "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==",
+            "version": "5.16.4",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.23.9",
                 "@emotion/cache": "^11.11.0",
@@ -3867,8 +3591,7 @@
         },
         "node_modules/@mui/styled-engine-sc": {
             "version": "5.14.12",
-            "resolved": "https://registry.npmjs.org/@mui/styled-engine-sc/-/styled-engine-sc-5.14.12.tgz",
-            "integrity": "sha512-FQ5KDd17OkRurE0ljR4Pddekv1uPSoJxcBqXa9tdoOETGULVCefM5Gd9CRGzT+alNPDyHBoUeEYKulIkDN9ytA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.23.1",
                 "csstype": "^3.1.2",
@@ -3892,15 +3615,14 @@
             }
         },
         "node_modules/@mui/system": {
-            "version": "5.15.20",
-            "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.20.tgz",
-            "integrity": "sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==",
+            "version": "5.16.4",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.23.9",
-                "@mui/private-theming": "^5.15.20",
-                "@mui/styled-engine": "^5.15.14",
-                "@mui/types": "^7.2.14",
-                "@mui/utils": "^5.15.20",
+                "@mui/private-theming": "^5.16.4",
+                "@mui/styled-engine": "^5.16.4",
+                "@mui/types": "^7.2.15",
+                "@mui/utils": "^5.16.4",
                 "clsx": "^2.1.0",
                 "csstype": "^3.1.3",
                 "prop-types": "^15.8.1"
@@ -3931,9 +3653,8 @@
             }
         },
         "node_modules/@mui/types": {
-            "version": "7.2.14",
-            "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz",
-            "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==",
+            "version": "7.2.15",
+            "license": "MIT",
             "peerDependencies": {
                 "@types/react": "^17.0.0 || ^18.0.0"
             },
@@ -3944,14 +3665,14 @@
             }
         },
         "node_modules/@mui/utils": {
-            "version": "5.15.20",
-            "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.20.tgz",
-            "integrity": "sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==",
+            "version": "5.16.4",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.23.9",
-                "@types/prop-types": "^15.7.11",
+                "@types/prop-types": "^15.7.12",
+                "clsx": "^2.1.1",
                 "prop-types": "^15.8.1",
-                "react-is": "^18.2.0"
+                "react-is": "^18.3.1"
             },
             "engines": {
                 "node": ">=12.0.0"
@@ -3972,8 +3693,7 @@
         },
         "node_modules/@nodelib/fs.scandir": {
             "version": "2.1.5",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-            "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+            "license": "MIT",
             "dependencies": {
                 "@nodelib/fs.stat": "2.0.5",
                 "run-parallel": "^1.1.9"
@@ -3984,16 +3704,14 @@
         },
         "node_modules/@nodelib/fs.stat": {
             "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-            "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 8"
             }
         },
         "node_modules/@nodelib/fs.walk": {
             "version": "1.2.8",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-            "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+            "license": "MIT",
             "dependencies": {
                 "@nodelib/fs.scandir": "2.1.5",
                 "fastq": "^1.6.0"
@@ -4004,8 +3722,7 @@
         },
         "node_modules/@npmcli/agent": {
             "version": "2.2.2",
-            "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz",
-            "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==",
+            "license": "ISC",
             "dependencies": {
                 "agent-base": "^7.1.0",
                 "http-proxy-agent": "^7.0.0",
@@ -4019,8 +3736,7 @@
         },
         "node_modules/@npmcli/agent/node_modules/agent-base": {
             "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
-            "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "^4.3.4"
             },
@@ -4030,8 +3746,7 @@
         },
         "node_modules/@npmcli/agent/node_modules/https-proxy-agent": {
             "version": "7.0.4",
-            "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
-            "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
+            "license": "MIT",
             "dependencies": {
                 "agent-base": "^7.0.2",
                 "debug": "4"
@@ -4042,16 +3757,14 @@
         },
         "node_modules/@npmcli/agent/node_modules/lru-cache": {
             "version": "10.2.2",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
-            "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+            "license": "ISC",
             "engines": {
                 "node": "14 || >=16.14"
             }
         },
         "node_modules/@npmcli/arborist": {
             "version": "7.5.2",
-            "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.5.2.tgz",
-            "integrity": "sha512-V0zqhdnK9Av3qSIbhYs2O+7HAJPSGhqBkNP6624iSVke2J2JKY306V5Czwul+tc2Xnq6SDEKe8v+frLeKJ4aeA==",
+            "license": "ISC",
             "dependencies": {
                 "@isaacs/string-locale-compare": "^1.1.0",
                 "@npmcli/fs": "^3.1.1",
@@ -4098,32 +3811,28 @@
         },
         "node_modules/@npmcli/arborist/node_modules/abbrev": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
-            "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/@npmcli/arborist/node_modules/json-parse-even-better-errors": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
-            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+            "license": "MIT",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/@npmcli/arborist/node_modules/lru-cache": {
             "version": "10.2.2",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
-            "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+            "license": "ISC",
             "engines": {
                 "node": "14 || >=16.14"
             }
         },
         "node_modules/@npmcli/arborist/node_modules/nopt": {
             "version": "7.2.1",
-            "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
-            "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+            "license": "ISC",
             "dependencies": {
                 "abbrev": "^2.0.0"
             },
@@ -4136,8 +3845,7 @@
         },
         "node_modules/@npmcli/arborist/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -4147,8 +3855,7 @@
         },
         "node_modules/@npmcli/config": {
             "version": "8.3.2",
-            "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.3.2.tgz",
-            "integrity": "sha512-IMzf+fhRXibqh9mBwXK/QFIr97SAlZjfwsWPEz/2pST1cE9k9LcwznO7aDNXJoMrDjxPHZmb2bAAKASsa6EedA==",
+            "license": "ISC",
             "dependencies": {
                 "@npmcli/map-workspaces": "^3.0.2",
                 "ci-info": "^4.0.0",
@@ -4165,38 +3872,34 @@
         },
         "node_modules/@npmcli/config/node_modules/abbrev": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
-            "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/@npmcli/config/node_modules/ci-info": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz",
-            "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==",
             "funding": [
                 {
                     "type": "github",
                     "url": "https://github.com/sponsors/sibiraj-s"
                 }
             ],
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/@npmcli/config/node_modules/ini": {
             "version": "4.1.3",
-            "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
-            "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/@npmcli/config/node_modules/nopt": {
             "version": "7.2.1",
-            "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
-            "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+            "license": "ISC",
             "dependencies": {
                 "abbrev": "^2.0.0"
             },
@@ -4209,8 +3912,7 @@
         },
         "node_modules/@npmcli/config/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -4220,8 +3922,7 @@
         },
         "node_modules/@npmcli/fs": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
-            "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
+            "license": "ISC",
             "dependencies": {
                 "semver": "^7.3.5"
             },
@@ -4231,8 +3932,7 @@
         },
         "node_modules/@npmcli/fs/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -4242,8 +3942,7 @@
         },
         "node_modules/@npmcli/git": {
             "version": "5.0.7",
-            "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.7.tgz",
-            "integrity": "sha512-WaOVvto604d5IpdCRV2KjQu8PzkfE96d50CQGKgywXh2GxXmDeUO5EWcBC4V57uFyrNqx83+MewuJh3WTR3xPA==",
+            "license": "ISC",
             "dependencies": {
                 "@npmcli/promise-spawn": "^7.0.0",
                 "lru-cache": "^10.0.1",
@@ -4260,24 +3959,21 @@
         },
         "node_modules/@npmcli/git/node_modules/isexe": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
-            "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+            "license": "ISC",
             "engines": {
                 "node": ">=16"
             }
         },
         "node_modules/@npmcli/git/node_modules/lru-cache": {
             "version": "10.2.2",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
-            "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+            "license": "ISC",
             "engines": {
                 "node": "14 || >=16.14"
             }
         },
         "node_modules/@npmcli/git/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -4287,8 +3983,7 @@
         },
         "node_modules/@npmcli/git/node_modules/which": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
-            "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+            "license": "ISC",
             "dependencies": {
                 "isexe": "^3.1.1"
             },
@@ -4301,8 +3996,7 @@
         },
         "node_modules/@npmcli/installed-package-contents": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz",
-            "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==",
+            "license": "ISC",
             "dependencies": {
                 "npm-bundled": "^3.0.0",
                 "npm-normalize-package-bin": "^3.0.0"
@@ -4316,8 +4010,7 @@
         },
         "node_modules/@npmcli/map-workspaces": {
             "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz",
-            "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==",
+            "license": "ISC",
             "dependencies": {
                 "@npmcli/name-from-folder": "^2.0.0",
                 "glob": "^10.2.2",
@@ -4330,8 +4023,7 @@
         },
         "node_modules/@npmcli/metavuln-calculator": {
             "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz",
-            "integrity": "sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==",
+            "license": "ISC",
             "dependencies": {
                 "cacache": "^18.0.0",
                 "json-parse-even-better-errors": "^3.0.0",
@@ -4345,16 +4037,14 @@
         },
         "node_modules/@npmcli/metavuln-calculator/node_modules/json-parse-even-better-errors": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
-            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+            "license": "MIT",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/@npmcli/metavuln-calculator/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -4364,24 +4054,21 @@
         },
         "node_modules/@npmcli/name-from-folder": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz",
-            "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/@npmcli/node-gyp": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz",
-            "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/@npmcli/package-json": {
             "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.1.0.tgz",
-            "integrity": "sha512-1aL4TuVrLS9sf8quCLerU3H9J4vtCtgu8VauYozrmEyU57i/EdKleCnsQ7vpnABIH6c9mnTxcH5sFkO3BlV8wQ==",
+            "license": "ISC",
             "dependencies": {
                 "@npmcli/git": "^5.0.0",
                 "glob": "^10.2.2",
@@ -4397,16 +4084,14 @@
         },
         "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
-            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+            "license": "MIT",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/@npmcli/package-json/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -4416,8 +4101,7 @@
         },
         "node_modules/@npmcli/promise-spawn": {
             "version": "7.0.2",
-            "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz",
-            "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==",
+            "license": "ISC",
             "dependencies": {
                 "which": "^4.0.0"
             },
@@ -4427,16 +4111,14 @@
         },
         "node_modules/@npmcli/promise-spawn/node_modules/isexe": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
-            "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+            "license": "ISC",
             "engines": {
                 "node": ">=16"
             }
         },
         "node_modules/@npmcli/promise-spawn/node_modules/which": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
-            "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+            "license": "ISC",
             "dependencies": {
                 "isexe": "^3.1.1"
             },
@@ -4449,8 +4131,7 @@
         },
         "node_modules/@npmcli/query": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.1.0.tgz",
-            "integrity": "sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==",
+            "license": "ISC",
             "dependencies": {
                 "postcss-selector-parser": "^6.0.10"
             },
@@ -4460,16 +4141,14 @@
         },
         "node_modules/@npmcli/redact": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.0.tgz",
-            "integrity": "sha512-SEjCPAVHWYUIQR+Yn03kJmrJjZDtJLYpj300m3HV9OTRZNpC5YpbMsM3eTkECyT4aWj8lDr9WeY6TWefpubtYQ==",
+            "license": "ISC",
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
         "node_modules/@npmcli/run-script": {
             "version": "8.1.0",
-            "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz",
-            "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==",
+            "license": "ISC",
             "dependencies": {
                 "@npmcli/node-gyp": "^3.0.0",
                 "@npmcli/package-json": "^5.0.0",
@@ -4484,16 +4163,14 @@
         },
         "node_modules/@npmcli/run-script/node_modules/isexe": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
-            "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+            "license": "ISC",
             "engines": {
                 "node": ">=16"
             }
         },
         "node_modules/@npmcli/run-script/node_modules/which": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
-            "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+            "license": "ISC",
             "dependencies": {
                 "isexe": "^3.1.1"
             },
@@ -4506,16 +4183,14 @@
         },
         "node_modules/@octokit/auth-token": {
             "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz",
-            "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 18"
             }
         },
         "node_modules/@octokit/core": {
             "version": "6.1.2",
-            "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.2.tgz",
-            "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==",
+            "license": "MIT",
             "dependencies": {
                 "@octokit/auth-token": "^5.0.0",
                 "@octokit/graphql": "^8.0.0",
@@ -4531,8 +4206,7 @@
         },
         "node_modules/@octokit/endpoint": {
             "version": "10.1.1",
-            "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz",
-            "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==",
+            "license": "MIT",
             "dependencies": {
                 "@octokit/types": "^13.0.0",
                 "universal-user-agent": "^7.0.2"
@@ -4543,8 +4217,7 @@
         },
         "node_modules/@octokit/graphql": {
             "version": "8.1.1",
-            "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.1.tgz",
-            "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==",
+            "license": "MIT",
             "dependencies": {
                 "@octokit/request": "^9.0.0",
                 "@octokit/types": "^13.0.0",
@@ -4556,13 +4229,11 @@
         },
         "node_modules/@octokit/openapi-types": {
             "version": "22.2.0",
-            "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
-            "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg=="
+            "license": "MIT"
         },
         "node_modules/@octokit/request": {
             "version": "9.1.1",
-            "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.1.tgz",
-            "integrity": "sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw==",
+            "license": "MIT",
             "dependencies": {
                 "@octokit/endpoint": "^10.0.0",
                 "@octokit/request-error": "^6.0.1",
@@ -4575,8 +4246,7 @@
         },
         "node_modules/@octokit/request-error": {
             "version": "6.1.1",
-            "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.1.tgz",
-            "integrity": "sha512-1mw1gqT3fR/WFvnoVpY/zUM2o/XkMs/2AszUUG9I69xn0JFLv6PGkPhNk5lbfvROs79wiS0bqiJNxfCZcRJJdg==",
+            "license": "MIT",
             "dependencies": {
                 "@octokit/types": "^13.0.0"
             },
@@ -4586,24 +4256,21 @@
         },
         "node_modules/@octokit/types": {
             "version": "13.5.0",
-            "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
-            "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
+            "license": "MIT",
             "dependencies": {
                 "@octokit/openapi-types": "^22.2.0"
             }
         },
         "node_modules/@opentelemetry/api": {
             "version": "1.8.0",
-            "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz",
-            "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=8.0.0"
             }
         },
         "node_modules/@pkgjs/parseargs": {
             "version": "0.11.0",
-            "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
-            "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+            "license": "MIT",
             "optional": true,
             "engines": {
                 "node": ">=14"
@@ -4611,9 +4278,8 @@
         },
         "node_modules/@pkgr/core": {
             "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
-            "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
             },
@@ -4623,8 +4289,7 @@
         },
         "node_modules/@popperjs/core": {
             "version": "2.11.8",
-            "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
-            "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+            "license": "MIT",
             "funding": {
                 "type": "opencollective",
                 "url": "https://opencollective.com/popperjs"
@@ -4632,8 +4297,7 @@
         },
         "node_modules/@react-aria/actiongroup": {
             "version": "3.7.5",
-            "resolved": "https://registry.npmjs.org/@react-aria/actiongroup/-/actiongroup-3.7.5.tgz",
-            "integrity": "sha512-asJk6WN6MhtwqWzVx7zkakhTbrpk1XhJbxF2piGlk2pTCh8zUCnMjvFAmMdQN+voj5lEW4/CZNfrblNDwzCimQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -4651,8 +4315,7 @@
         },
         "node_modules/@react-aria/breadcrumbs": {
             "version": "3.5.13",
-            "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.13.tgz",
-            "integrity": "sha512-G1Gqf/P6kVdfs94ovwP18fTWuIxadIQgHsXS08JEVcFVYMjb9YjqnEBaohUxD1tq2WldMbYw53ahQblT4NTG+g==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/link": "^3.7.1",
@@ -4667,8 +4330,7 @@
         },
         "node_modules/@react-aria/button": {
             "version": "3.9.5",
-            "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.9.5.tgz",
-            "integrity": "sha512-dgcYR6j8WDOMLKuVrtxzx4jIC05cVKDzc+HnPO8lNkBAOfjcuN5tkGRtIjLtqjMvpZHhQT5aDbgFpIaZzxgFIg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/interactions": "^3.21.3",
@@ -4684,8 +4346,7 @@
         },
         "node_modules/@react-aria/calendar": {
             "version": "3.5.8",
-            "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.5.8.tgz",
-            "integrity": "sha512-Whlp4CeAA5/ZkzrAHUv73kgIRYjw088eYGSc+cvSOCxfrc/2XkBm9rNrnSBv0DvhJ8AG0Fjz3vYakTmF3BgZBw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/date": "^3.5.4",
                 "@react-aria/i18n": "^3.11.1",
@@ -4705,8 +4366,7 @@
         },
         "node_modules/@react-aria/checkbox": {
             "version": "3.14.3",
-            "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.14.3.tgz",
-            "integrity": "sha512-EtBJL6iu0gvrw3A4R7UeVLR6diaVk/mh4kFBc7c8hQjpEJweRr4hmJT3hrNg3MBcTWLxFiMEXPGgWEwXDBygtA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/form": "^3.0.5",
                 "@react-aria/interactions": "^3.21.3",
@@ -4726,8 +4386,7 @@
         },
         "node_modules/@react-aria/color": {
             "version": "3.0.0-beta.33",
-            "resolved": "https://registry.npmjs.org/@react-aria/color/-/color-3.0.0-beta.33.tgz",
-            "integrity": "sha512-nhqnIHYm5p6MbuF3cC6lnqzG7MjwBsBd0DtpO+ByFYO+zxpMMbeC5R+1SFxvapR4uqmAzTotbtiUCGsG+SUaIg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/interactions": "^3.21.3",
@@ -4750,8 +4409,7 @@
         },
         "node_modules/@react-aria/combobox": {
             "version": "3.9.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.9.1.tgz",
-            "integrity": "sha512-SpK92dCmT8qn8aEcUAihRQrBb5LZUhwIbDExFII8PvUvEFy/PoQHXIo3j1V29WkutDBDpMvBv/6XRCHGXPqrhQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/listbox": "^3.12.1",
@@ -4776,8 +4434,7 @@
         },
         "node_modules/@react-aria/datepicker": {
             "version": "3.10.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.10.1.tgz",
-            "integrity": "sha512-4HZL593nrNMa1GjBmWEN/OTvNS6d3/16G1YJWlqiUlv11ADulSbqBIjMmkgwrJVFcjrgqtXFy+yyrTA/oq94Zw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/date": "^3.5.4",
                 "@internationalized/number": "^3.5.3",
@@ -4805,8 +4462,7 @@
         },
         "node_modules/@react-aria/dialog": {
             "version": "3.5.14",
-            "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.14.tgz",
-            "integrity": "sha512-oqDCjQ8hxe3GStf48XWBf2CliEnxlR9GgSYPHJPUc69WBj68D9rVcCW3kogJnLAnwIyf3FnzbX4wSjvUa88sAQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/overlays": "^3.22.1",
@@ -4822,8 +4478,7 @@
         },
         "node_modules/@react-aria/dnd": {
             "version": "3.6.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/dnd/-/dnd-3.6.1.tgz",
-            "integrity": "sha512-6WnujUTD+cIYZVF/B+uXdHyJ+WSpbYa8jH282epvY4FUAq1qLmen12/HHcoj/5dswKQe8X6EM3OhkQM89d9vFw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/string": "^3.2.3",
                 "@react-aria/i18n": "^3.11.1",
@@ -4843,8 +4498,7 @@
         },
         "node_modules/@react-aria/focus": {
             "version": "3.17.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.17.1.tgz",
-            "integrity": "sha512-FLTySoSNqX++u0nWZJPPN5etXY0WBxaIe/YuL/GTEeuqUIuC/2bJSaw5hlsM6T2yjy6Y/VAxBcKSdAFUlU6njQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/interactions": "^3.21.3",
                 "@react-aria/utils": "^3.24.1",
@@ -4858,8 +4512,7 @@
         },
         "node_modules/@react-aria/form": {
             "version": "3.0.5",
-            "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.0.5.tgz",
-            "integrity": "sha512-n290jRwrrRXO3fS82MyWR+OKN7yznVesy5Q10IclSTVYHHI3VI53xtAPr/WzNjJR1um8aLhOcDNFKwnNIUUCsQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/interactions": "^3.21.3",
                 "@react-aria/utils": "^3.24.1",
@@ -4873,8 +4526,7 @@
         },
         "node_modules/@react-aria/grid": {
             "version": "3.9.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.9.1.tgz",
-            "integrity": "sha512-fGEZqAEaS8mqzV/II3N4ndoNWegIcbh+L3PmKbXdpKKUP8VgMs/WY5rYl5WAF0f5RoFwXqx3ibDLeR9tKj/bOg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -4898,8 +4550,7 @@
         },
         "node_modules/@react-aria/gridlist": {
             "version": "3.8.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/gridlist/-/gridlist-3.8.1.tgz",
-            "integrity": "sha512-vVPkkA+Ct0NDcpnNm/tnYaBumg0fP9pXxsPLqL1rxvsTyj1PaIpFTZ4corabPTbTDExZwUSTS3LG1n+o1OvBtQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/grid": "^3.9.1",
@@ -4920,8 +4571,7 @@
         },
         "node_modules/@react-aria/i18n": {
             "version": "3.11.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.11.1.tgz",
-            "integrity": "sha512-vuiBHw1kZruNMYeKkTGGnmPyMnM5T+gT8bz97H1FqIq1hQ6OPzmtBZ6W6l6OIMjeHI5oJo4utTwfZl495GALFQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/date": "^3.5.4",
                 "@internationalized/message": "^3.1.4",
@@ -4938,8 +4588,7 @@
         },
         "node_modules/@react-aria/interactions": {
             "version": "3.21.3",
-            "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.21.3.tgz",
-            "integrity": "sha512-BWIuf4qCs5FreDJ9AguawLVS0lV9UU+sK4CCnbCNNmYqOWY+1+gRXCsnOM32K+oMESBxilAjdHW5n1hsMqYMpA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/ssr": "^3.9.4",
                 "@react-aria/utils": "^3.24.1",
@@ -4952,8 +4601,7 @@
         },
         "node_modules/@react-aria/label": {
             "version": "3.7.8",
-            "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.8.tgz",
-            "integrity": "sha512-MzgTm5+suPA3KX7Ug6ZBK2NX9cin/RFLsv1BdafJ6CZpmUSpWnGE/yQfYUB7csN7j31OsZrD3/P56eShYWAQfg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-types/shared": "^3.23.1",
@@ -4965,8 +4613,7 @@
         },
         "node_modules/@react-aria/link": {
             "version": "3.7.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.7.1.tgz",
-            "integrity": "sha512-a4IaV50P3fXc7DQvEIPYkJJv26JknFbRzFT5MJOMgtzuhyJoQdILEUK6XHYjcSSNCA7uLgzpojArVk5Hz3lCpw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/interactions": "^3.21.3",
@@ -4981,8 +4628,7 @@
         },
         "node_modules/@react-aria/listbox": {
             "version": "3.12.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.12.1.tgz",
-            "integrity": "sha512-7JiUp0NGykbv/HgSpmTY1wqhuf/RmjFxs1HZcNaTv8A+DlzgJYc7yQqFjP3ZA/z5RvJFuuIxggIYmgIFjaRYdA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/interactions": "^3.21.3",
                 "@react-aria/label": "^3.7.8",
@@ -5001,16 +4647,14 @@
         },
         "node_modules/@react-aria/live-announcer": {
             "version": "3.3.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.3.4.tgz",
-            "integrity": "sha512-w8lxs35QrRrn6pBNzVfyGOeqWdxeVKf9U6bXIVwhq7rrTqRULL8jqy8RJIMfIs1s8G5FpwWYjyBOjl2g5Cu1iA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@swc/helpers": "^0.5.0"
             }
         },
         "node_modules/@react-aria/menu": {
             "version": "3.14.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.14.1.tgz",
-            "integrity": "sha512-BYliRb38uAzq05UOFcD5XkjA5foQoXRbcH3ZufBsc4kvh79BcP1PMW6KsXKGJ7dC/PJWUwCui6QL1kUg8PqMHA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -5033,8 +4677,7 @@
         },
         "node_modules/@react-aria/meter": {
             "version": "3.4.13",
-            "resolved": "https://registry.npmjs.org/@react-aria/meter/-/meter-3.4.13.tgz",
-            "integrity": "sha512-oG6KvHQM3ri93XkYQkgEaMKSMO9KNDVpcW1MUqFfqyUXHFBRZRrJB4BTXMZ4nyjheFVQjVboU51fRwoLjOzThg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/progress": "^3.4.13",
                 "@react-types/meter": "^3.4.1",
@@ -5047,8 +4690,7 @@
         },
         "node_modules/@react-aria/numberfield": {
             "version": "3.11.3",
-            "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.11.3.tgz",
-            "integrity": "sha512-QQ9ZTzBbRI8d9ksaBWm6YVXbgv+5zzUsdxVxwzJVXLznvivoORB8rpdFJzUEWVCo25lzoBxluCEPYtLOxP1B0w==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/interactions": "^3.21.3",
@@ -5069,8 +4711,7 @@
         },
         "node_modules/@react-aria/overlays": {
             "version": "3.22.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.22.1.tgz",
-            "integrity": "sha512-GHiFMWO4EQ6+j6b5QCnNoOYiyx1Gk8ZiwLzzglCI4q1NY5AG2EAmfU4Z1+Gtrf2S5Y0zHbumC7rs9GnPoGLUYg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -5091,8 +4732,7 @@
         },
         "node_modules/@react-aria/progress": {
             "version": "3.4.13",
-            "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.13.tgz",
-            "integrity": "sha512-YBV9bOO5JzKvG8QCI0IAA00o6FczMgIDiK8Q9p5gKorFMatFUdRayxlbIPoYHMi+PguLil0jHgC7eOyaUcrZ0g==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/label": "^3.7.8",
@@ -5107,8 +4747,7 @@
         },
         "node_modules/@react-aria/radio": {
             "version": "3.10.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.10.4.tgz",
-            "integrity": "sha512-3fmoMcQtCpgjTwJReFjnvIE/C7zOZeCeWUn4JKDqz9s1ILYsC3Rk5zZ4q66tFn6v+IQnecrKT52wH6+hlVLwTA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/form": "^3.0.5",
@@ -5127,8 +4766,7 @@
         },
         "node_modules/@react-aria/searchfield": {
             "version": "3.7.5",
-            "resolved": "https://registry.npmjs.org/@react-aria/searchfield/-/searchfield-3.7.5.tgz",
-            "integrity": "sha512-h1sMUOWjhevaKKUHab/luHbM6yiyeN57L4RxZU0IIc9Ww0h5Rp2GUuKZA3pcdPiExHje0aijcImL3wBHEbKAzw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/textfield": "^3.14.5",
@@ -5145,8 +4783,7 @@
         },
         "node_modules/@react-aria/select": {
             "version": "3.14.5",
-            "resolved": "https://registry.npmjs.org/@react-aria/select/-/select-3.14.5.tgz",
-            "integrity": "sha512-s8jixBuTUNdKWRHe2tIJqp55ORHeUObGMw1s7PQRRVrrHPdNSYseAOI9B2W7qpl3hKhvjJg40UW+45mcb1WKbw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/form": "^3.0.5",
                 "@react-aria/i18n": "^3.11.1",
@@ -5170,8 +4807,7 @@
         },
         "node_modules/@react-aria/selection": {
             "version": "3.18.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.18.1.tgz",
-            "integrity": "sha512-GSqN2jX6lh7v+ldqhVjAXDcrWS3N4IsKXxO6L6Ygsye86Q9q9Mq9twWDWWu5IjHD6LoVZLUBCMO+ENGbOkyqeQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -5188,8 +4824,7 @@
         },
         "node_modules/@react-aria/separator": {
             "version": "3.3.13",
-            "resolved": "https://registry.npmjs.org/@react-aria/separator/-/separator-3.3.13.tgz",
-            "integrity": "sha512-hofA6JCPnAOqSE9vxnq7Dkazr7Kb2A0I5sR16fOG7ddjYRc/YEY5Nv7MWfKUGU0kNFHkgNjsDAILERtLechzeA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-types/shared": "^3.23.1",
@@ -5201,8 +4836,7 @@
         },
         "node_modules/@react-aria/slider": {
             "version": "3.7.8",
-            "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.7.8.tgz",
-            "integrity": "sha512-MYvPcM0K8jxEJJicUK2+WxUkBIM/mquBxOTOSSIL3CszA80nXIGVnLlCUnQV3LOUzpWtabbWaZokSPtGgOgQOw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -5220,8 +4854,7 @@
         },
         "node_modules/@react-aria/spinbutton": {
             "version": "3.6.5",
-            "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.6.5.tgz",
-            "integrity": "sha512-0aACBarF/Xr/7ixzjVBTQ0NBwwwsoGkf5v6AVFVMTC0uYMXHTALvRs+ULHjHMa5e/cX/aPlEvaVT7jfSs+Xy9Q==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/live-announcer": "^3.3.4",
@@ -5237,8 +4870,7 @@
         },
         "node_modules/@react-aria/ssr": {
             "version": "3.9.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.4.tgz",
-            "integrity": "sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@swc/helpers": "^0.5.0"
             },
@@ -5251,8 +4883,7 @@
         },
         "node_modules/@react-aria/switch": {
             "version": "3.6.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.6.4.tgz",
-            "integrity": "sha512-2nVqz4ZuJyof47IpGSt3oZRmp+EdS8wzeDYgf42WHQXrx4uEOk1mdLJ20+NnsYhj/2NHZsvXVrjBeKMjlMs+0w==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/toggle": "^3.10.4",
                 "@react-stately/toggle": "^3.7.4",
@@ -5265,8 +4896,7 @@
         },
         "node_modules/@react-aria/table": {
             "version": "3.14.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.14.1.tgz",
-            "integrity": "sha512-WaPgQe4zQF5OaluO5rm+Y2nEoFR63vsLd4BT4yjK1uaFhKhDY2Zk+1SCVQvBLLKS4WK9dhP05nrNzT0vp/ZPOw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/grid": "^3.9.1",
@@ -5292,8 +4922,7 @@
         },
         "node_modules/@react-aria/tabs": {
             "version": "3.9.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.9.1.tgz",
-            "integrity": "sha512-S5v/0sRcOaSXaJYZuuy1ZVzYc7JD4sDyseG1133GjyuNjJOFHgoWMb+b4uxNIJbZxnLgynn/ZDBZSO+qU+fIxw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -5311,8 +4940,7 @@
         },
         "node_modules/@react-aria/tag": {
             "version": "3.4.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/tag/-/tag-3.4.1.tgz",
-            "integrity": "sha512-gcIGPYZ2OBwMT4IHnlczEezKlxr0KRPL/mSfm2Q91GE027ZGOJnqusH9az6DX1qxrQx8x3vRdqYT2KmuefkrBQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/gridlist": "^3.8.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -5332,8 +4960,7 @@
         },
         "node_modules/@react-aria/textfield": {
             "version": "3.14.5",
-            "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.14.5.tgz",
-            "integrity": "sha512-hj7H+66BjB1iTKKaFXwSZBZg88YT+wZboEXZ0DNdQB2ytzoz/g045wBItUuNi4ZjXI3P+0AOZznVMYadWBAmiA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/form": "^3.0.5",
@@ -5351,8 +4978,7 @@
         },
         "node_modules/@react-aria/toggle": {
             "version": "3.10.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.10.4.tgz",
-            "integrity": "sha512-bRk+CdB8QzrSyGNjENXiTWxfzYKRw753iwQXsEAU7agPCUdB8cZJyrhbaUoD0rwczzTp2zDbZ9rRbUPdsBE2YQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/interactions": "^3.21.3",
@@ -5367,8 +4993,7 @@
         },
         "node_modules/@react-aria/toolbar": {
             "version": "3.0.0-beta.5",
-            "resolved": "https://registry.npmjs.org/@react-aria/toolbar/-/toolbar-3.0.0-beta.5.tgz",
-            "integrity": "sha512-c8spY7aeLI6L+ygdXvEbAzaT41vExsxZ1Ld0t7BB+6iEF3nyBNJHshjkgdR7nv8FLgNk0no4tj0GTq4Jj4UqHQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -5382,8 +5007,7 @@
         },
         "node_modules/@react-aria/tooltip": {
             "version": "3.7.4",
-            "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.7.4.tgz",
-            "integrity": "sha512-+XRx4HlLYqWY3fB8Z60bQi/rbWDIGlFUtXYbtoa1J+EyRWfhpvsYImP8qeeNO/vgjUtDy1j9oKa8p6App9mBMQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/interactions": "^3.21.3",
@@ -5399,8 +5023,7 @@
         },
         "node_modules/@react-aria/tree": {
             "version": "3.0.0-alpha.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/tree/-/tree-3.0.0-alpha.1.tgz",
-            "integrity": "sha512-CucyeJ4VeAvWO5UJHt/l9JO65CVtsOVUctMOVNCQS77Isqp3olX9pvfD3LXt8fD5Ph2g0Q/b7siVpX5ieVB32g==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/gridlist": "^3.8.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -5418,8 +5041,7 @@
         },
         "node_modules/@react-aria/utils": {
             "version": "3.24.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.24.1.tgz",
-            "integrity": "sha512-O3s9qhPMd6n42x9sKeJ3lhu5V1Tlnzhu6Yk8QOvDuXf7UGuUjXf9mzfHJt1dYzID4l9Fwm8toczBzPM9t0jc8Q==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/ssr": "^3.9.4",
                 "@react-stately/utils": "^3.10.1",
@@ -5433,8 +5055,7 @@
         },
         "node_modules/@react-aria/virtualizer": {
             "version": "3.10.1",
-            "resolved": "https://registry.npmjs.org/@react-aria/virtualizer/-/virtualizer-3.10.1.tgz",
-            "integrity": "sha512-y34w+n/B3nwwj18QHIZlkNj5Fn2rt5CbQE4BBWAM8jYZ5ypwF77i2toxhGTuk1Oo1/hgTX7JYIgDIAQbNraBcg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/interactions": "^3.21.3",
@@ -5450,8 +5071,7 @@
         },
         "node_modules/@react-aria/visually-hidden": {
             "version": "3.8.12",
-            "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.12.tgz",
-            "integrity": "sha512-Bawm+2Cmw3Xrlr7ARzl2RLtKh0lNUdJ0eNqzWcyx4c0VHUAWtThmH5l+HRqFUGzzutFZVo89SAy40BAbd0gjVw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/interactions": "^3.21.3",
                 "@react-aria/utils": "^3.24.1",
@@ -5464,8 +5084,7 @@
         },
         "node_modules/@react-google-maps/api": {
             "version": "2.19.3",
-            "resolved": "https://registry.npmjs.org/@react-google-maps/api/-/api-2.19.3.tgz",
-            "integrity": "sha512-jiLqvuOt5lOowkLeq7d077AByTyJp+s6hZVlLhlq7SBacBD37aUNpXBz2OsazfeR6Aw4a+9RRhAEjEFvrR1f5A==",
+            "license": "MIT",
             "dependencies": {
                 "@googlemaps/js-api-loader": "1.16.2",
                 "@googlemaps/markerclusterer": "2.5.3",
@@ -5481,18 +5100,15 @@
         },
         "node_modules/@react-google-maps/infobox": {
             "version": "2.19.2",
-            "resolved": "https://registry.npmjs.org/@react-google-maps/infobox/-/infobox-2.19.2.tgz",
-            "integrity": "sha512-6wvBqeJsQ/eFSvoxg+9VoncQvNoVCdmxzxRpLvmjPD+nNC6mHM0vJH1xSqaKijkMrfLJT0nfkTGpovrF896jwg=="
+            "license": "MIT"
         },
         "node_modules/@react-google-maps/marker-clusterer": {
             "version": "2.19.2",
-            "resolved": "https://registry.npmjs.org/@react-google-maps/marker-clusterer/-/marker-clusterer-2.19.2.tgz",
-            "integrity": "sha512-x9ibmsP0ZVqzyCo1Pitbw+4b6iEXRw/r1TCy3vOUR3eKrzWLnHYZMR325BkZW2r8fnuWE/V3Fp4QZOP9qYORCw=="
+            "license": "MIT"
         },
         "node_modules/@react-spectrum/actionbar": {
             "version": "3.4.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/actionbar/-/actionbar-3.4.5.tgz",
-            "integrity": "sha512-9+b3B5he/zwyk+1pHc5l8/q6mBy+zKkphha2kBScbj/2XRHTwwlcamBJMANMYfVirQT9UP5FHGhHV6OiRgZLrA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -5518,8 +5134,7 @@
         },
         "node_modules/@react-spectrum/actiongroup": {
             "version": "3.10.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/actiongroup/-/actiongroup-3.10.5.tgz",
-            "integrity": "sha512-KHSuZvCD5XyOA4wz2iu85JQem2Y01pniWTfhzGLPfJG+1OdOCt+C0mO/jU0DL4NM6UwzdLy4JfvUij/xBsLrRw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/actiongroup": "^3.7.5",
                 "@react-aria/focus": "^3.17.1",
@@ -5546,8 +5161,7 @@
         },
         "node_modules/@react-spectrum/avatar": {
             "version": "3.0.12",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/avatar/-/avatar-3.0.12.tgz",
-            "integrity": "sha512-H5dZG+mPiSHlST2TBMfMR7mOf+g5C0i9Q2+aMMQ8khphXLFL4fj5GqxgEE7Mi5efS+raofwXJ/dM+AedsSl6WQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-spectrum/utils": "^3.11.7",
@@ -5562,8 +5176,7 @@
         },
         "node_modules/@react-spectrum/badge": {
             "version": "3.1.13",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/badge/-/badge-3.1.13.tgz",
-            "integrity": "sha512-zfsmbw3hxYWxuySQZTMNkxI5vD1XktHNIBqDUYNaDu8A+GVaORI9pcrua4T2YXyQrw1hYXbqVAmeISJYURajjA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-spectrum/text": "^3.5.5",
@@ -5579,8 +5192,7 @@
         },
         "node_modules/@react-spectrum/breadcrumbs": {
             "version": "3.9.7",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/breadcrumbs/-/breadcrumbs-3.9.7.tgz",
-            "integrity": "sha512-1wA9cgSugaplYmT4z/WiUAZsOcXPWN+8sx43Wc5foS3qUSOLpW4+43sjDTVmzVlbXYuZ4byxf1nrXZNEqCWZXA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/breadcrumbs": "^3.5.13",
                 "@react-aria/focus": "^3.17.1",
@@ -5604,8 +5216,7 @@
         },
         "node_modules/@react-spectrum/button": {
             "version": "3.16.4",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/button/-/button-3.16.4.tgz",
-            "integrity": "sha512-ksPZkmhkz8fJuu+cC9GM5e1pJ0d2sWmkU9sqKn5SNfWh9ngemgvShtkqkuQoz6ThH+MI3n/n4JhFd+UhJ/lILA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/button": "^3.9.5",
                 "@react-aria/focus": "^3.17.1",
@@ -5628,8 +5239,7 @@
         },
         "node_modules/@react-spectrum/buttongroup": {
             "version": "3.6.13",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/buttongroup/-/buttongroup-3.6.13.tgz",
-            "integrity": "sha512-QUNTtDMiY/ydrpUYq8fO0kkssdnTEJsIxlfhbQa3ZEpEObjgt9XbAehNKPelWATwLNQ/gY8o21m9GT1m7J/8zg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-spectrum/utils": "^3.11.7",
@@ -5644,8 +5254,7 @@
         },
         "node_modules/@react-spectrum/calendar": {
             "version": "3.4.9",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/calendar/-/calendar-3.4.9.tgz",
-            "integrity": "sha512-5546bmMQ/v3dscTDFx0llEQ3jA23vkcjbiY7hIad5a9bpXHPQSuIeREelFPtsVUzsD3f3v2BL2nDAt6SPLVqCA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/date": "^3.5.4",
                 "@react-aria/calendar": "^3.5.8",
@@ -5672,8 +5281,7 @@
         },
         "node_modules/@react-spectrum/checkbox": {
             "version": "3.9.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/checkbox/-/checkbox-3.9.6.tgz",
-            "integrity": "sha512-aU4bDFwaiC2hpqOFv9vbUw20V6VlMO7pn1P8Q/qUfNxWVzPY03rJC0Gqcq8NQy2zofmm4tDBJKKOF1F4amGTyw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/checkbox": "^3.14.3",
                 "@react-aria/focus": "^3.17.1",
@@ -5696,8 +5304,7 @@
         },
         "node_modules/@react-spectrum/combobox": {
             "version": "3.12.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/combobox/-/combobox-3.12.5.tgz",
-            "integrity": "sha512-S6TA8FrPm0ibLkeulki2S0DsUqy/hEcTVTvvic7qIRyURN/J+DQMQDWmy+Zzz9mxJr8qdJAoWSArBVWtxKhMKg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/button": "^3.9.5",
                 "@react-aria/combobox": "^3.9.1",
@@ -5733,8 +5340,7 @@
         },
         "node_modules/@react-spectrum/contextualhelp": {
             "version": "3.6.11",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/contextualhelp/-/contextualhelp-3.6.11.tgz",
-            "integrity": "sha512-mQimyXdwXyZWFWO/7BdHZ46YzCQThjnHGGMmlv2y+YfqaOqoP3UTQb4D6noSbV1M6zKJgMq5timhVo81Sujk9Q==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/utils": "^3.24.1",
@@ -5754,8 +5360,7 @@
         },
         "node_modules/@react-spectrum/datepicker": {
             "version": "3.9.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/datepicker/-/datepicker-3.9.6.tgz",
-            "integrity": "sha512-MeLle/V2t3dBe7wq/qkc39hJyV6NTZncCZnBfPHnTcLXeZl8sfTf4rt11JS3Y4JOOtM3jiuw1oMpZ7wv+h6hOA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/date": "^3.5.4",
                 "@react-aria/datepicker": "^3.10.1",
@@ -5786,8 +5391,7 @@
         },
         "node_modules/@react-spectrum/dialog": {
             "version": "3.8.11",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/dialog/-/dialog-3.8.11.tgz",
-            "integrity": "sha512-/ng49paipA3MHC5nVbfDlZL6QXFJWCrSDgQ4fXon5q6gB+94d2DvkZ+CvnLZ5oo0Bpkws/vT3jxcG0hsBz1f6g==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/dialog": "^3.5.14",
                 "@react-aria/i18n": "^3.11.1",
@@ -5817,8 +5421,7 @@
         },
         "node_modules/@react-spectrum/divider": {
             "version": "3.5.13",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/divider/-/divider-3.5.13.tgz",
-            "integrity": "sha512-7LoOTj+qs3yTBZiWudgU5TpzLREApMt0rwzalyq9ORRQrE8C0YXUxlSLPizyUmQeP4Rj8p3lCdUNWAe1cAn1tQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/separator": "^3.3.13",
                 "@react-spectrum/utils": "^3.11.7",
@@ -5832,8 +5435,7 @@
         },
         "node_modules/@react-spectrum/dnd": {
             "version": "3.3.10",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/dnd/-/dnd-3.3.10.tgz",
-            "integrity": "sha512-Qp+Fp6BnMgrp5G18IAcbEUetf2YWelRugYJr8TH8h236n8lariyUpri1Mj604DV/UqNoK6f6k6ocY8JBmvOd9Q==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/dnd": "^3.6.1",
                 "@react-stately/dnd": "^3.3.1",
@@ -5848,8 +5450,7 @@
         },
         "node_modules/@react-spectrum/dropzone": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/dropzone/-/dropzone-3.0.1.tgz",
-            "integrity": "sha512-8hEu6mF1ExJMc+Pv5lk3YHz3yZcRy4FkjKgBMXWWn8kxT2DEIK5hONspECBmlsNtUHuk1QQFFSISMGgsMZFQVw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/utils": "^3.24.1",
@@ -5865,8 +5466,7 @@
         },
         "node_modules/@react-spectrum/filetrigger": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/filetrigger/-/filetrigger-3.0.1.tgz",
-            "integrity": "sha512-9PfhjeGdHjyumlzdvrFNumKnGeaK41kYragnDMSD3KNH0XWu2kVUTB7eUbA9d6FLL/+g8tyPx+wDo0ZJW79Fpg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@swc/helpers": "^0.5.0",
                 "react-aria-components": "^1.2.1"
@@ -5878,8 +5478,7 @@
         },
         "node_modules/@react-spectrum/form": {
             "version": "3.7.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/form/-/form-3.7.6.tgz",
-            "integrity": "sha512-uh/r3d3haWGjdxh++HCCbezWRiw7PGDStvOHEVLCVz/cN0lrUb77dwx5E4jMvY+oLkaBv05R3UtdMxNdXV1DZQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-spectrum/utils": "^3.11.7",
@@ -5895,8 +5494,7 @@
         },
         "node_modules/@react-spectrum/icon": {
             "version": "3.7.13",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/icon/-/icon-3.7.13.tgz",
-            "integrity": "sha512-hbd1OZ2UOOZ807zkU/ay8TWQOSnB56cj9HHm3FzUBjpTwpt849Pvk4TBO5K2SAmuQi4gslmvFGmd8BoOEoEcjg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-spectrum/utils": "^3.11.7",
@@ -5910,8 +5508,7 @@
         },
         "node_modules/@react-spectrum/illustratedmessage": {
             "version": "3.5.1",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/illustratedmessage/-/illustratedmessage-3.5.1.tgz",
-            "integrity": "sha512-HpTueLW3duV1TE3sYw5WeBaGECqS0RVEXr2UaXDXSLteY238Oc7prli2qPk2xaGeRKgh97jsfySDBOvedCuZJQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-spectrum/layout": "^3.6.5",
@@ -5927,8 +5524,7 @@
         },
         "node_modules/@react-spectrum/image": {
             "version": "3.5.1",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/image/-/image-3.5.1.tgz",
-            "integrity": "sha512-MFl2WkMT224L4v1M9n4ZGkkXhBqecQ6uWZfxHBURrTXFMgPq5sxWY7qw42pc3mAX339kNiLZXTCTA5mKyiqxnQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-spectrum/utils": "^3.11.7",
@@ -5943,8 +5539,7 @@
         },
         "node_modules/@react-spectrum/inlinealert": {
             "version": "3.2.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/inlinealert/-/inlinealert-3.2.5.tgz",
-            "integrity": "sha512-D9EF8pIQME6GHpvk7HR8/Qr3g79l78EsvczL0wGOzdcMt+LoV9F6RNJSobrI+dgzX0RcbqRyWsdCixboFrfefg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -5962,8 +5557,7 @@
         },
         "node_modules/@react-spectrum/label": {
             "version": "3.16.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/label/-/label-3.16.6.tgz",
-            "integrity": "sha512-RF1YqQOKpDYqnSxM+TK/4gZGBsoKjfaZYsOvjya90LvUO8/2Va8Ux0bwHlqtOxu46yjxPLflpt0u9rl9ce+Ubg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/utils": "^3.24.1",
@@ -5982,8 +5576,7 @@
         },
         "node_modules/@react-spectrum/labeledvalue": {
             "version": "3.1.14",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/labeledvalue/-/labeledvalue-3.1.14.tgz",
-            "integrity": "sha512-JeZHCRRmSPShgOozHs31+e0NnN4S3+SP0NpPGFUo0itPHvOcJSV9aoRCefdMTdXbUupIi5h1EM5Ty0owdy8y0w==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/date": "^3.5.4",
                 "@react-aria/i18n": "^3.11.1",
@@ -6000,8 +5593,7 @@
         },
         "node_modules/@react-spectrum/layout": {
             "version": "3.6.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/layout/-/layout-3.6.5.tgz",
-            "integrity": "sha512-kl/vZue7ZQZtkypPeOPZ3WENk4Mn9aYsjSBFZP+3GVRGPi0GBlhVOSicraio7UD3oGz1Xkhy5WZg01s3zQC0zg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-spectrum/utils": "^3.11.7",
@@ -6016,8 +5608,7 @@
         },
         "node_modules/@react-spectrum/link": {
             "version": "3.6.7",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/link/-/link-3.6.7.tgz",
-            "integrity": "sha512-g9yWHXO8OdoOnUH0xAIek5wDHDi0gYmEL3hqqKwzfMvkmQQCQjVS+D/9IlkxKT5LaumUiHdHDiA2PL1voPUh0g==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/interactions": "^3.21.3",
@@ -6034,8 +5625,7 @@
         },
         "node_modules/@react-spectrum/list": {
             "version": "3.7.10",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/list/-/list-3.7.10.tgz",
-            "integrity": "sha512-UxS+pXgJGaTeLP+KQdq7IQsaJN1tq6tpqFXFKXdrXGnLZPd9GtBT3zYP2Rnb9r/6Vm67D+pewF6tVKLzctE1sw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/button": "^3.9.5",
                 "@react-aria/focus": "^3.17.1",
@@ -6068,8 +5658,7 @@
         },
         "node_modules/@react-spectrum/listbox": {
             "version": "3.12.9",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/listbox/-/listbox-3.12.9.tgz",
-            "integrity": "sha512-9adZJtEtAVwNtJEU70edZOlx+LfBOeVpWCOXoAJ+5iU+rNrQER7bEpFj15GlJOL+vcwFuCPoIsDBKSxygJANLw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -6098,8 +5687,7 @@
         },
         "node_modules/@react-spectrum/menu": {
             "version": "3.19.1",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/menu/-/menu-3.19.1.tgz",
-            "integrity": "sha512-/bpqSPef1UvoaIwd5GVrqMt8LiByi5rV9yh0K+SSzZ5uY/w4zRQN9y14XnLf4P53R67DpSqAqk3JoWOLFj0Zcg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -6132,8 +5720,7 @@
         },
         "node_modules/@react-spectrum/meter": {
             "version": "3.5.1",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/meter/-/meter-3.5.1.tgz",
-            "integrity": "sha512-xmQwPDmT8hfkEuyUrijpe2xXyzWlFErrnKpQIf49Lql/GudeGHIvtekx3Qj2kvhwLpHKeOOECk35PufCJmwF2A==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/meter": "^3.4.13",
                 "@react-spectrum/progress": "^3.7.7",
@@ -6149,8 +5736,7 @@
         },
         "node_modules/@react-spectrum/numberfield": {
             "version": "3.9.3",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/numberfield/-/numberfield-3.9.3.tgz",
-            "integrity": "sha512-t3LllH5NkaqlwkvfFVizmzp4+MhMCqooLlUsBIbDgqyNCWEbxiC16ZqPOPkZkBDFio1aKX0zzSb9SiuUFw2ZwA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/button": "^3.9.5",
                 "@react-aria/focus": "^3.17.1",
@@ -6178,8 +5764,7 @@
         },
         "node_modules/@react-spectrum/overlays": {
             "version": "5.6.1",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/overlays/-/overlays-5.6.1.tgz",
-            "integrity": "sha512-ABacMG1V6gHCHHHtD01xt9RjTCu51Kytr/oHdUPEFd5Zvh8m/O7j3IQI4nSj5a5kDoj73NAkENq9Cq12gjwL4g==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/interactions": "^3.21.3",
                 "@react-aria/overlays": "^3.22.1",
@@ -6199,8 +5784,7 @@
         },
         "node_modules/@react-spectrum/picker": {
             "version": "3.14.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/picker/-/picker-3.14.5.tgz",
-            "integrity": "sha512-FBCMibgStP62XKS2yJWHtn+XOLsxuzs0pl0jHkozuBaqC42H6fkDcINgQ08wbS2PlEEJSOYIkeL3LXFcxuewEA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/interactions": "^3.21.3",
@@ -6229,8 +5813,7 @@
         },
         "node_modules/@react-spectrum/progress": {
             "version": "3.7.7",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/progress/-/progress-3.7.7.tgz",
-            "integrity": "sha512-FI/oc9hEQqbv00VJbaxqFTncBDDbxWN9cbvNNrPoROBQWL3NgB3tvEqY/fm5IXtDeFEV/U+tSm8BnZTGn6Mdxg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/progress": "^3.4.13",
                 "@react-aria/utils": "^3.24.1",
@@ -6246,8 +5829,7 @@
         },
         "node_modules/@react-spectrum/provider": {
             "version": "3.9.7",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/provider/-/provider-3.9.7.tgz",
-            "integrity": "sha512-VRu8cOWrLJU/Krulo8njfPCMeJT+uu1k9GjFZ9Cw88mHGW7a3MK54IzI5p2evLPab7pgplPIoJcv3bC2XB+DAA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/overlays": "^3.22.1",
@@ -6265,8 +5847,7 @@
         },
         "node_modules/@react-spectrum/radio": {
             "version": "3.7.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/radio/-/radio-3.7.6.tgz",
-            "integrity": "sha512-KRtipJfIkRWbnvhS/zZ7j3ltEQXrQeVNhmIWChuP+sC5hdA3N8llMgf30Xa9PqtFhGH4CvUlXC9NA/rhLWnm4w==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/interactions": "^3.21.3",
@@ -6286,8 +5867,7 @@
         },
         "node_modules/@react-spectrum/searchfield": {
             "version": "3.8.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/searchfield/-/searchfield-3.8.6.tgz",
-            "integrity": "sha512-RU928ZeQsqPGMsNVtoLvahHmuRC3OAW9im5W0/CVgglINn2IapF2U0oxHVw6ymzx1NyCYrYR8pO9skMF0E68/Q==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/searchfield": "^3.7.5",
                 "@react-spectrum/button": "^3.16.4",
@@ -6307,8 +5887,7 @@
         },
         "node_modules/@react-spectrum/slider": {
             "version": "3.6.9",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/slider/-/slider-3.6.9.tgz",
-            "integrity": "sha512-2X6qxlyObfowb8uZQ8UXEozozcfGLzhQI9BS9DS9Kste/REXMTcRDzFygP1D1HdkvRaWmYRNoYhi/Jl2Kkw7Eg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -6329,8 +5908,7 @@
         },
         "node_modules/@react-spectrum/statuslight": {
             "version": "3.5.13",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/statuslight/-/statuslight-3.5.13.tgz",
-            "integrity": "sha512-FvvsDVs9lapRf5zmOq3g8ZRpAxOTVRfhG9WyehIqgaRPtqqNpQhAGSXWz0ErXF3zV8AwVvjD70g0atcDCoDeBQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-spectrum/utils": "^3.11.7",
@@ -6345,8 +5923,7 @@
         },
         "node_modules/@react-spectrum/switch": {
             "version": "3.5.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/switch/-/switch-3.5.5.tgz",
-            "integrity": "sha512-IIVctsGXnChqMlvf2/pMRkI84vyjf0gMsBXEgky8h8s4i91wxQvl6800/4I9rCSQdAAnQYb+Nd3St8Ik7BupQg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/interactions": "^3.21.3",
@@ -6364,8 +5941,7 @@
         },
         "node_modules/@react-spectrum/table": {
             "version": "3.12.10",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/table/-/table-3.12.10.tgz",
-            "integrity": "sha512-a9Qa/1uuoChRez6GncmYdkDgSS4MDXzV4Cl/BrO44Dnph1ygXiJGmBgAvmtevcbndfuERGHoIYqzklIr6veArg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/button": "^3.9.5",
                 "@react-aria/focus": "^3.17.1",
@@ -6401,8 +5977,7 @@
         },
         "node_modules/@react-spectrum/tabs": {
             "version": "3.8.10",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/tabs/-/tabs-3.8.10.tgz",
-            "integrity": "sha512-LoNkxalAbOjKgbF/x3NU5zhvhUgAEqJvEwzKLVSr+KDQlMAFe9LZ+HOH2NRiWR8ak9BkW3RR6C8cGo7G7fdrfA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -6428,8 +6003,7 @@
         },
         "node_modules/@react-spectrum/tag": {
             "version": "3.2.6",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/tag/-/tag-3.2.6.tgz",
-            "integrity": "sha512-OSGIL2fYLMmiPRCEGvdrQVazS6/S0nhzf/FO52pAAjDZHkd4RDlHHY00Yv/2GPJKroa4e5jdyd5NHCxlW5Vbaw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/i18n": "^3.11.1",
@@ -6455,8 +6029,7 @@
         },
         "node_modules/@react-spectrum/text": {
             "version": "3.5.5",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/text/-/text-3.5.5.tgz",
-            "integrity": "sha512-MSRMUNWjuqjAH0eRjSw0fOCvM7haqgfy3HgwHpB5czpeUtR1p22e+UWA9gHior7S57zrQN1WotpeWZ1AmnzvWg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-spectrum/utils": "^3.11.7",
@@ -6472,8 +6045,7 @@
         },
         "node_modules/@react-spectrum/textfield": {
             "version": "3.12.1",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/textfield/-/textfield-3.12.1.tgz",
-            "integrity": "sha512-ehvStKrduGo71SfEieodw6NHBDvyE5wYYZh1uLwbde9hjfyOf2q56lfMdSQiBSJ5pDnpS0ToLpoomoPz315u+Q==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/interactions": "^3.21.3",
@@ -6495,8 +6067,7 @@
         },
         "node_modules/@react-spectrum/theme-dark": {
             "version": "3.5.10",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/theme-dark/-/theme-dark-3.5.10.tgz",
-            "integrity": "sha512-xDzuWY9Vtd0X7Ww5fBvhbTq7oM0PiNtKlT+cPVnKm4YmJB5RvVG/m6jYF4/9GN36NAyiRnNRdBCs7SUuKEfTkA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/provider": "^3.8.1",
                 "@swc/helpers": "^0.5.0"
@@ -6507,8 +6078,7 @@
         },
         "node_modules/@react-spectrum/theme-default": {
             "version": "3.5.10",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/theme-default/-/theme-default-3.5.10.tgz",
-            "integrity": "sha512-qCGce11d5p0Ce4nSz25vRYoMZycb8oxbgMUM9YXXHgUBDbRRB/s0JNUXxlyikENtaNWiCyeWzVm80bJKmmIijw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/provider": "^3.8.1",
                 "@swc/helpers": "^0.5.0"
@@ -6519,8 +6089,7 @@
         },
         "node_modules/@react-spectrum/theme-light": {
             "version": "3.4.10",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/theme-light/-/theme-light-3.4.10.tgz",
-            "integrity": "sha512-MKHxBlfawja16hBlcBTFD72B+luPwhCG/pTY35WMy+gCVWUeYEwJU8ijOhG7A7a7KkrLpHgebpHojxEXYkmFIA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/provider": "^3.8.1",
                 "@swc/helpers": "^0.5.0"
@@ -6531,8 +6100,7 @@
         },
         "node_modules/@react-spectrum/tooltip": {
             "version": "3.6.7",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/tooltip/-/tooltip-3.6.7.tgz",
-            "integrity": "sha512-kJDFY7G5MGuKc5e4K24ftYbzFLt9ugO5zbGMAg6Zbz79+ER8jTsbGNVupK3E7m9uSimF/aPRRwf2p8UdoksH6Q==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/focus": "^3.17.1",
                 "@react-aria/overlays": "^3.22.1",
@@ -6555,8 +6123,7 @@
         },
         "node_modules/@react-spectrum/utils": {
             "version": "3.11.7",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/utils/-/utils-3.11.7.tgz",
-            "integrity": "sha512-o/9zTvUor0EaRwKZWVlgOcyvH+/JIBsNxuvhDgCP5lD868KoZePmx1L64TejUqK/swwH8jr35gyULpYU2kQXRw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/i18n": "^3.11.1",
                 "@react-aria/ssr": "^3.9.4",
@@ -6571,8 +6138,7 @@
         },
         "node_modules/@react-spectrum/view": {
             "version": "3.6.10",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/view/-/view-3.6.10.tgz",
-            "integrity": "sha512-AbvwyORDzntt9XiP9Soc5mCuYsYOJKj+4mwX0ugZZi9I18g1JVeSPnGG/myYdHr2xXNC00pgVILOLA/B0JWMXw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-spectrum/utils": "^3.11.7",
@@ -6587,8 +6153,7 @@
         },
         "node_modules/@react-spectrum/well": {
             "version": "3.4.13",
-            "resolved": "https://registry.npmjs.org/@react-spectrum/well/-/well-3.4.13.tgz",
-            "integrity": "sha512-zKJsaWnndRvCK4crkZ/Jt5uUk5Jwkx+pRaVu40BEK41aOfavQ44GR90uLogrvDuw2LDZ9mdTj/H7bCVNjkLkgA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-spectrum/utils": "^3.11.7",
@@ -6602,8 +6167,7 @@
         },
         "node_modules/@react-spring/animated": {
             "version": "9.7.3",
-            "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.3.tgz",
-            "integrity": "sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw==",
+            "license": "MIT",
             "dependencies": {
                 "@react-spring/shared": "~9.7.3",
                 "@react-spring/types": "~9.7.3"
@@ -6614,8 +6178,7 @@
         },
         "node_modules/@react-spring/core": {
             "version": "9.7.3",
-            "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.3.tgz",
-            "integrity": "sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ==",
+            "license": "MIT",
             "dependencies": {
                 "@react-spring/animated": "~9.7.3",
                 "@react-spring/shared": "~9.7.3",
@@ -6631,8 +6194,7 @@
         },
         "node_modules/@react-spring/shared": {
             "version": "9.7.3",
-            "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.3.tgz",
-            "integrity": "sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA==",
+            "license": "MIT",
             "dependencies": {
                 "@react-spring/types": "~9.7.3"
             },
@@ -6642,12 +6204,11 @@
         },
         "node_modules/@react-spring/types": {
             "version": "9.7.3",
-            "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.3.tgz",
-            "integrity": "sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw=="
+            "license": "MIT"
         },
         "node_modules/@react-spring/web": {
             "version": "9.7.3",
-            "integrity": "sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==",
+            "license": "MIT",
             "dependencies": {
                 "@react-spring/animated": "~9.7.3",
                 "@react-spring/core": "~9.7.3",
@@ -6661,8 +6222,7 @@
         },
         "node_modules/@react-stately/calendar": {
             "version": "3.5.1",
-            "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.5.1.tgz",
-            "integrity": "sha512-7l7QhqGUJ5AzWHfvZzbTe3J4t72Ht5BmhW4hlVI7flQXtfrmYkVtl3ZdytEZkkHmWGYZRW9b4IQTQGZxhtlElA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/date": "^3.5.4",
                 "@react-stately/utils": "^3.10.1",
@@ -6676,8 +6236,7 @@
         },
         "node_modules/@react-stately/checkbox": {
             "version": "3.6.5",
-            "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.5.tgz",
-            "integrity": "sha512-IXV3f9k+LtmfQLE+DKIN41Q5QB/YBLDCB1YVx5PEdRp52S9+EACD5683rjVm8NVRDwjMi2SP6RnFRk7fVb5Azg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/form": "^3.0.3",
                 "@react-stately/utils": "^3.10.1",
@@ -6691,8 +6250,7 @@
         },
         "node_modules/@react-stately/collections": {
             "version": "3.10.7",
-            "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.10.7.tgz",
-            "integrity": "sha512-KRo5O2MWVL8n3aiqb+XR3vP6akmHLhLWYZEmPKjIv0ghQaEebBTrN3wiEjtd6dzllv0QqcWvDLM1LntNfJ2TsA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
@@ -6703,8 +6261,7 @@
         },
         "node_modules/@react-stately/color": {
             "version": "3.6.1",
-            "resolved": "https://registry.npmjs.org/@react-stately/color/-/color-3.6.1.tgz",
-            "integrity": "sha512-iW0nAhl3+fUBegHMw5EcAbFVDpgwHBrivfC85pVoTM3pyzp66hqNN6R6xWxW6ETyljS8UOer59+/w4GDVGdPig==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/number": "^3.5.3",
                 "@internationalized/string": "^3.2.3",
@@ -6723,8 +6280,7 @@
         },
         "node_modules/@react-stately/combobox": {
             "version": "3.8.4",
-            "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.8.4.tgz",
-            "integrity": "sha512-iLVGvKRRz0TeJXZhZyK783hveHpYA6xovOSdzSD+WGYpiPXo1QrcrNoH3AE0Z2sHtorU+8nc0j58vh5PB+m2AA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/collections": "^3.10.7",
                 "@react-stately/form": "^3.0.3",
@@ -6742,8 +6298,7 @@
         },
         "node_modules/@react-stately/data": {
             "version": "3.11.4",
-            "resolved": "https://registry.npmjs.org/@react-stately/data/-/data-3.11.4.tgz",
-            "integrity": "sha512-PbnUQxeE6AznSuEWYnRmrYQ9t5z1Asx98Jtrl96EeA6Iapt9kOjTN9ySqCxtPxMKleb1NIqG3+uHU3veIqmLsg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
@@ -6754,8 +6309,7 @@
         },
         "node_modules/@react-stately/datepicker": {
             "version": "3.9.4",
-            "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.9.4.tgz",
-            "integrity": "sha512-yBdX01jn6gq4NIVvHIqdjBUPo+WN8Bujc4OnPw+ZnfA4jI0eIgq04pfZ84cp1LVXW0IB0VaCu1AlQ/kvtZjfGA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/date": "^3.5.4",
                 "@internationalized/string": "^3.2.3",
@@ -6772,8 +6326,7 @@
         },
         "node_modules/@react-stately/dnd": {
             "version": "3.3.1",
-            "resolved": "https://registry.npmjs.org/@react-stately/dnd/-/dnd-3.3.1.tgz",
-            "integrity": "sha512-I/Ci5xB8hSgAXzoWYWScfMM9UK1MX/eTlARBhiSlfudewweOtNJAI+cXJgU7uiUnGjh4B4v3qDBtlAH1dWDCsw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/selection": "^3.15.1",
                 "@react-types/shared": "^3.23.1",
@@ -6785,16 +6338,14 @@
         },
         "node_modules/@react-stately/flags": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.0.3.tgz",
-            "integrity": "sha512-/ha7XFA0RZTQsbzSPwu3KkbNMgbvuM0GuMTYLTBWpgBrovBNTM+QqI/PfZTdHg8PwCYF4H5Y8gjdSpdulCvJFw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@swc/helpers": "^0.5.0"
             }
         },
         "node_modules/@react-stately/form": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.0.3.tgz",
-            "integrity": "sha512-92YYBvlHEWUGUpXgIaQ48J50jU9XrxfjYIN8BTvvhBHdD63oWgm8DzQnyT/NIAMzdLnhkg7vP+fjG8LjHeyIAg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1",
                 "@swc/helpers": "^0.5.0"
@@ -6805,8 +6356,7 @@
         },
         "node_modules/@react-stately/grid": {
             "version": "3.8.7",
-            "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.8.7.tgz",
-            "integrity": "sha512-he3TXCLAhF5C5z1/G4ySzcwyt7PEiWcVIupxebJQqRyFrNWemSuv+7tolnStmG8maMVIyV3P/3j4eRBbdSlOIg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/collections": "^3.10.7",
                 "@react-stately/selection": "^3.15.1",
@@ -6820,8 +6370,7 @@
         },
         "node_modules/@react-stately/layout": {
             "version": "3.13.9",
-            "resolved": "https://registry.npmjs.org/@react-stately/layout/-/layout-3.13.9.tgz",
-            "integrity": "sha512-JCj2cnvRbBjah9LFZbBXMdKkoKuEpzn6hvYBw7h0fNIhNGISpiI1TW4ya1X34kD2vcv/3dc31KV/UqmI4hJCQw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/collections": "^3.10.7",
                 "@react-stately/table": "^3.11.8",
@@ -6837,8 +6386,7 @@
         },
         "node_modules/@react-stately/list": {
             "version": "3.10.5",
-            "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.10.5.tgz",
-            "integrity": "sha512-fV9plO+6QDHiewsYIhboxcDhF17GO95xepC5ki0bKXo44gr14g/LSo/BMmsaMnV+1BuGdBunB05bO4QOIaigXA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/collections": "^3.10.7",
                 "@react-stately/selection": "^3.15.1",
@@ -6852,8 +6400,7 @@
         },
         "node_modules/@react-stately/menu": {
             "version": "3.7.1",
-            "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.7.1.tgz",
-            "integrity": "sha512-mX1w9HHzt+xal1WIT2xGrTQsoLvDwuB2R1Er1MBABs//MsJzccycatcgV/J/28m6tO5M9iuFQQvLV+i1dCtodg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/overlays": "^3.6.7",
                 "@react-types/menu": "^3.9.9",
@@ -6866,8 +6413,7 @@
         },
         "node_modules/@react-stately/numberfield": {
             "version": "3.9.3",
-            "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.9.3.tgz",
-            "integrity": "sha512-UlPTLSabhLEuHtgzM0PgfhtEaHy3yttbzcRb8yHNvGo4KbCHeHpTHd3QghKfTFm024Mug7+mVlWCmMtW0f5ttg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/number": "^3.5.3",
                 "@react-stately/form": "^3.0.3",
@@ -6881,8 +6427,7 @@
         },
         "node_modules/@react-stately/overlays": {
             "version": "3.6.7",
-            "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.7.tgz",
-            "integrity": "sha512-6zp8v/iNUm6YQap0loaFx6PlvN8C0DgWHNlrlzMtMmNuvjhjR0wYXVaTfNoUZBWj25tlDM81ukXOjpRXg9rLrw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/utils": "^3.10.1",
                 "@react-types/overlays": "^3.8.7",
@@ -6894,8 +6439,7 @@
         },
         "node_modules/@react-stately/radio": {
             "version": "3.10.4",
-            "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.4.tgz",
-            "integrity": "sha512-kCIc7tAl4L7Hu4Wt9l2jaa+MzYmAJm0qmC8G8yPMbExpWbLRu6J8Un80GZu+JxvzgDlqDyrVvyv9zFifwH/NkQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/form": "^3.0.3",
                 "@react-stately/utils": "^3.10.1",
@@ -6909,8 +6453,7 @@
         },
         "node_modules/@react-stately/searchfield": {
             "version": "3.5.3",
-            "resolved": "https://registry.npmjs.org/@react-stately/searchfield/-/searchfield-3.5.3.tgz",
-            "integrity": "sha512-H0OvlgwPIFdc471ypw79MDjz3WXaVq9+THaY6JM4DIohEJNN5Dwei7O9g6r6m/GqPXJIn5TT3b74kJ2Osc00YQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/utils": "^3.10.1",
                 "@react-types/searchfield": "^3.5.5",
@@ -6922,8 +6465,7 @@
         },
         "node_modules/@react-stately/select": {
             "version": "3.6.4",
-            "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.6.4.tgz",
-            "integrity": "sha512-whZgF1N53D0/dS8tOFdrswB0alsk5Q5620HC3z+5f2Hpi8gwgAZ8TYa+2IcmMYRiT+bxVuvEc/NirU9yPmqGbA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/form": "^3.0.3",
                 "@react-stately/list": "^3.10.5",
@@ -6938,8 +6480,7 @@
         },
         "node_modules/@react-stately/selection": {
             "version": "3.15.1",
-            "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.15.1.tgz",
-            "integrity": "sha512-6TQnN9L0UY9w19B7xzb1P6mbUVBtW840Cw1SjgNXCB3NPaCf59SwqClYzoj8O2ZFzMe8F/nUJtfU1NS65/OLlw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/collections": "^3.10.7",
                 "@react-stately/utils": "^3.10.1",
@@ -6952,8 +6493,7 @@
         },
         "node_modules/@react-stately/slider": {
             "version": "3.5.4",
-            "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.5.4.tgz",
-            "integrity": "sha512-Jsf7K17dr93lkNKL9ij8HUcoM1sPbq8TvmibD6DhrK9If2lje+OOL8y4n4qreUnfMT56HCAeS9wCO3fg3eMyrw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/utils": "^3.10.1",
                 "@react-types/shared": "^3.23.1",
@@ -6966,8 +6506,7 @@
         },
         "node_modules/@react-stately/table": {
             "version": "3.11.8",
-            "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.11.8.tgz",
-            "integrity": "sha512-EdyRW3lT1/kAVDp5FkEIi1BQ7tvmD2YgniGdLuW/l9LADo0T+oxZqruv60qpUS6sQap+59Riaxl91ClDxrJnpg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/collections": "^3.10.7",
                 "@react-stately/flags": "^3.0.3",
@@ -6985,8 +6524,7 @@
         },
         "node_modules/@react-stately/tabs": {
             "version": "3.6.6",
-            "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.6.6.tgz",
-            "integrity": "sha512-sOLxorH2uqjAA+v1ppkMCc2YyjgqvSGeBDgtR/lyPSDd4CVMoTExszROX2dqG0c8il9RQvzFuufUtQWMY6PgSA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/list": "^3.10.5",
                 "@react-types/shared": "^3.23.1",
@@ -6999,8 +6537,7 @@
         },
         "node_modules/@react-stately/toggle": {
             "version": "3.7.4",
-            "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.7.4.tgz",
-            "integrity": "sha512-CoYFe9WrhLkDP4HGDpJYQKwfiYCRBAeoBQHv+JWl5eyK61S8xSwoHsveYuEZ3bowx71zyCnNAqWRrmNOxJ4CKA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/utils": "^3.10.1",
                 "@react-types/checkbox": "^3.8.1",
@@ -7012,8 +6549,7 @@
         },
         "node_modules/@react-stately/tooltip": {
             "version": "3.4.9",
-            "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.4.9.tgz",
-            "integrity": "sha512-P7CDJsdoKarz32qFwf3VNS01lyC+63gXpDZG31pUu+EO5BeQd4WKN/AH1Beuswpr4GWzxzFc1aXQgERFGVzraA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/overlays": "^3.6.7",
                 "@react-types/tooltip": "^3.4.9",
@@ -7025,8 +6561,7 @@
         },
         "node_modules/@react-stately/tree": {
             "version": "3.8.1",
-            "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.8.1.tgz",
-            "integrity": "sha512-LOdkkruJWch3W89h4B/bXhfr0t0t1aRfEp+IMrrwdRAl23NaPqwl5ILHs4Xu5XDHqqhg8co73pHrJwUyiTWEjw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/collections": "^3.10.7",
                 "@react-stately/selection": "^3.15.1",
@@ -7040,8 +6575,7 @@
         },
         "node_modules/@react-stately/utils": {
             "version": "3.10.1",
-            "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.1.tgz",
-            "integrity": "sha512-VS/EHRyicef25zDZcM/ClpzYMC5i2YGN6uegOeQawmgfGjb02yaCX0F0zR69Pod9m2Hr3wunTbtpgVXvYbZItg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@swc/helpers": "^0.5.0"
             },
@@ -7051,8 +6585,7 @@
         },
         "node_modules/@react-stately/virtualizer": {
             "version": "3.7.1",
-            "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.7.1.tgz",
-            "integrity": "sha512-voHgE6EQ+oZaLv6u2umKxakvIKNkCQuUihqKACTjdslp7SJh4Mvs3oLBI0hf0JOh+rCcFIKDvQtFwy1fXFRYBA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-aria/utils": "^3.24.1",
                 "@react-types/shared": "^3.23.1",
@@ -7064,8 +6597,7 @@
         },
         "node_modules/@react-types/actionbar": {
             "version": "3.1.7",
-            "resolved": "https://registry.npmjs.org/@react-types/actionbar/-/actionbar-3.1.7.tgz",
-            "integrity": "sha512-yohxM+R9o/HGADL7NdTH9tC9BnWrVYKsutobjWzVQZHGoaHEqBbz03dk3m9UvFMnw7g6kjtGxhOJQpztz7nk3Q==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7075,8 +6607,7 @@
         },
         "node_modules/@react-types/actiongroup": {
             "version": "3.4.9",
-            "resolved": "https://registry.npmjs.org/@react-types/actiongroup/-/actiongroup-3.4.9.tgz",
-            "integrity": "sha512-n6lGBLm8HxLguG4om5ysMCexSdMWNhM5L0yGjA4pZxdoKZborPALDN/Ao57svnTwaSJmeExvTwHIFds1yr4AXQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7086,8 +6617,7 @@
         },
         "node_modules/@react-types/avatar": {
             "version": "3.0.7",
-            "resolved": "https://registry.npmjs.org/@react-types/avatar/-/avatar-3.0.7.tgz",
-            "integrity": "sha512-FXws1/o0Vy3yJcBDdKYPElNzpcVjdkck6KHGQyxAkKe7vvtFUcHpzz9fxEO5kRLwTv6j7EahXsJeqsH9TpFWuA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7097,8 +6627,7 @@
         },
         "node_modules/@react-types/badge": {
             "version": "3.1.9",
-            "resolved": "https://registry.npmjs.org/@react-types/badge/-/badge-3.1.9.tgz",
-            "integrity": "sha512-GNvg3cULRiUxXZYmOOIaua0KSL72jnLwv/2LLbQeYQystLaEmsibmdoRvfQN80mEQ1f3WFfhZogiG31+4MS/xg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7108,8 +6637,7 @@
         },
         "node_modules/@react-types/breadcrumbs": {
             "version": "3.7.5",
-            "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.5.tgz",
-            "integrity": "sha512-lV9IDYsMiu2TgdMIjEmsOE0YWwjb3jhUNK1DCZZfq6uWuiHLgyx2EncazJBUWSjHJ4ta32j7xTuXch+8Ai6u/A==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/link": "^3.5.5",
                 "@react-types/shared": "^3.23.1"
@@ -7120,8 +6648,7 @@
         },
         "node_modules/@react-types/button": {
             "version": "3.9.4",
-            "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.9.4.tgz",
-            "integrity": "sha512-raeQBJUxBp0axNF74TXB8/H50GY8Q3eV6cEKMbZFP1+Dzr09Ngv0tJBeW0ewAxAguNH5DRoMUAUGIXtSXskVdA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7131,8 +6658,7 @@
         },
         "node_modules/@react-types/buttongroup": {
             "version": "3.3.9",
-            "resolved": "https://registry.npmjs.org/@react-types/buttongroup/-/buttongroup-3.3.9.tgz",
-            "integrity": "sha512-3hEWI/GOsY8Z3db8gjEXbxl+6E0ioBNMxfN8jIeiNnSWSDG56MLNArJLowylPrwlrp5SnxLh1WBj44OHqEE3Tg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7142,8 +6668,7 @@
         },
         "node_modules/@react-types/calendar": {
             "version": "3.4.6",
-            "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.6.tgz",
-            "integrity": "sha512-WSntZPwtvsIYWvBQRAPvuCn55UTJBZroTvX0vQvWykJRQnPAI20G1hMQ3dNsnAL+gLZUYxBXn66vphmjUuSYew==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/date": "^3.5.4",
                 "@react-types/shared": "^3.23.1"
@@ -7154,8 +6679,7 @@
         },
         "node_modules/@react-types/checkbox": {
             "version": "3.8.1",
-            "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.8.1.tgz",
-            "integrity": "sha512-5/oVByPw4MbR/8QSdHCaalmyWC71H/QGgd4aduTJSaNi825o+v/hsN2/CH7Fq9atkLKsC8fvKD00Bj2VGaKriQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7165,8 +6689,7 @@
         },
         "node_modules/@react-types/color": {
             "version": "3.0.0-beta.25",
-            "resolved": "https://registry.npmjs.org/@react-types/color/-/color-3.0.0-beta.25.tgz",
-            "integrity": "sha512-D24ASvLeSWouBwOBi4ftUe4/BhrZj5AiHV7tXwrVeMGOy9Z9jyeK65Xysq+R3ecaSONLXsgai5CQMvj13cOacA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1",
                 "@react-types/slider": "^3.7.3"
@@ -7177,8 +6700,7 @@
         },
         "node_modules/@react-types/combobox": {
             "version": "3.11.1",
-            "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.11.1.tgz",
-            "integrity": "sha512-UNc3OHt5cUt5gCTHqhQIqhaWwKCpaNciD8R7eQazmHiA9fq8ROlV+7l3gdNgdhJbTf5Bu/V5ISnN7Y1xwL3zqQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7188,8 +6710,7 @@
         },
         "node_modules/@react-types/contextualhelp": {
             "version": "3.2.10",
-            "resolved": "https://registry.npmjs.org/@react-types/contextualhelp/-/contextualhelp-3.2.10.tgz",
-            "integrity": "sha512-x4rODNQfAO2YeVumkztTsUieOt4z7OXolZY7BLJgT1qonfPwJGLqf+KUayqXuX9l2CHakcGYDGaUxTUvwINQdw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/overlays": "^3.8.7",
                 "@react-types/shared": "^3.23.1"
@@ -7200,8 +6721,7 @@
         },
         "node_modules/@react-types/datepicker": {
             "version": "3.7.4",
-            "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.7.4.tgz",
-            "integrity": "sha512-ZfvgscvNzBJpYyVWg3nstJtA/VlWLwErwSkd1ivZYam859N30w8yH+4qoYLa6FzWLCFlrsRHyvtxlEM7lUAt5A==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/date": "^3.5.4",
                 "@react-types/calendar": "^3.4.6",
@@ -7214,8 +6734,7 @@
         },
         "node_modules/@react-types/dialog": {
             "version": "3.5.10",
-            "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.10.tgz",
-            "integrity": "sha512-S9ga+edOLNLZw7/zVOnZdT5T40etpzUYBXEKdFPbxyPYnERvRxJAsC1/ASuBU9fQAXMRgLZzADWV+wJoGS/X9g==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/overlays": "^3.8.7",
                 "@react-types/shared": "^3.23.1"
@@ -7226,8 +6745,7 @@
         },
         "node_modules/@react-types/divider": {
             "version": "3.3.9",
-            "resolved": "https://registry.npmjs.org/@react-types/divider/-/divider-3.3.9.tgz",
-            "integrity": "sha512-SQ3XWS16j3VZg3MGByJ1CjWDfARn+viBDay6SibAFzMqlqVbSol2nw1hQ1JPaT3zeW8C/354q+OhBsIFDOaE7w==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7237,8 +6755,7 @@
         },
         "node_modules/@react-types/form": {
             "version": "3.7.4",
-            "resolved": "https://registry.npmjs.org/@react-types/form/-/form-3.7.4.tgz",
-            "integrity": "sha512-HZojAWrb6feYnhDEOy3vBamDVAHDl0l2JQZ7aIDLHmeTAGQC3JNZcm2fLTxqLye46zz8w8l8OHgI+NdD4PHdOw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7248,8 +6765,7 @@
         },
         "node_modules/@react-types/grid": {
             "version": "3.2.6",
-            "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.6.tgz",
-            "integrity": "sha512-XfHenL2jEBUYrhKiPdeM24mbLRXUn79wVzzMhrNYh24nBwhsPPpxF+gjFddT3Cy8dt6tRInfT6pMEu9nsXwaHw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7259,8 +6775,7 @@
         },
         "node_modules/@react-types/illustratedmessage": {
             "version": "3.3.9",
-            "resolved": "https://registry.npmjs.org/@react-types/illustratedmessage/-/illustratedmessage-3.3.9.tgz",
-            "integrity": "sha512-a/X+sGzUA+pkLkKDZzy/QpUtOY6qtFpsPs6lfY37TLwCEQmS8a1VKrc1ItlQVRgIvwuqJXKvrJpGOAw+RjVwHw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7270,8 +6785,7 @@
         },
         "node_modules/@react-types/image": {
             "version": "3.4.1",
-            "resolved": "https://registry.npmjs.org/@react-types/image/-/image-3.4.1.tgz",
-            "integrity": "sha512-6vA3vEzjXrr701i1J43DkyPziRN7jfKSdarGDP+61dOcvbiLnuTY9t+r/zXo1SdewbjF5RVliB2ys9Bb654YTg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7281,8 +6795,7 @@
         },
         "node_modules/@react-types/label": {
             "version": "3.9.3",
-            "resolved": "https://registry.npmjs.org/@react-types/label/-/label-3.9.3.tgz",
-            "integrity": "sha512-PGVg/pBYNx3Ft59VNCvG5oqk4pXfS2Gs7t3TGnlBB1d+EXB9BbixJbOAO1PvRqt8SPCNvEAAAVfG6Vf+nOhSWw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7292,8 +6805,7 @@
         },
         "node_modules/@react-types/layout": {
             "version": "3.3.15",
-            "resolved": "https://registry.npmjs.org/@react-types/layout/-/layout-3.3.15.tgz",
-            "integrity": "sha512-Rj3M0TWmsag83gvFDY6UnfUkNPrA/FLuJ0kEiOryjjffoI0wTxmTAPpIgG4h7YSxpQJD6g6xQ8bkIWEMCXWyag==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7303,8 +6815,7 @@
         },
         "node_modules/@react-types/link": {
             "version": "3.5.5",
-            "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.5.5.tgz",
-            "integrity": "sha512-G6P5WagHDR87npN7sEuC5IIgL1GsoY4WFWKO4734i2CXRYx24G9P0Su3AX4GA3qpspz8sK1AWkaCzBMmvnunfw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7314,8 +6825,7 @@
         },
         "node_modules/@react-types/listbox": {
             "version": "3.4.9",
-            "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.4.9.tgz",
-            "integrity": "sha512-S5G+WmNKUIOPZxZ4svWwWQupP3C6LmVfnf8QQmPDvwYXGzVc0WovkqUWyhhjJirFDswTXRCO9p0yaTHHIlkdwQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7325,8 +6835,7 @@
         },
         "node_modules/@react-types/menu": {
             "version": "3.9.9",
-            "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.9.tgz",
-            "integrity": "sha512-FamUaPVs1Fxr4KOMI0YcR2rYZHoN7ypGtgiEiJ11v/tEPjPPGgeKDxii0McCrdOkjheatLN1yd2jmMwYj6hTDg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/overlays": "^3.8.7",
                 "@react-types/shared": "^3.23.1"
@@ -7337,8 +6846,7 @@
         },
         "node_modules/@react-types/meter": {
             "version": "3.4.1",
-            "resolved": "https://registry.npmjs.org/@react-types/meter/-/meter-3.4.1.tgz",
-            "integrity": "sha512-AIJV4NDFAqKH94s02c5Da4TH2qgJjfrw978zuFM0KUBFD85WRPKh7MvgWpomvUgmzqE6lMCzIdi1KPKqrRabdw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/progress": "^3.5.4"
             },
@@ -7348,8 +6856,7 @@
         },
         "node_modules/@react-types/numberfield": {
             "version": "3.8.3",
-            "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.8.3.tgz",
-            "integrity": "sha512-z5fGfVj3oh5bmkw9zDvClA1nDBSFL9affOuyk2qZ/M2SRUmykDAPCksbfcMndft0XULWKbF4s2CYbVI+E/yrUA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7359,8 +6866,7 @@
         },
         "node_modules/@react-types/overlays": {
             "version": "3.8.7",
-            "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.7.tgz",
-            "integrity": "sha512-zCOYvI4at2DkhVpviIClJ7bRrLXYhSg3Z3v9xymuPH3mkiuuP/dm8mUCtkyY4UhVeUTHmrQh1bzaOP00A+SSQA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7370,8 +6876,7 @@
         },
         "node_modules/@react-types/progress": {
             "version": "3.5.4",
-            "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.4.tgz",
-            "integrity": "sha512-JNc246sTjasPyx5Dp7/s0rp3Bz4qlu4LrZTulZlxWyb53WgBNL7axc26CCi+I20rWL9+c7JjhrRxnLl/1cLN5g==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7381,8 +6886,7 @@
         },
         "node_modules/@react-types/provider": {
             "version": "3.8.1",
-            "resolved": "https://registry.npmjs.org/@react-types/provider/-/provider-3.8.1.tgz",
-            "integrity": "sha512-Sm59ufxdHh6fGfeUbviNQhRvtI0FMEX1gn9Okc8nL7iTVbAAitT746x0itM+xwhFLDI6gSY8FILDWc5/kIxzxA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7392,8 +6896,7 @@
         },
         "node_modules/@react-types/radio": {
             "version": "3.8.1",
-            "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.8.1.tgz",
-            "integrity": "sha512-bK0gio/qj1+0Ldu/3k/s9BaOZvnnRgvFtL3u5ky479+aLG5qf1CmYed3SKz8ErZ70JkpuCSrSwSCFf0t1IHovw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7403,8 +6906,7 @@
         },
         "node_modules/@react-types/searchfield": {
             "version": "3.5.5",
-            "resolved": "https://registry.npmjs.org/@react-types/searchfield/-/searchfield-3.5.5.tgz",
-            "integrity": "sha512-T/NHg12+w23TxlXMdetogLDUldk1z5dDavzbnjKrLkajLb221bp8brlR/+O6C1CtFpuJGALqYHgTasU1qkQFSA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1",
                 "@react-types/textfield": "^3.9.3"
@@ -7415,8 +6917,7 @@
         },
         "node_modules/@react-types/select": {
             "version": "3.9.4",
-            "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.9.4.tgz",
-            "integrity": "sha512-xI7dnOW2st91fPPcv6hdtrTdcfetYiqZuuVPZ5TRobY7Q10/Zqqe/KqtOw1zFKUj9xqNJe4Ov3xP5GSdcO60Eg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7426,16 +6927,14 @@
         },
         "node_modules/@react-types/shared": {
             "version": "3.23.1",
-            "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.23.1.tgz",
-            "integrity": "sha512-5d+3HbFDxGZjhbMBeFHRQhexMFt4pUce3okyRtUVKbbedQFUrtXSBg9VszgF2RTeQDKDkMCIQDtz5ccP/Lk1gw==",
+            "license": "Apache-2.0",
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
             }
         },
         "node_modules/@react-types/slider": {
             "version": "3.7.3",
-            "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.7.3.tgz",
-            "integrity": "sha512-F8qFQaD2mqug2D0XeWMmjGBikiwbdERFlhFzdvNGbypPLz3AZICBKp1ZLPWdl0DMuy03G/jy6Gl4mDobl7RT2g==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7445,8 +6944,7 @@
         },
         "node_modules/@react-types/statuslight": {
             "version": "3.3.9",
-            "resolved": "https://registry.npmjs.org/@react-types/statuslight/-/statuslight-3.3.9.tgz",
-            "integrity": "sha512-6nC17gluvrMCJkb0mihzqAaz8wn0ghfgk1ILkL8CUobsqJU6pW4eGJXNoZCd5wHT/YjwnupzfhHcbMj93AHzWQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7456,8 +6954,7 @@
         },
         "node_modules/@react-types/switch": {
             "version": "3.5.3",
-            "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.3.tgz",
-            "integrity": "sha512-Nb6+J5MrPaFa8ZNFKGMzAsen/NNzl5UG/BbC65SLGPy7O0VDa/sUpn7dcu8V2xRpRwwIN/Oso4v63bt2sgdkgA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7467,8 +6964,7 @@
         },
         "node_modules/@react-types/table": {
             "version": "3.9.5",
-            "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.9.5.tgz",
-            "integrity": "sha512-fgM2j9F/UR4Anmd28CueghCgBwOZoCVyN8fjaIFPd2MN4gCwUUfANwxLav65gZk4BpwUXGoQdsW+X50L3555mg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/grid": "^3.2.6",
                 "@react-types/shared": "^3.23.1"
@@ -7479,8 +6975,7 @@
         },
         "node_modules/@react-types/tabs": {
             "version": "3.3.7",
-            "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.7.tgz",
-            "integrity": "sha512-ZdLe5xOcFX6+/ni45Dl2jO0jFATpTnoSqj6kLIS/BYv8oh0n817OjJkLf+DS3CLfNjApJWrHqAk34xNh6nRnEg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7490,8 +6985,7 @@
         },
         "node_modules/@react-types/text": {
             "version": "3.3.9",
-            "resolved": "https://registry.npmjs.org/@react-types/text/-/text-3.3.9.tgz",
-            "integrity": "sha512-JJTmUstFXikZHQhf+0VELODGz1jUcSgXOTYJxTMiMtSjLOSCW5G+pRhT80MRgxOeuD0Z7p0XghUXo3ruD694HA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7501,8 +6995,7 @@
         },
         "node_modules/@react-types/textfield": {
             "version": "3.9.3",
-            "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.9.3.tgz",
-            "integrity": "sha512-DoAY6cYOL0pJhgNGI1Rosni7g72GAt4OVr2ltEx2S9ARmFZ0DBvdhA9lL2nywcnKMf27PEJcKMXzXc10qaHsJw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7512,8 +7005,7 @@
         },
         "node_modules/@react-types/tooltip": {
             "version": "3.4.9",
-            "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.9.tgz",
-            "integrity": "sha512-wZ+uF1+Zc43qG+cOJzioBmLUNjRa7ApdcT0LI1VvaYvH5GdfjzUJOorLX9V/vAci0XMJ50UZ+qsh79aUlw2yqg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/overlays": "^3.8.7",
                 "@react-types/shared": "^3.23.1"
@@ -7524,8 +7016,7 @@
         },
         "node_modules/@react-types/view": {
             "version": "3.4.9",
-            "resolved": "https://registry.npmjs.org/@react-types/view/-/view-3.4.9.tgz",
-            "integrity": "sha512-HY969whOXKg10ZqIrXOF12wm3rDwNaKaK9fzqhhrUc94+JR4OPKQctps+HeonAXscxy2yMy8V1/2yjiEwluvAA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7535,8 +7026,7 @@
         },
         "node_modules/@react-types/well": {
             "version": "3.3.9",
-            "resolved": "https://registry.npmjs.org/@react-types/well/-/well-3.3.9.tgz",
-            "integrity": "sha512-3ZlxjkWXupxx0PaxpDc4Pqxxgnzp8iJkilbJ3LY5F+RJwqDm0gkKnWcFjlVJw9LkM7Emjrvm1R8naSGzJ7wJ2A==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-types/shared": "^3.23.1"
             },
@@ -7546,21 +7036,18 @@
         },
         "node_modules/@rkusa/linebreak": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/@rkusa/linebreak/-/linebreak-1.0.0.tgz",
-            "integrity": "sha512-yCSm87XA1aYMgfcABSxcIkk3JtCw3AihNceHY+DnZGLvVP/g2z3UWZbi0xIoYpZWAJEVPr5Zt3QE37Q80wF1pA==",
+            "license": "MIT",
             "dependencies": {
                 "unicode-trie": "^0.3.0"
             }
         },
         "node_modules/@sec-ant/readable-stream": {
             "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
-            "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="
+            "license": "MIT"
         },
         "node_modules/@selderee/plugin-htmlparser2": {
             "version": "0.11.0",
-            "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz",
-            "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==",
+            "license": "MIT",
             "dependencies": {
                 "domhandler": "^5.0.3",
                 "selderee": "^0.11.0"
@@ -7571,8 +7058,7 @@
         },
         "node_modules/@sigstore/bundle": {
             "version": "2.3.2",
-            "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz",
-            "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@sigstore/protobuf-specs": "^0.3.2"
             },
@@ -7582,24 +7068,21 @@
         },
         "node_modules/@sigstore/core": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz",
-            "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
         "node_modules/@sigstore/protobuf-specs": {
             "version": "0.3.2",
-            "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz",
-            "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
         "node_modules/@sigstore/sign": {
             "version": "2.3.2",
-            "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz",
-            "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@sigstore/bundle": "^2.3.2",
                 "@sigstore/core": "^1.0.0",
@@ -7614,8 +7097,7 @@
         },
         "node_modules/@sigstore/tuf": {
             "version": "2.3.3",
-            "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.3.tgz",
-            "integrity": "sha512-agQhHNkIddXFslkudjV88vTXiAMEyUtso3at6ZHUNJ1agZb7Ze6VW/PddHipdWBu1t+8OWLW5X5yZOPiOnaWJQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@sigstore/protobuf-specs": "^0.3.0",
                 "tuf-js": "^2.2.1"
@@ -7626,8 +7108,7 @@
         },
         "node_modules/@sigstore/verify": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz",
-            "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@sigstore/bundle": "^2.3.2",
                 "@sigstore/core": "^1.1.0",
@@ -7639,13 +7120,11 @@
         },
         "node_modules/@sinclair/typebox": {
             "version": "0.27.8",
-            "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
-            "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="
+            "license": "MIT"
         },
         "node_modules/@sindresorhus/is": {
             "version": "6.3.1",
-            "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-6.3.1.tgz",
-            "integrity": "sha512-FX4MfcifwJyFOI2lPoX7PQxCqx8BG1HCho7WdiXwpEQx1Ycij0JxkfYtGK7yqNScrZGSlt6RE6sw8QYoH7eKnQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=16"
             },
@@ -7655,13 +7134,11 @@
         },
         "node_modules/@socket.io/component-emitter": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
-            "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="
+            "license": "MIT"
         },
         "node_modules/@spectrum-icons/ui": {
             "version": "3.6.7",
-            "resolved": "https://registry.npmjs.org/@spectrum-icons/ui/-/ui-3.6.7.tgz",
-            "integrity": "sha512-l08Juk6w8UUpM+xXNVq9LBJ0pxMC1tynXBurTZ135twdtMwofrZmtSHUYdzaRJtm31S9E/+C1Toci1I8aw7Wlw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@adobe/react-spectrum-ui": "1.2.0",
                 "@react-spectrum/icon": "^3.7.13",
@@ -7674,8 +7151,7 @@
         },
         "node_modules/@spectrum-icons/workflow": {
             "version": "4.2.12",
-            "resolved": "https://registry.npmjs.org/@spectrum-icons/workflow/-/workflow-4.2.12.tgz",
-            "integrity": "sha512-xuyytdlM09DEZO7/vSp5z8Y2RYNXL4OOYSmOaWXeYgIa3iPNKz0HW+iVR2P+Ht0iBtKjPvRobbEFb0k280U4yQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@adobe/react-spectrum-workflow": "2.3.4",
                 "@react-spectrum/icon": "^3.7.13",
@@ -7688,16 +7164,14 @@
         },
         "node_modules/@swc/helpers": {
             "version": "0.5.11",
-            "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.11.tgz",
-            "integrity": "sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "tslib": "^2.4.0"
             }
         },
         "node_modules/@szmarczak/http-timer": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
-            "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
+            "license": "MIT",
             "dependencies": {
                 "defer-to-connect": "^2.0.1"
             },
@@ -7707,45 +7181,38 @@
         },
         "node_modules/@tokenizer/token": {
             "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
-            "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
+            "license": "MIT"
         },
         "node_modules/@tsconfig/node10": {
             "version": "1.0.11",
-            "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
-            "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@tsconfig/node12": {
             "version": "1.0.11",
-            "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
-            "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@tsconfig/node14": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
-            "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@tsconfig/node16": {
             "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
-            "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@tufjs/canonical-json": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz",
-            "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==",
+            "license": "MIT",
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
         "node_modules/@tufjs/models": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz",
-            "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==",
+            "license": "MIT",
             "dependencies": {
                 "@tufjs/canonical-json": "2.0.0",
                 "minimatch": "^9.0.4"
@@ -7756,8 +7223,7 @@
         },
         "node_modules/@turf/along": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/along/-/along-6.5.0.tgz",
-            "integrity": "sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bearing": "^6.5.0",
                 "@turf/destination": "^6.5.0",
@@ -7771,8 +7237,7 @@
         },
         "node_modules/@turf/angle": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/angle/-/angle-6.5.0.tgz",
-            "integrity": "sha512-4pXMbWhFofJJAOvTMCns6N4C8CMd5Ih4O2jSAG9b3dDHakj3O4yN1+Zbm+NUei+eVEZ9gFeVp9svE3aMDenIkw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bearing": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -7785,8 +7250,7 @@
         },
         "node_modules/@turf/area": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.5.0.tgz",
-            "integrity": "sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/meta": "^6.5.0"
@@ -7797,8 +7261,7 @@
         },
         "node_modules/@turf/bbox": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.5.0.tgz",
-            "integrity": "sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/meta": "^6.5.0"
@@ -7809,8 +7272,7 @@
         },
         "node_modules/@turf/bbox-clip": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/bbox-clip/-/bbox-clip-6.5.0.tgz",
-            "integrity": "sha512-F6PaIRF8WMp8EmgU/Ke5B1Y6/pia14UAYB5TiBC668w5rVVjy5L8rTm/m2lEkkDMHlzoP9vNY4pxpNthE7rLcQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -7821,8 +7283,7 @@
         },
         "node_modules/@turf/bbox-polygon": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/bbox-polygon/-/bbox-polygon-6.5.0.tgz",
-            "integrity": "sha512-+/r0NyL1lOG3zKZmmf6L8ommU07HliP4dgYToMoTxqzsWzyLjaj/OzgQ8rBmv703WJX+aS6yCmLuIhYqyufyuw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0"
             },
@@ -7832,8 +7293,7 @@
         },
         "node_modules/@turf/bearing": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.5.0.tgz",
-            "integrity": "sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -7844,8 +7304,7 @@
         },
         "node_modules/@turf/bezier-spline": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/bezier-spline/-/bezier-spline-6.5.0.tgz",
-            "integrity": "sha512-vokPaurTd4PF96rRgGVm6zYYC5r1u98ZsG+wZEv9y3kJTuJRX/O3xIY2QnTGTdbVmAJN1ouOsD0RoZYaVoXORQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -7856,8 +7315,7 @@
         },
         "node_modules/@turf/boolean-clockwise": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-6.5.0.tgz",
-            "integrity": "sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -7868,8 +7326,7 @@
         },
         "node_modules/@turf/boolean-contains": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.5.0.tgz",
-            "integrity": "sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/boolean-point-in-polygon": "^6.5.0",
@@ -7883,8 +7340,7 @@
         },
         "node_modules/@turf/boolean-crosses": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/boolean-crosses/-/boolean-crosses-6.5.0.tgz",
-            "integrity": "sha512-gvshbTPhAHporTlQwBJqyfW+2yV8q/mOTxG6PzRVl6ARsqNoqYQWkd4MLug7OmAqVyBzLK3201uAeBjxbGw0Ng==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/boolean-point-in-polygon": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -7898,8 +7354,7 @@
         },
         "node_modules/@turf/boolean-disjoint": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/boolean-disjoint/-/boolean-disjoint-6.5.0.tgz",
-            "integrity": "sha512-rZ2ozlrRLIAGo2bjQ/ZUu4oZ/+ZjGvLkN5CKXSKBcu6xFO6k2bgqeM8a1836tAW+Pqp/ZFsTA5fZHsJZvP2D5g==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/boolean-point-in-polygon": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -7913,8 +7368,7 @@
         },
         "node_modules/@turf/boolean-equal": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/boolean-equal/-/boolean-equal-6.5.0.tgz",
-            "integrity": "sha512-cY0M3yoLC26mhAnjv1gyYNQjn7wxIXmL2hBmI/qs8g5uKuC2hRWi13ydufE3k4x0aNRjFGlg41fjoYLwaVF+9Q==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/clean-coords": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -7927,8 +7381,7 @@
         },
         "node_modules/@turf/boolean-intersects": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/boolean-intersects/-/boolean-intersects-6.5.0.tgz",
-            "integrity": "sha512-nIxkizjRdjKCYFQMnml6cjPsDOBCThrt+nkqtSEcxkKMhAQj5OO7o2CecioNTaX8EayqwMGVKcsz27oP4mKPTw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/boolean-disjoint": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -7940,8 +7393,7 @@
         },
         "node_modules/@turf/boolean-overlap": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.5.0.tgz",
-            "integrity": "sha512-8btMIdnbXVWUa1M7D4shyaSGxLRw6NjMcqKBcsTXcZdnaixl22k7ar7BvIzkaRYN3SFECk9VGXfLncNS3ckQUw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0",
@@ -7956,8 +7408,7 @@
         },
         "node_modules/@turf/boolean-parallel": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/boolean-parallel/-/boolean-parallel-6.5.0.tgz",
-            "integrity": "sha512-aSHJsr1nq9e5TthZGZ9CZYeXklJyRgR5kCLm5X4urz7+MotMOp/LsGOsvKvK9NeUl9+8OUmfMn8EFTT8LkcvIQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/clean-coords": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -7970,8 +7421,7 @@
         },
         "node_modules/@turf/boolean-point-in-polygon": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz",
-            "integrity": "sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -7982,8 +7432,7 @@
         },
         "node_modules/@turf/boolean-point-on-line": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.5.0.tgz",
-            "integrity": "sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -7994,8 +7443,7 @@
         },
         "node_modules/@turf/boolean-within": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/boolean-within/-/boolean-within-6.5.0.tgz",
-            "integrity": "sha512-YQB3oU18Inx35C/LU930D36RAVe7LDXk1kWsQ8mLmuqYn9YdPsDQTMTkLJMhoQ8EbN7QTdy333xRQ4MYgToteQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/boolean-point-in-polygon": "^6.5.0",
@@ -8009,8 +7457,7 @@
         },
         "node_modules/@turf/buffer": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/buffer/-/buffer-6.5.0.tgz",
-            "integrity": "sha512-qeX4N6+PPWbKqp1AVkBVWFerGjMYMUyencwfnkCesoznU6qvfugFHNAngNqIBVnJjZ5n8IFyOf+akcxnrt9sNg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/center": "^6.5.0",
@@ -8026,8 +7473,7 @@
         },
         "node_modules/@turf/center": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/center/-/center-6.5.0.tgz",
-            "integrity": "sha512-T8KtMTfSATWcAX088rEDKjyvQCBkUsLnK/Txb6/8WUXIeOZyHu42G7MkdkHRoHtwieLdduDdmPLFyTdG5/e7ZQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/helpers": "^6.5.0"
@@ -8038,8 +7484,7 @@
         },
         "node_modules/@turf/center-mean": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/center-mean/-/center-mean-6.5.0.tgz",
-            "integrity": "sha512-AAX6f4bVn12pTVrMUiB9KrnV94BgeBKpyg3YpfnEbBpkN/znfVhL8dG8IxMAxAoSZ61Zt9WLY34HfENveuOZ7Q==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8051,8 +7496,7 @@
         },
         "node_modules/@turf/center-median": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/center-median/-/center-median-6.5.0.tgz",
-            "integrity": "sha512-dT8Ndu5CiZkPrj15PBvslpuf01ky41DEYEPxS01LOxp5HOUHXp1oJxsPxvc+i/wK4BwccPNzU1vzJ0S4emd1KQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/center-mean": "^6.5.0",
                 "@turf/centroid": "^6.5.0",
@@ -8066,8 +7510,7 @@
         },
         "node_modules/@turf/center-of-mass": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/center-of-mass/-/center-of-mass-6.5.0.tgz",
-            "integrity": "sha512-EWrriU6LraOfPN7m1jZi+1NLTKNkuIsGLZc2+Y8zbGruvUW+QV7K0nhf7iZWutlxHXTBqEXHbKue/o79IumAsQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/centroid": "^6.5.0",
                 "@turf/convex": "^6.5.0",
@@ -8081,8 +7524,7 @@
         },
         "node_modules/@turf/centroid": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-6.5.0.tgz",
-            "integrity": "sha512-MwE1oq5E3isewPprEClbfU5pXljIK/GUOMbn22UM3IFPDJX0KeoyLNwghszkdmFp/qMGL/M13MMWvU+GNLXP/A==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/meta": "^6.5.0"
@@ -8093,8 +7535,7 @@
         },
         "node_modules/@turf/circle": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/circle/-/circle-6.5.0.tgz",
-            "integrity": "sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/destination": "^6.5.0",
                 "@turf/helpers": "^6.5.0"
@@ -8105,8 +7546,7 @@
         },
         "node_modules/@turf/clean-coords": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/clean-coords/-/clean-coords-6.5.0.tgz",
-            "integrity": "sha512-EMX7gyZz0WTH/ET7xV8MyrExywfm9qUi0/MY89yNffzGIEHuFfqwhcCqZ8O00rZIPZHUTxpmsxQSTfzJJA1CPw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -8117,8 +7557,7 @@
         },
         "node_modules/@turf/clone": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-6.5.0.tgz",
-            "integrity": "sha512-mzVtTFj/QycXOn6ig+annKrM6ZlimreKYz6f/GSERytOpgzodbQyOgkfwru100O1KQhhjSudKK4DsQ0oyi9cTw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0"
             },
@@ -8128,8 +7567,7 @@
         },
         "node_modules/@turf/clusters": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/clusters/-/clusters-6.5.0.tgz",
-            "integrity": "sha512-Y6gfnTJzQ1hdLfCsyd5zApNbfLIxYEpmDibHUqR5z03Lpe02pa78JtgrgUNt1seeO/aJ4TG1NLN8V5gOrHk04g==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/meta": "^6.5.0"
@@ -8140,8 +7578,7 @@
         },
         "node_modules/@turf/clusters-dbscan": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/clusters-dbscan/-/clusters-dbscan-6.5.0.tgz",
-            "integrity": "sha512-SxZEE4kADU9DqLRiT53QZBBhu8EP9skviSyl+FGj08Y01xfICM/RR9ACUdM0aEQimhpu+ZpRVcUK+2jtiCGrYQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/clone": "^6.5.0",
                 "@turf/distance": "^6.5.0",
@@ -8155,8 +7592,7 @@
         },
         "node_modules/@turf/clusters-kmeans": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/clusters-kmeans/-/clusters-kmeans-6.5.0.tgz",
-            "integrity": "sha512-DwacD5+YO8kwDPKaXwT9DV46tMBVNsbi1IzdajZu1JDSWoN7yc7N9Qt88oi+p30583O0UPVkAK+A10WAQv4mUw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/clone": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8170,8 +7606,7 @@
         },
         "node_modules/@turf/collect": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/collect/-/collect-6.5.0.tgz",
-            "integrity": "sha512-4dN/T6LNnRg099m97BJeOcTA5fSI8cu87Ydgfibewd2KQwBexO69AnjEFqfPX3Wj+Zvisj1uAVIZbPmSSrZkjg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/boolean-point-in-polygon": "^6.5.0",
@@ -8184,8 +7619,7 @@
         },
         "node_modules/@turf/combine": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/combine/-/combine-6.5.0.tgz",
-            "integrity": "sha512-Q8EIC4OtAcHiJB3C4R+FpB4LANiT90t17uOd851qkM2/o6m39bfN5Mv0PWqMZIHWrrosZqRqoY9dJnzz/rJxYQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/meta": "^6.5.0"
@@ -8196,8 +7630,7 @@
         },
         "node_modules/@turf/concave": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/concave/-/concave-6.5.0.tgz",
-            "integrity": "sha512-I/sUmUC8TC5h/E2vPwxVht+nRt+TnXIPRoztDFvS8/Y0+cBDple9inLSo9nnPXMXidrBlGXZ9vQx/BjZUJgsRQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/clone": "^6.5.0",
                 "@turf/distance": "^6.5.0",
@@ -8214,8 +7647,7 @@
         },
         "node_modules/@turf/convex": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/convex/-/convex-6.5.0.tgz",
-            "integrity": "sha512-x7ZwC5z7PJB0SBwNh7JCeCNx7Iu+QSrH7fYgK0RhhNop13TqUlvHMirMLRgf2db1DqUetrAO2qHJeIuasquUWg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/meta": "^6.5.0",
@@ -8227,8 +7659,7 @@
         },
         "node_modules/@turf/destination": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.5.0.tgz",
-            "integrity": "sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -8239,8 +7670,7 @@
         },
         "node_modules/@turf/difference": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-6.5.0.tgz",
-            "integrity": "sha512-l8iR5uJqvI+5Fs6leNbhPY5t/a3vipUF/3AeVLpwPQcgmedNXyheYuy07PcMGH5Jdpi5gItOiTqwiU/bUH4b3A==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0",
@@ -8252,8 +7682,7 @@
         },
         "node_modules/@turf/dissolve": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/dissolve/-/dissolve-6.5.0.tgz",
-            "integrity": "sha512-WBVbpm9zLTp0Bl9CE35NomTaOL1c4TQCtEoO43YaAhNEWJOOIhZMFJyr8mbvYruKl817KinT3x7aYjjCMjTAsQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0",
@@ -8266,8 +7695,7 @@
         },
         "node_modules/@turf/distance": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.5.0.tgz",
-            "integrity": "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -8278,8 +7706,7 @@
         },
         "node_modules/@turf/distance-weight": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/distance-weight/-/distance-weight-6.5.0.tgz",
-            "integrity": "sha512-a8qBKkgVNvPKBfZfEJZnC3DV7dfIsC3UIdpRci/iap/wZLH41EmS90nM+BokAJflUHYy8PqE44wySGWHN1FXrQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/centroid": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8292,8 +7719,7 @@
         },
         "node_modules/@turf/ellipse": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/ellipse/-/ellipse-6.5.0.tgz",
-            "integrity": "sha512-kuXtwFviw/JqnyJXF1mrR/cb496zDTSbGKtSiolWMNImYzGGkbsAsFTjwJYgD7+4FixHjp0uQPzo70KDf3AIBw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0",
@@ -8306,8 +7732,7 @@
         },
         "node_modules/@turf/envelope": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/envelope/-/envelope-6.5.0.tgz",
-            "integrity": "sha512-9Z+FnBWvOGOU4X+fMZxYFs1HjFlkKqsddLuMknRaqcJd6t+NIv5DWvPtDL8ATD2GEExYDiFLwMdckfr1yqJgHA==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/bbox-polygon": "^6.5.0",
@@ -8319,8 +7744,7 @@
         },
         "node_modules/@turf/explode": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/explode/-/explode-6.5.0.tgz",
-            "integrity": "sha512-6cSvMrnHm2qAsace6pw9cDmK2buAlw8+tjeJVXMfMyY+w7ZUi1rprWMsY92J7s2Dar63Bv09n56/1V7+tcj52Q==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/meta": "^6.5.0"
@@ -8331,8 +7755,7 @@
         },
         "node_modules/@turf/flatten": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/flatten/-/flatten-6.5.0.tgz",
-            "integrity": "sha512-IBZVwoNLVNT6U/bcUUllubgElzpMsNoCw8tLqBw6dfYg9ObGmpEjf9BIYLr7a2Yn5ZR4l7YIj2T7kD5uJjZADQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/meta": "^6.5.0"
@@ -8343,8 +7766,7 @@
         },
         "node_modules/@turf/flip": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/flip/-/flip-6.5.0.tgz",
-            "integrity": "sha512-oyikJFNjt2LmIXQqgOGLvt70RgE2lyzPMloYWM7OR5oIFGRiBvqVD2hA6MNw6JewIm30fWZ8DQJw1NHXJTJPbg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/clone": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8356,8 +7778,7 @@
         },
         "node_modules/@turf/great-circle": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/great-circle/-/great-circle-6.5.0.tgz",
-            "integrity": "sha512-7ovyi3HaKOXdFyN7yy1yOMa8IyOvV46RC1QOQTT+RYUN8ke10eyqExwBpL9RFUPvlpoTzoYbM/+lWPogQlFncg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -8368,16 +7789,14 @@
         },
         "node_modules/@turf/helpers": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz",
-            "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==",
+            "license": "MIT",
             "funding": {
                 "url": "https://opencollective.com/turf"
             }
         },
         "node_modules/@turf/hex-grid": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/hex-grid/-/hex-grid-6.5.0.tgz",
-            "integrity": "sha512-Ln3tc2tgZT8etDOldgc6e741Smg1CsMKAz1/Mlel+MEL5Ynv2mhx3m0q4J9IB1F3a4MNjDeVvm8drAaf9SF33g==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/distance": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8390,8 +7809,7 @@
         },
         "node_modules/@turf/interpolate": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/interpolate/-/interpolate-6.5.0.tgz",
-            "integrity": "sha512-LSH5fMeiGyuDZ4WrDJNgh81d2DnNDUVJtuFryJFup8PV8jbs46lQGfI3r1DJ2p1IlEJIz3pmAZYeTfMMoeeohw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/centroid": "^6.5.0",
@@ -8411,8 +7829,7 @@
         },
         "node_modules/@turf/intersect": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-6.5.0.tgz",
-            "integrity": "sha512-2legGJeKrfFkzntcd4GouPugoqPUjexPZnOvfez+3SfIMrHvulw8qV8u7pfVyn2Yqs53yoVCEjS5sEpvQ5YRQg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0",
@@ -8424,8 +7841,7 @@
         },
         "node_modules/@turf/invariant": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.5.0.tgz",
-            "integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0"
             },
@@ -8435,8 +7851,7 @@
         },
         "node_modules/@turf/isobands": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/isobands/-/isobands-6.5.0.tgz",
-            "integrity": "sha512-4h6sjBPhRwMVuFaVBv70YB7eGz+iw0bhPRnp+8JBdX1UPJSXhoi/ZF2rACemRUr0HkdVB/a1r9gC32vn5IAEkw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/area": "^6.5.0",
                 "@turf/bbox": "^6.5.0",
@@ -8453,8 +7868,7 @@
         },
         "node_modules/@turf/isolines": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/isolines/-/isolines-6.5.0.tgz",
-            "integrity": "sha512-6ElhiLCopxWlv4tPoxiCzASWt/jMRvmp6mRYrpzOm3EUl75OhHKa/Pu6Y9nWtCMmVC/RcWtiiweUocbPLZLm0A==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8468,8 +7882,7 @@
         },
         "node_modules/@turf/kinks": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/kinks/-/kinks-6.5.0.tgz",
-            "integrity": "sha512-ViCngdPt1eEL7hYUHR2eHR662GvCgTc35ZJFaNR6kRtr6D8plLaDju0FILeFFWSc+o8e3fwxZEJKmFj9IzPiIQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0"
             },
@@ -8479,8 +7892,7 @@
         },
         "node_modules/@turf/length": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/length/-/length-6.5.0.tgz",
-            "integrity": "sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/distance": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8492,8 +7904,7 @@
         },
         "node_modules/@turf/line-arc": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/line-arc/-/line-arc-6.5.0.tgz",
-            "integrity": "sha512-I6c+V6mIyEwbtg9P9zSFF89T7QPe1DPTG3MJJ6Cm1MrAY0MdejwQKOpsvNl8LDU2ekHOlz2kHpPVR7VJsoMllA==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/circle": "^6.5.0",
                 "@turf/destination": "^6.5.0",
@@ -8505,8 +7916,7 @@
         },
         "node_modules/@turf/line-chunk": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/line-chunk/-/line-chunk-6.5.0.tgz",
-            "integrity": "sha512-i1FGE6YJaaYa+IJesTfyRRQZP31QouS+wh/pa6O3CC0q4T7LtHigyBSYjrbjSLfn2EVPYGlPCMFEqNWCOkC6zg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/length": "^6.5.0",
@@ -8519,8 +7929,7 @@
         },
         "node_modules/@turf/line-intersect": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.5.0.tgz",
-            "integrity": "sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0",
@@ -8534,8 +7943,7 @@
         },
         "node_modules/@turf/line-offset": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/line-offset/-/line-offset-6.5.0.tgz",
-            "integrity": "sha512-CEXZbKgyz8r72qRvPchK0dxqsq8IQBdH275FE6o4MrBkzMcoZsfSjghtXzKaz9vvro+HfIXal0sTk2mqV1lQTw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0",
@@ -8547,8 +7955,7 @@
         },
         "node_modules/@turf/line-overlap": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.5.0.tgz",
-            "integrity": "sha512-xHOaWLd0hkaC/1OLcStCpfq55lPHpPNadZySDXYiYjEz5HXr1oKmtMYpn0wGizsLwrOixRdEp+j7bL8dPt4ojQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/boolean-point-on-line": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8565,8 +7972,7 @@
         },
         "node_modules/@turf/line-segment": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.5.0.tgz",
-            "integrity": "sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0",
@@ -8578,8 +7984,7 @@
         },
         "node_modules/@turf/line-slice": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/line-slice/-/line-slice-6.5.0.tgz",
-            "integrity": "sha512-vDqJxve9tBHhOaVVFXqVjF5qDzGtKWviyjbyi2QnSnxyFAmLlLnBfMX8TLQCAf2GxHibB95RO5FBE6I2KVPRuw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0",
@@ -8591,8 +7996,7 @@
         },
         "node_modules/@turf/line-slice-along": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/line-slice-along/-/line-slice-along-6.5.0.tgz",
-            "integrity": "sha512-KHJRU6KpHrAj+BTgTNqby6VCTnDzG6a1sJx/I3hNvqMBLvWVA2IrkR9L9DtsQsVY63IBwVdQDqiwCuZLDQh4Ng==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bearing": "^6.5.0",
                 "@turf/destination": "^6.5.0",
@@ -8605,8 +8009,7 @@
         },
         "node_modules/@turf/line-split": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/line-split/-/line-split-6.5.0.tgz",
-            "integrity": "sha512-/rwUMVr9OI2ccJjw7/6eTN53URtGThNSD5I0GgxyFXMtxWiloRJ9MTff8jBbtPWrRka/Sh2GkwucVRAEakx9Sw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8625,8 +8028,7 @@
         },
         "node_modules/@turf/line-to-polygon": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/line-to-polygon/-/line-to-polygon-6.5.0.tgz",
-            "integrity": "sha512-qYBuRCJJL8Gx27OwCD1TMijM/9XjRgXH/m/TyuND4OXedBpIWlK5VbTIO2gJ8OCfznBBddpjiObLBrkuxTpN4Q==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/clone": "^6.5.0",
@@ -8639,8 +8041,7 @@
         },
         "node_modules/@turf/mask": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/mask/-/mask-6.5.0.tgz",
-            "integrity": "sha512-RQha4aU8LpBrmrkH8CPaaoAfk0Egj5OuXtv6HuCQnHeGNOQt3TQVibTA3Sh4iduq4EPxnZfDjgsOeKtrCA19lg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "polygon-clipping": "^0.15.3"
@@ -8651,8 +8052,7 @@
         },
         "node_modules/@turf/meta": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.5.0.tgz",
-            "integrity": "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0"
             },
@@ -8662,8 +8062,7 @@
         },
         "node_modules/@turf/midpoint": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/midpoint/-/midpoint-6.5.0.tgz",
-            "integrity": "sha512-MyTzV44IwmVI6ec9fB2OgZ53JGNlgOpaYl9ArKoF49rXpL84F9rNATndbe0+MQIhdkw8IlzA6xVP4lZzfMNVCw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bearing": "^6.5.0",
                 "@turf/destination": "^6.5.0",
@@ -8676,8 +8075,7 @@
         },
         "node_modules/@turf/moran-index": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/moran-index/-/moran-index-6.5.0.tgz",
-            "integrity": "sha512-ItsnhrU2XYtTtTudrM8so4afBCYWNaB0Mfy28NZwLjB5jWuAsvyV+YW+J88+neK/ougKMTawkmjQqodNJaBeLQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/distance-weight": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8689,8 +8087,7 @@
         },
         "node_modules/@turf/nearest-point": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/nearest-point/-/nearest-point-6.5.0.tgz",
-            "integrity": "sha512-fguV09QxilZv/p94s8SMsXILIAMiaXI5PATq9d7YWijLxWUj6Q/r43kxyoi78Zmwwh1Zfqz9w+bCYUAxZ5+euA==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/clone": "^6.5.0",
                 "@turf/distance": "^6.5.0",
@@ -8703,8 +8100,7 @@
         },
         "node_modules/@turf/nearest-point-on-line": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz",
-            "integrity": "sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bearing": "^6.5.0",
                 "@turf/destination": "^6.5.0",
@@ -8720,8 +8116,7 @@
         },
         "node_modules/@turf/nearest-point-to-line": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/nearest-point-to-line/-/nearest-point-to-line-6.5.0.tgz",
-            "integrity": "sha512-PXV7cN0BVzUZdjj6oeb/ESnzXSfWmEMrsfZSDRgqyZ9ytdiIj/eRsnOXLR13LkTdXVOJYDBuf7xt1mLhM4p6+Q==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0",
@@ -8735,8 +8130,7 @@
         },
         "node_modules/@turf/planepoint": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/planepoint/-/planepoint-6.5.0.tgz",
-            "integrity": "sha512-R3AahA6DUvtFbka1kcJHqZ7DMHmPXDEQpbU5WaglNn7NaCQg9HB0XM0ZfqWcd5u92YXV+Gg8QhC8x5XojfcM4Q==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -8747,8 +8141,7 @@
         },
         "node_modules/@turf/point-grid": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/point-grid/-/point-grid-6.5.0.tgz",
-            "integrity": "sha512-Iq38lFokNNtQJnOj/RBKmyt6dlof0yhaHEDELaWHuECm1lIZLY3ZbVMwbs+nXkwTAHjKfS/OtMheUBkw+ee49w==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/boolean-within": "^6.5.0",
                 "@turf/distance": "^6.5.0",
@@ -8761,8 +8154,7 @@
         },
         "node_modules/@turf/point-on-feature": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/point-on-feature/-/point-on-feature-6.5.0.tgz",
-            "integrity": "sha512-bDpuIlvugJhfcF/0awAQ+QI6Om1Y1FFYE8Y/YdxGRongivix850dTeXCo0mDylFdWFPGDo7Mmh9Vo4VxNwW/TA==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/boolean-point-in-polygon": "^6.5.0",
                 "@turf/center": "^6.5.0",
@@ -8776,8 +8168,7 @@
         },
         "node_modules/@turf/point-to-line-distance": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/point-to-line-distance/-/point-to-line-distance-6.5.0.tgz",
-            "integrity": "sha512-opHVQ4vjUhNBly1bob6RWy+F+hsZDH9SA0UW36pIRzfpu27qipU18xup0XXEePfY6+wvhF6yL/WgCO2IbrLqEA==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bearing": "^6.5.0",
                 "@turf/distance": "^6.5.0",
@@ -8794,8 +8185,7 @@
         },
         "node_modules/@turf/points-within-polygon": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/points-within-polygon/-/points-within-polygon-6.5.0.tgz",
-            "integrity": "sha512-YyuheKqjliDsBDt3Ho73QVZk1VXX1+zIA2gwWvuz8bR1HXOkcuwk/1J76HuFMOQI3WK78wyAi+xbkx268PkQzQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/boolean-point-in-polygon": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8807,8 +8197,7 @@
         },
         "node_modules/@turf/polygon-smooth": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/polygon-smooth/-/polygon-smooth-6.5.0.tgz",
-            "integrity": "sha512-LO/X/5hfh/Rk4EfkDBpLlVwt3i6IXdtQccDT9rMjXEP32tRgy0VMFmdkNaXoGlSSKf/1mGqLl4y4wHd86DqKbg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/meta": "^6.5.0"
@@ -8819,8 +8208,7 @@
         },
         "node_modules/@turf/polygon-tangents": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/polygon-tangents/-/polygon-tangents-6.5.0.tgz",
-            "integrity": "sha512-sB4/IUqJMYRQH9jVBwqS/XDitkEfbyqRy+EH/cMRJURTg78eHunvJ708x5r6umXsbiUyQU4eqgPzEylWEQiunw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/boolean-within": "^6.5.0",
@@ -8835,8 +8223,7 @@
         },
         "node_modules/@turf/polygon-to-line": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/polygon-to-line/-/polygon-to-line-6.5.0.tgz",
-            "integrity": "sha512-5p4n/ij97EIttAq+ewSnKt0ruvuM+LIDzuczSzuHTpq4oS7Oq8yqg5TQ4nzMVuK41r/tALCk7nAoBuw3Su4Gcw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -8847,8 +8234,7 @@
         },
         "node_modules/@turf/polygonize": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/polygonize/-/polygonize-6.5.0.tgz",
-            "integrity": "sha512-a/3GzHRaCyzg7tVYHo43QUChCspa99oK4yPqooVIwTC61npFzdrmnywMv0S+WZjHZwK37BrFJGFrZGf6ocmY5w==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/boolean-point-in-polygon": "^6.5.0",
                 "@turf/envelope": "^6.5.0",
@@ -8862,8 +8248,7 @@
         },
         "node_modules/@turf/projection": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/projection/-/projection-6.5.0.tgz",
-            "integrity": "sha512-/Pgh9mDvQWWu8HRxqpM+tKz8OzgauV+DiOcr3FCjD6ubDnrrmMJlsf6fFJmggw93mtVPrZRL6yyi9aYCQBOIvg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/clone": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8875,8 +8260,7 @@
         },
         "node_modules/@turf/random": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/random/-/random-6.5.0.tgz",
-            "integrity": "sha512-8Q25gQ/XbA7HJAe+eXp4UhcXM9aOOJFaxZ02+XSNwMvY8gtWSCBLVqRcW4OhqilgZ8PeuQDWgBxeo+BIqqFWFQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0"
             },
@@ -8886,8 +8270,7 @@
         },
         "node_modules/@turf/rectangle-grid": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/rectangle-grid/-/rectangle-grid-6.5.0.tgz",
-            "integrity": "sha512-yQZ/1vbW68O2KsSB3OZYK+72aWz/Adnf7m2CMKcC+aq6TwjxZjAvlbCOsNUnMAuldRUVN1ph6RXMG4e9KEvKvg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/boolean-intersects": "^6.5.0",
                 "@turf/distance": "^6.5.0",
@@ -8899,8 +8282,7 @@
         },
         "node_modules/@turf/rewind": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/rewind/-/rewind-6.5.0.tgz",
-            "integrity": "sha512-IoUAMcHWotBWYwSYuYypw/LlqZmO+wcBpn8ysrBNbazkFNkLf3btSDZMkKJO/bvOzl55imr/Xj4fi3DdsLsbzQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/boolean-clockwise": "^6.5.0",
                 "@turf/clone": "^6.5.0",
@@ -8914,8 +8296,7 @@
         },
         "node_modules/@turf/rhumb-bearing": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/rhumb-bearing/-/rhumb-bearing-6.5.0.tgz",
-            "integrity": "sha512-jMyqiMRK4hzREjQmnLXmkJ+VTNTx1ii8vuqRwJPcTlKbNWfjDz/5JqJlb5NaFDcdMpftWovkW5GevfnuzHnOYA==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -8926,8 +8307,7 @@
         },
         "node_modules/@turf/rhumb-destination": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/rhumb-destination/-/rhumb-destination-6.5.0.tgz",
-            "integrity": "sha512-RHNP1Oy+7xTTdRrTt375jOZeHceFbjwohPHlr9Hf68VdHHPMAWgAKqiX2YgSWDcvECVmiGaBKWus1Df+N7eE4Q==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -8938,8 +8318,7 @@
         },
         "node_modules/@turf/rhumb-distance": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/rhumb-distance/-/rhumb-distance-6.5.0.tgz",
-            "integrity": "sha512-oKp8KFE8E4huC2Z1a1KNcFwjVOqa99isxNOwfo4g3SUABQ6NezjKDDrnvC4yI5YZ3/huDjULLBvhed45xdCrzg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0"
@@ -8950,8 +8329,7 @@
         },
         "node_modules/@turf/sample": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/sample/-/sample-6.5.0.tgz",
-            "integrity": "sha512-kSdCwY7el15xQjnXYW520heKUrHwRvnzx8ka4eYxX9NFeOxaFITLW2G7UtXb6LJK8mmPXI8Aexv23F2ERqzGFg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0"
             },
@@ -8961,8 +8339,7 @@
         },
         "node_modules/@turf/sector": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/sector/-/sector-6.5.0.tgz",
-            "integrity": "sha512-cYUOkgCTWqa23SOJBqxoFAc/yGCUsPRdn/ovbRTn1zNTm/Spmk6hVB84LCKOgHqvSF25i0d2kWqpZDzLDdAPbw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/circle": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -8976,8 +8353,7 @@
         },
         "node_modules/@turf/shortest-path": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/shortest-path/-/shortest-path-6.5.0.tgz",
-            "integrity": "sha512-4de5+G7+P4hgSoPwn+SO9QSi9HY5NEV/xRJ+cmoFVRwv2CDsuOPDheHKeuIAhKyeKDvPvPt04XYWbac4insJMg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/bbox-polygon": "^6.5.0",
@@ -8995,8 +8371,7 @@
         },
         "node_modules/@turf/simplify": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/simplify/-/simplify-6.5.0.tgz",
-            "integrity": "sha512-USas3QqffPHUY184dwQdP8qsvcVH/PWBYdXY5am7YTBACaQOMAlf6AKJs9FT8jiO6fQpxfgxuEtwmox+pBtlOg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/clean-coords": "^6.5.0",
                 "@turf/clone": "^6.5.0",
@@ -9009,8 +8384,7 @@
         },
         "node_modules/@turf/square": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/square/-/square-6.5.0.tgz",
-            "integrity": "sha512-BM2UyWDmiuHCadVhHXKIx5CQQbNCpOxB6S/aCNOCLbhCeypKX5Q0Aosc5YcmCJgkwO5BERCC6Ee7NMbNB2vHmQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/distance": "^6.5.0",
                 "@turf/helpers": "^6.5.0"
@@ -9021,8 +8395,7 @@
         },
         "node_modules/@turf/square-grid": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/square-grid/-/square-grid-6.5.0.tgz",
-            "integrity": "sha512-mlR0ayUdA+L4c9h7p4k3pX6gPWHNGuZkt2c5II1TJRmhLkW2557d6b/Vjfd1z9OVaajb1HinIs1FMSAPXuuUrA==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/rectangle-grid": "^6.5.0"
@@ -9033,8 +8406,7 @@
         },
         "node_modules/@turf/standard-deviational-ellipse": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/standard-deviational-ellipse/-/standard-deviational-ellipse-6.5.0.tgz",
-            "integrity": "sha512-02CAlz8POvGPFK2BKK8uHGUk/LXb0MK459JVjKxLC2yJYieOBTqEbjP0qaWhiBhGzIxSMaqe8WxZ0KvqdnstHA==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/center-mean": "^6.5.0",
                 "@turf/ellipse": "^6.5.0",
@@ -9049,8 +8421,7 @@
         },
         "node_modules/@turf/tag": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/tag/-/tag-6.5.0.tgz",
-            "integrity": "sha512-XwlBvrOV38CQsrNfrxvBaAPBQgXMljeU0DV8ExOyGM7/hvuGHJw3y8kKnQ4lmEQcmcrycjDQhP7JqoRv8vFssg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/boolean-point-in-polygon": "^6.5.0",
                 "@turf/clone": "^6.5.0",
@@ -9063,8 +8434,7 @@
         },
         "node_modules/@turf/tesselate": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/tesselate/-/tesselate-6.5.0.tgz",
-            "integrity": "sha512-M1HXuyZFCfEIIKkglh/r5L9H3c5QTEsnMBoZOFQiRnGPGmJWcaBissGb7mTFX2+DKE7FNWXh4TDnZlaLABB0dQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "earcut": "^2.0.0"
@@ -9075,8 +8445,7 @@
         },
         "node_modules/@turf/tin": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/tin/-/tin-6.5.0.tgz",
-            "integrity": "sha512-YLYikRzKisfwj7+F+Tmyy/LE3d2H7D4kajajIfc9mlik2+esG7IolsX/+oUz1biguDYsG0DUA8kVYXDkobukfg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0"
             },
@@ -9086,8 +8455,7 @@
         },
         "node_modules/@turf/transform-rotate": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/transform-rotate/-/transform-rotate-6.5.0.tgz",
-            "integrity": "sha512-A2Ip1v4246ZmpssxpcL0hhiVBEf4L8lGnSPWTgSv5bWBEoya2fa/0SnFX9xJgP40rMP+ZzRaCN37vLHbv1Guag==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/centroid": "^6.5.0",
                 "@turf/clone": "^6.5.0",
@@ -9104,8 +8472,7 @@
         },
         "node_modules/@turf/transform-scale": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/transform-scale/-/transform-scale-6.5.0.tgz",
-            "integrity": "sha512-VsATGXC9rYM8qTjbQJ/P7BswKWXHdnSJ35JlV4OsZyHBMxJQHftvmZJsFbOqVtQnIQIzf2OAly6rfzVV9QLr7g==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "^6.5.0",
                 "@turf/center": "^6.5.0",
@@ -9124,8 +8491,7 @@
         },
         "node_modules/@turf/transform-translate": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/transform-translate/-/transform-translate-6.5.0.tgz",
-            "integrity": "sha512-NABLw5VdtJt/9vSstChp93pc6oel4qXEos56RBMsPlYB8hzNTEKYtC146XJvyF4twJeeYS8RVe1u7KhoFwEM5w==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/clone": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -9139,8 +8505,7 @@
         },
         "node_modules/@turf/triangle-grid": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/triangle-grid/-/triangle-grid-6.5.0.tgz",
-            "integrity": "sha512-2jToUSAS1R1htq4TyLQYPTIsoy6wg3e3BQXjm2rANzw4wPQCXGOxrur1Fy9RtzwqwljlC7DF4tg0OnWr8RjmfA==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/distance": "^6.5.0",
                 "@turf/helpers": "^6.5.0",
@@ -9152,8 +8517,7 @@
         },
         "node_modules/@turf/truncate": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/truncate/-/truncate-6.5.0.tgz",
-            "integrity": "sha512-pFxg71pLk+eJj134Z9yUoRhIi8vqnnKvCYwdT4x/DQl/19RVdq1tV3yqOT3gcTQNfniteylL5qV1uTBDV5sgrg==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/meta": "^6.5.0"
@@ -9164,8 +8528,7 @@
         },
         "node_modules/@turf/turf": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/turf/-/turf-6.5.0.tgz",
-            "integrity": "sha512-ipMCPnhu59bh92MNt8+pr1VZQhHVuTMHklciQURo54heoxRzt1neNYZOBR6jdL+hNsbDGAECMuIpAutX+a3Y+w==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/along": "^6.5.0",
                 "@turf/angle": "^6.5.0",
@@ -9279,8 +8642,7 @@
         },
         "node_modules/@turf/union": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.5.0.tgz",
-            "integrity": "sha512-igYWCwP/f0RFHIlC2c0SKDuM/ObBaqSljI3IdV/x71805QbIvY/BYGcJdyNcgEA6cylIGl/0VSlIbpJHZ9ldhw==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0",
@@ -9292,8 +8654,7 @@
         },
         "node_modules/@turf/unkink-polygon": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/unkink-polygon/-/unkink-polygon-6.5.0.tgz",
-            "integrity": "sha512-8QswkzC0UqKmN1DT6HpA9upfa1HdAA5n6bbuzHy8NJOX8oVizVAqfEPY0wqqTgboDjmBR4yyImsdPGUl3gZ8JQ==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/area": "^6.5.0",
                 "@turf/boolean-point-in-polygon": "^6.5.0",
@@ -9307,8 +8668,7 @@
         },
         "node_modules/@turf/voronoi": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/@turf/voronoi/-/voronoi-6.5.0.tgz",
-            "integrity": "sha512-C/xUsywYX+7h1UyNqnydHXiun4UPjK88VDghtoRypR9cLlb7qozkiLRphQxxsCM0KxyxpVPHBVQXdAL3+Yurow==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/helpers": "^6.5.0",
                 "@turf/invariant": "^6.5.0",
@@ -9320,56 +8680,48 @@
         },
         "node_modules/@types/adm-zip": {
             "version": "0.5.5",
-            "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.5.tgz",
-            "integrity": "sha512-YCGstVMjc4LTY5uK9/obvxBya93axZOVOyf2GSUulADzmLhYE45u2nAssCs/fWBs1Ifq5Vat75JTPwd5XZoPJw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/animejs": {
             "version": "3.1.12",
-            "resolved": "https://registry.npmjs.org/@types/animejs/-/animejs-3.1.12.tgz",
-            "integrity": "sha512-fpdH+ZtlO0kqjTOqRaBdsEmvpRNOayI8k4EVkEtitL5l6wducDOXk0rgQgfZqWf/ZX9DzXrHf257S5i9xTcISQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/archiver": {
             "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-6.0.2.tgz",
-            "integrity": "sha512-KmROQqbQzKGuaAbmK+ZcytkJ51+YqDa7NmbXjmtC5YBLSyQYo21YaUnQ3HbaPFKL1ooo6RQ6OPYPIDyxfpDDXw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/readdir-glob": "*"
             }
         },
         "node_modules/@types/async": {
             "version": "3.2.24",
-            "resolved": "https://registry.npmjs.org/@types/async/-/async-3.2.24.tgz",
-            "integrity": "sha512-8iHVLHsCCOBKjCF2KwFe0p9Z3rfM9mL+sSP8btyR5vTjJRAqpBYD28/ZLgXPf0pjG1VxOvtCV/BgXkQbpSe8Hw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/bcrypt-nodejs": {
             "version": "0.0.31",
-            "resolved": "https://registry.npmjs.org/@types/bcrypt-nodejs/-/bcrypt-nodejs-0.0.31.tgz",
-            "integrity": "sha512-0J4tuZnKpVyHc5EIKTeIUIo6yBSjt7F004mifvqGPAQsETho7iHubjyBD8p1YENNWNYb1vfPhgjCsRH8zy84XQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/bezier-js": {
             "version": "4.1.3",
-            "resolved": "https://registry.npmjs.org/@types/bezier-js/-/bezier-js-4.1.3.tgz",
-            "integrity": "sha512-FNVVCu5mx/rJCWBxLTcL7oOajmGtWtBTDjq6DSUWUI12GeePivrZZXz+UgE0D6VYsLEjvExRO03z4hVtu3pTEQ=="
+            "license": "MIT"
         },
         "node_modules/@types/bluebird": {
             "version": "3.5.42",
-            "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.42.tgz",
-            "integrity": "sha512-Jhy+MWRlro6UjVi578V/4ZGNfeCOcNCp0YaFNIUGFKlImowqwb1O/22wDVk3FDGMLqxdpOV3qQHD5fPEH4hK6A==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/body-parser": {
             "version": "1.19.5",
-            "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
-            "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/connect": "*",
                 "@types/node": "*"
@@ -9377,69 +8729,61 @@
         },
         "node_modules/@types/bonjour": {
             "version": "3.5.13",
-            "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz",
-            "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/brotli": {
             "version": "1.3.4",
-            "resolved": "https://registry.npmjs.org/@types/brotli/-/brotli-1.3.4.tgz",
-            "integrity": "sha512-cKYjgaS2DMdCKF7R0F5cgx1nfBYObN2ihIuPGQ4/dlIY6RpV7OWNwe9L8V4tTVKL2eZqOkNM9FM/rgTvLf4oXw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/caseless": {
             "version": "0.12.5",
-            "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz",
-            "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/chai": {
             "version": "4.3.16",
-            "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/color": {
             "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/@types/color/-/color-3.0.6.tgz",
-            "integrity": "sha512-NMiNcZFRUAiUUCCf7zkAelY8eV3aKqfbzyFQlXpPIEeoNDbsEHGpb854V3gzTsGKYj830I5zPuOwU/TP5/cW6A==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/color-convert": "*"
             }
         },
         "node_modules/@types/color-convert": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.3.tgz",
-            "integrity": "sha512-2Q6wzrNiuEvYxVQqhh7sXM2mhIhvZR/Paq4FdsQkOMgWsCIkKvSGj8Le1/XalulrmgOzPMqNa0ix+ePY4hTrfg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/color-name": "*"
             }
         },
         "node_modules/@types/color-name": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-hulKeREDdLFesGQjl96+4aoJSHY5b2GRjagzzcqCfIrWhe5vkCqIvrLbqzBaI1q94Vg8DNJZZqTR5ocdWmWclg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/connect": {
             "version": "3.4.38",
-            "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
-            "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/connect-history-api-fallback": {
             "version": "1.5.4",
-            "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz",
-            "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/express-serve-static-core": "*",
                 "@types/node": "*"
@@ -9447,22 +8791,20 @@
         },
         "node_modules/@types/cookie": {
             "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
-            "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
+            "license": "MIT"
         },
         "node_modules/@types/cookie-parser": {
             "version": "1.4.7",
-            "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.7.tgz",
-            "integrity": "sha512-Fvuyi354Z+uayxzIGCwYTayFKocfV7TuDYZClCdIP9ckhvAu/ixDtCB6qx2TT0FKjPLf1f3P/J1rgf6lPs64mw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/express": "*"
             }
         },
         "node_modules/@types/cookie-session": {
             "version": "2.0.49",
-            "integrity": "sha512-4E/bBjlqLhU5l4iGPR+NkVJH593hpNsT4dC3DJDr+ODm6Qpe13kZQVkezRIb+TYDXaBMemS3yLQ+0leba3jlkQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/express": "*",
                 "@types/keygrip": "*"
@@ -9470,17 +8812,15 @@
         },
         "node_modules/@types/cors": {
             "version": "2.8.17",
-            "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
-            "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/d3": {
             "version": "7.4.3",
-            "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz",
-            "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/d3-array": "*",
                 "@types/d3-axis": "*",
@@ -9516,42 +8856,36 @@
         },
         "node_modules/@types/d3-array": {
             "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
-            "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg=="
+            "license": "MIT"
         },
         "node_modules/@types/d3-axis": {
             "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz",
-            "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/d3-selection": "*"
             }
         },
         "node_modules/@types/d3-brush": {
             "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz",
-            "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/d3-selection": "*"
             }
         },
         "node_modules/@types/d3-chord": {
             "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz",
-            "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/d3-color": {
             "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
-            "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="
+            "license": "MIT"
         },
         "node_modules/@types/d3-contour": {
             "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz",
-            "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/d3-array": "*",
                 "@types/geojson": "*"
@@ -9559,159 +8893,135 @@
         },
         "node_modules/@types/d3-delaunay": {
             "version": "6.0.4",
-            "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
-            "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/d3-dispatch": {
             "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz",
-            "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/d3-drag": {
             "version": "3.0.7",
-            "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz",
-            "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/d3-selection": "*"
             }
         },
         "node_modules/@types/d3-dsv": {
             "version": "3.0.7",
-            "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz",
-            "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/d3-ease": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
-            "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="
+            "license": "MIT"
         },
         "node_modules/@types/d3-fetch": {
             "version": "3.0.7",
-            "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz",
-            "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/d3-dsv": "*"
             }
         },
         "node_modules/@types/d3-force": {
             "version": "3.0.9",
-            "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.9.tgz",
-            "integrity": "sha512-IKtvyFdb4Q0LWna6ymywQsEYjK/94SGhPrMfEr1TIc5OBeziTi+1jcCvttts8e0UWZIxpasjnQk9MNk/3iS+kA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/d3-format": {
             "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz",
-            "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/d3-geo": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz",
-            "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/geojson": "*"
             }
         },
         "node_modules/@types/d3-hierarchy": {
             "version": "3.1.7",
-            "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz",
-            "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/d3-interpolate": {
             "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
-            "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/d3-color": "*"
             }
         },
         "node_modules/@types/d3-path": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz",
-            "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ=="
+            "license": "MIT"
         },
         "node_modules/@types/d3-polygon": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz",
-            "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/d3-quadtree": {
             "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz",
-            "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/d3-random": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz",
-            "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/d3-scale": {
             "version": "4.0.8",
-            "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz",
-            "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/d3-time": "*"
             }
         },
         "node_modules/@types/d3-scale-chromatic": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz",
-            "integrity": "sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw=="
+            "license": "MIT"
         },
         "node_modules/@types/d3-selection": {
             "version": "3.0.10",
-            "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz",
-            "integrity": "sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg=="
+            "license": "MIT"
         },
         "node_modules/@types/d3-shape": {
             "version": "3.1.6",
-            "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz",
-            "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/d3-path": "*"
             }
         },
         "node_modules/@types/d3-time": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz",
-            "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw=="
+            "license": "MIT"
         },
         "node_modules/@types/d3-time-format": {
             "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz",
-            "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/d3-timer": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
-            "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="
+            "license": "MIT"
         },
         "node_modules/@types/d3-transition": {
             "version": "3.0.8",
-            "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz",
-            "integrity": "sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/d3-selection": "*"
             }
         },
         "node_modules/@types/d3-zoom": {
             "version": "3.0.8",
-            "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz",
-            "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/d3-interpolate": "*",
                 "@types/d3-selection": "*"
@@ -9719,21 +9029,18 @@
         },
         "node_modules/@types/debug": {
             "version": "4.1.12",
-            "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
-            "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/ms": "*"
             }
         },
         "node_modules/@types/dom-speech-recognition": {
             "version": "0.0.4",
-            "resolved": "https://registry.npmjs.org/@types/dom-speech-recognition/-/dom-speech-recognition-0.0.4.tgz",
-            "integrity": "sha512-zf2GwV/G6TdaLwpLDcGTIkHnXf8JEf/viMux+khqKQKDa8/8BAUtXXZS563GnvJ4Fg0PBLGAaFf2GekEVSZ6GQ=="
+            "license": "MIT"
         },
         "node_modules/@types/eslint": {
             "version": "8.56.10",
-            "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
-            "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/estree": "*",
                 "@types/json-schema": "*"
@@ -9741,8 +9048,7 @@
         },
         "node_modules/@types/eslint-scope": {
             "version": "3.7.7",
-            "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
-            "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/eslint": "*",
                 "@types/estree": "*"
@@ -9750,31 +9056,27 @@
         },
         "node_modules/@types/estree": {
             "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
-            "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
+            "license": "MIT"
         },
         "node_modules/@types/estree-jsx": {
             "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
-            "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/estree": "*"
             }
         },
         "node_modules/@types/exif": {
             "version": "0.6.5",
-            "resolved": "https://registry.npmjs.org/@types/exif/-/exif-0.6.5.tgz",
-            "integrity": "sha512-MDOzgEwI/DH6MNsGEZYy4MCVMS4OjnOiZoji1gVzUtA7RvMmvC8V5rbWbDZoUl0A+KhZwToTSwUB8OWQVXDhtA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/express": {
             "version": "4.17.21",
-            "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
-            "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/body-parser": "*",
                 "@types/express-serve-static-core": "^4.17.33",
@@ -9784,9 +9086,8 @@
         },
         "node_modules/@types/express-serve-static-core": {
             "version": "4.19.1",
-            "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.1.tgz",
-            "integrity": "sha512-ej0phymbFLoCB26dbbq5PGScsf2JAJ4IJHjG10LalgUV36XKTmA4GdA+PVllKvRk0sEKt64X8975qFnkSi0hqA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*",
                 "@types/qs": "*",
@@ -9796,50 +9097,43 @@
         },
         "node_modules/@types/express-session": {
             "version": "1.18.0",
-            "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.18.0.tgz",
-            "integrity": "sha512-27JdDRgor6PoYlURY+Y5kCakqp5ulC0kmf7y+QwaY+hv9jEFuQOThgkjyA53RP3jmKuBsH5GR6qEfFmvb8mwOA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/express": "*"
             }
         },
         "node_modules/@types/file-saver": {
             "version": "2.0.7",
-            "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz",
-            "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/find-in-files": {
             "version": "0.5.3",
-            "resolved": "https://registry.npmjs.org/@types/find-in-files/-/find-in-files-0.5.3.tgz",
-            "integrity": "sha512-IGKtSn0Lonfx3HdK6KMcfd5GUc1xdeLtjW1n7ZSA5Tmn1n2gj878q6IC0s4MbF9KtBpXIRqjRQxBzi2kF4WvGw=="
+            "license": "MIT"
         },
         "node_modules/@types/fluent-ffmpeg": {
             "version": "2.1.24",
-            "resolved": "https://registry.npmjs.org/@types/fluent-ffmpeg/-/fluent-ffmpeg-2.1.24.tgz",
-            "integrity": "sha512-g5oQO8Jgi2kFS3tTub7wLvfLztr1s8tdXmRd8PiL/hLMLzTIAyMR2sANkTggM/rdEDAg3d63nYRRVepwBiCw5A==",
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/formidable": {
             "version": "3.4.5",
-            "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-3.4.5.tgz",
-            "integrity": "sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/geojson": {
             "version": "7946.0.14",
-            "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz",
-            "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg=="
+            "license": "MIT"
         },
         "node_modules/@types/glob": {
             "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
-            "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/minimatch": "*",
                 "@types/node": "*"
@@ -9847,95 +9141,82 @@
         },
         "node_modules/@types/google-maps": {
             "version": "3.2.6",
-            "resolved": "https://registry.npmjs.org/@types/google-maps/-/google-maps-3.2.6.tgz",
-            "integrity": "sha512-ySOadZErcnCnNG+Zkmv5n+QG9DyTt7Mkx5Yk1dTjjNPtD8ByFaf+klZ/CxzgYcweduWEijTP0ASkANl57D0PRQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/google.maps": "*"
             }
         },
         "node_modules/@types/google.maps": {
             "version": "3.55.2",
-            "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.55.2.tgz",
-            "integrity": "sha512-JcTwzkxskR8DN/nnX96Pie3gGN3WHiPpuxzuQ9z3516o1bB243d8w8DHUJ8BohuzoT1o3HUFta2ns/mkZC8KRw=="
+            "license": "MIT"
         },
         "node_modules/@types/hast": {
             "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
-            "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/@types/howler": {
             "version": "2.2.11",
-            "resolved": "https://registry.npmjs.org/@types/howler/-/howler-2.2.11.tgz",
-            "integrity": "sha512-7aBoUL6RbSIrqKnpEgfa1wSNUBK06mn08siP2QI0zYk7MXfEJAaORc4tohamQYqCqVESoDyRWSdQn2BOKWj2Qw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/html-minifier-terser": {
             "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
-            "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg=="
+            "license": "MIT"
         },
         "node_modules/@types/html-to-text": {
             "version": "9.0.4",
-            "resolved": "https://registry.npmjs.org/@types/html-to-text/-/html-to-text-9.0.4.tgz",
-            "integrity": "sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/http-cache-semantics": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
-            "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="
+            "license": "MIT"
         },
         "node_modules/@types/http-errors": {
             "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
-            "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/http-proxy": {
             "version": "1.17.14",
-            "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz",
-            "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/istanbul-lib-coverage": {
             "version": "2.0.6",
-            "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
-            "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="
+            "license": "MIT"
         },
         "node_modules/@types/istanbul-lib-report": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
-            "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/istanbul-lib-coverage": "*"
             }
         },
         "node_modules/@types/istanbul-reports": {
             "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
-            "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/istanbul-lib-report": "*"
             }
         },
         "node_modules/@types/jquery": {
             "version": "3.5.30",
-            "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/sizzle": "*"
             }
         },
         "node_modules/@types/jsdom": {
             "version": "16.2.15",
-            "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz",
-            "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*",
                 "@types/parse5": "^6.0.3",
@@ -9944,90 +9225,78 @@
         },
         "node_modules/@types/json-schema": {
             "version": "7.0.15",
-            "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
-            "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
+            "license": "MIT"
         },
         "node_modules/@types/json5": {
             "version": "0.0.29",
-            "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-            "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/katex": {
             "version": "0.16.7",
-            "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz",
-            "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ=="
+            "license": "MIT"
         },
         "node_modules/@types/keygrip": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz",
-            "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/libxmljs": {
             "version": "0.18.13",
-            "integrity": "sha512-0hBHqUYsKdEe15ZKDF/iihdhCLpaYYJ8jhEZMQoivGMkYUfUOXlKStjzs1NyV8kOyFCWZtFcddmjR07dM9FYug==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/lodash": {
             "version": "4.17.4",
-            "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/mapbox-gl": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/@types/mapbox-gl/-/mapbox-gl-3.1.0.tgz",
-            "integrity": "sha512-hI6cQDjw1bkJw7MC/eHMqq5TWUamLwsujnUUeiIX2KDRjxRNSYMjnHz07+LATz9I9XIsKumOtUz4gRYnZOJ/FA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/geojson": "*"
             }
         },
         "node_modules/@types/mdast": {
             "version": "3.0.15",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz",
-            "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^2"
             }
         },
         "node_modules/@types/mime": {
             "version": "1.3.5",
-            "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
-            "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/minimatch": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
-            "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/mocha": {
             "version": "10.0.6",
-            "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz",
-            "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/ms": {
             "version": "0.7.34",
-            "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
-            "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
+            "license": "MIT"
         },
         "node_modules/@types/node": {
             "version": "20.12.12",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz",
-            "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==",
+            "license": "MIT",
             "dependencies": {
                 "undici-types": "~5.26.4"
             }
         },
         "node_modules/@types/node-fetch": {
             "version": "2.6.11",
-            "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz",
-            "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==",
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*",
                 "form-data": "^4.0.0"
@@ -10035,53 +9304,48 @@
         },
         "node_modules/@types/node-forge": {
             "version": "1.3.11",
-            "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
-            "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/nodemailer": {
             "version": "6.4.15",
-            "integrity": "sha512-0EBJxawVNjPkng1zm2vopRctuWVCxk34JcIlRuXSf54habUWdz1FB7wHDqOqvDa8Mtpt0Q3LTXQkAs2LNyK5jQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/oauth": {
             "version": "0.9.5",
-            "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.5.tgz",
-            "integrity": "sha512-+oQ3C2Zx6ambINOcdIARF5Z3Tu3x//HipE889/fqo3sgpQZbe9c6ExdQFtN6qlhpR7p83lTZfPJt0tCAW29dog==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/parse-json": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
-            "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="
+            "license": "MIT"
         },
         "node_modules/@types/parse5": {
             "version": "6.0.3",
-            "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
-            "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g=="
+            "license": "MIT"
         },
         "node_modules/@types/passport": {
             "version": "1.0.16",
-            "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.16.tgz",
-            "integrity": "sha512-FD0qD5hbPWQzaM0wHUnJ/T0BBCJBxCeemtnCwc/ThhTg3x9jfrAcRUmj5Dopza+MfFS9acTe3wk7rcVnRIp/0A==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/express": "*"
             }
         },
         "node_modules/@types/passport-google-oauth20": {
             "version": "2.0.16",
-            "integrity": "sha512-ayXK2CJ7uVieqhYOc6k/pIr5pcQxOLB6kBev+QUGS7oEZeTgIs1odDobXRqgfBPvXzl0wXCQHftV5220czZCPA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/express": "*",
                 "@types/passport": "*",
@@ -10090,9 +9354,8 @@
         },
         "node_modules/@types/passport-local": {
             "version": "1.0.38",
-            "resolved": "https://registry.npmjs.org/@types/passport-local/-/passport-local-1.0.38.tgz",
-            "integrity": "sha512-nsrW4A963lYE7lNTv9cr5WmiUD1ibYJvWrpE13oxApFsRt77b0RdtZvKbCdNIY4v/QZ6TRQWaDDEwV1kCTmcXg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/express": "*",
                 "@types/passport": "*",
@@ -10101,9 +9364,8 @@
         },
         "node_modules/@types/passport-oauth2": {
             "version": "1.4.16",
-            "resolved": "https://registry.npmjs.org/@types/passport-oauth2/-/passport-oauth2-1.4.16.tgz",
-            "integrity": "sha512-Sdr0rpAdkiidUOtyaapGgvXyMjqYlMTFHRy7gtJtzr0/ysEIa72N3j2FSHIRc14h29g1+dzDl8IW2WT2Mu29vQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/express": "*",
                 "@types/oauth": "*",
@@ -10112,9 +9374,8 @@
         },
         "node_modules/@types/passport-strategy": {
             "version": "0.2.38",
-            "resolved": "https://registry.npmjs.org/@types/passport-strategy/-/passport-strategy-0.2.38.tgz",
-            "integrity": "sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/express": "*",
                 "@types/passport": "*"
@@ -10122,39 +9383,33 @@
         },
         "node_modules/@types/pdf-parse": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@types/pdf-parse/-/pdf-parse-1.1.4.tgz",
-            "integrity": "sha512-+gbBHbNCVGGYw1S9lAIIvrHW47UYOhMIFUsJcMkMrzy1Jf0vulBN3XQIjPgnoOXveMuHnF3b57fXROnY/Or7eg=="
+            "license": "MIT"
         },
         "node_modules/@types/prop-types": {
             "version": "15.7.12",
-            "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
-            "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q=="
+            "license": "MIT"
         },
         "node_modules/@types/qs": {
             "version": "6.9.15",
-            "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz",
-            "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/range-parser": {
             "version": "1.2.7",
-            "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
-            "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/rc-switch": {
             "version": "1.9.5",
-            "resolved": "https://registry.npmjs.org/@types/rc-switch/-/rc-switch-1.9.5.tgz",
-            "integrity": "sha512-pah8pI9LwjppjzD2rAd2p9AdWxCoQzKYff0zCIHAiVpAxUI60U9vmNVbosunpEmOvbzaChhRnWgeWwTRweLAgA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/react": "*"
             }
         },
         "node_modules/@types/react": {
             "version": "18.3.3",
-            "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
-            "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/prop-types": "*",
                 "csstype": "^3.0.2"
@@ -10162,18 +9417,16 @@
         },
         "node_modules/@types/react-autosuggest": {
             "version": "10.1.11",
-            "resolved": "https://registry.npmjs.org/@types/react-autosuggest/-/react-autosuggest-10.1.11.tgz",
-            "integrity": "sha512-lneJrX/5TZJzKHPJ6UuUjsh9OfeyQHKYEVHyBh5Y7LeRbCZxyIsjBmpxdPy1iH++Ger0qcyW+phPpYH+g3naLA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/react": "*"
             }
         },
         "node_modules/@types/react-color": {
             "version": "3.0.12",
-            "resolved": "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.12.tgz",
-            "integrity": "sha512-pr3uKE3lSvf7GFo1Rn2K3QktiZQFFrSgSGJ/3iMvSOYWt2pPAJ97rVdVfhWxYJZ8prAEXzoP2XX//3qGSQgu7Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/react": "*",
                 "@types/reactcss": "*"
@@ -10181,9 +9434,8 @@
         },
         "node_modules/@types/react-datepicker": {
             "version": "6.2.0",
-            "resolved": "https://registry.npmjs.org/@types/react-datepicker/-/react-datepicker-6.2.0.tgz",
-            "integrity": "sha512-+JtO4Fm97WLkJTH8j8/v3Ldh7JCNRwjMYjRaKh4KHH0M3jJoXtwiD3JBCsdlg3tsFIw9eQSqyAPeVDN2H2oM9Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@floating-ui/react": "^0.26.2",
                 "@types/react": "*",
@@ -10192,79 +9444,71 @@
         },
         "node_modules/@types/react-dom": {
             "version": "18.3.0",
-            "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/react": "*"
             }
         },
         "node_modules/@types/react-grid-layout": {
             "version": "1.3.5",
-            "resolved": "https://registry.npmjs.org/@types/react-grid-layout/-/react-grid-layout-1.3.5.tgz",
-            "integrity": "sha512-WH/po1gcEcoR6y857yAnPGug+ZhkF4PaTUxgAbwfeSH/QOgVSakKHBXoPGad/sEznmkiaK3pqHk+etdWisoeBQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/react": "*"
             }
         },
         "node_modules/@types/react-measure": {
             "version": "2.0.12",
-            "resolved": "https://registry.npmjs.org/@types/react-measure/-/react-measure-2.0.12.tgz",
-            "integrity": "sha512-Y6V11CH6bU7RhqrIdENPwEUZlPXhfXNGylMNnGwq5TAEs2wDoBA3kSVVM/EQ8u72sz5r9ja+7W8M8PIVcS841Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/react": "*"
             }
         },
         "node_modules/@types/react-reconciler": {
             "version": "0.28.8",
-            "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz",
-            "integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/react": "*"
             }
         },
         "node_modules/@types/react-speech-recognition": {
             "version": "3.9.5",
-            "resolved": "https://registry.npmjs.org/@types/react-speech-recognition/-/react-speech-recognition-3.9.5.tgz",
-            "integrity": "sha512-m3Sg3Xtj/YcEUu+nLPGwI6oq1wcSblsuyAmXgBfW6Nprfmtl+A+kH4ruPzzFKnFkq6WmmRxdsLvt0nLRAAJtBw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/dom-speech-recognition": "*"
             }
         },
         "node_modules/@types/react-transition-group": {
             "version": "4.4.10",
-            "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz",
-            "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==",
+            "license": "MIT",
             "dependencies": {
                 "@types/react": "*"
             }
         },
         "node_modules/@types/reactcss": {
             "version": "1.2.12",
-            "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.12.tgz",
-            "integrity": "sha512-BrXUQ86/wbbFiZv8h/Q1/Q1XOsaHneYmCb/tHe9+M8XBAAUc2EHfdY0DY22ZZjVSaXr5ix7j+zsqO2eGZub8lQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/react": "*"
             }
         },
         "node_modules/@types/readdir-glob": {
             "version": "1.1.5",
-            "resolved": "https://registry.npmjs.org/@types/readdir-glob/-/readdir-glob-1.1.5.tgz",
-            "integrity": "sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/request": {
             "version": "2.48.12",
-            "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz",
-            "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/caseless": "*",
                 "@types/node": "*",
@@ -10274,9 +9518,8 @@
         },
         "node_modules/@types/request-promise": {
             "version": "4.1.51",
-            "resolved": "https://registry.npmjs.org/@types/request-promise/-/request-promise-4.1.51.tgz",
-            "integrity": "sha512-qVcP9Fuzh9oaAh8oPxiSoWMFGnWKkJDknnij66vi09Yiy62bsSDqtd+fG5kIM9wLLgZsRP3Y6acqj9O/v2ZtRw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/bluebird": "*",
                 "@types/request": "*"
@@ -10284,9 +9527,8 @@
         },
         "node_modules/@types/request/node_modules/form-data": {
             "version": "2.5.1",
-            "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
-            "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "asynckit": "^0.4.0",
                 "combined-stream": "^1.0.6",
@@ -10298,20 +9540,17 @@
         },
         "node_modules/@types/retry": {
             "version": "0.12.2",
-            "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz",
-            "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/reveal": {
             "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/@types/reveal/-/reveal-4.2.0.tgz",
-            "integrity": "sha512-lhTCUrk8pU/9SWcqbLwCy/AFjCp9S2hcDGoKAIycWGcHujUrDKMXWVkOvbSWk/gohZwwfuxQxucBaqvYAM5DTQ=="
+            "license": "MIT"
         },
         "node_modules/@types/send": {
             "version": "0.17.4",
-            "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
-            "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/mime": "^1",
                 "@types/node": "*"
@@ -10319,18 +9558,16 @@
         },
         "node_modules/@types/serve-index": {
             "version": "1.9.4",
-            "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz",
-            "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/express": "*"
             }
         },
         "node_modules/@types/serve-static": {
             "version": "1.15.7",
-            "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
-            "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/http-errors": "*",
                 "@types/node": "*",
@@ -10339,9 +9576,8 @@
         },
         "node_modules/@types/shelljs": {
             "version": "0.8.15",
-            "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.15.tgz",
-            "integrity": "sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/glob": "~7.2.0",
                 "@types/node": "*"
@@ -10349,88 +9585,75 @@
         },
         "node_modules/@types/sizzle": {
             "version": "2.3.8",
-            "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz",
-            "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/sockjs": {
             "version": "0.3.36",
-            "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz",
-            "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/strip-bom": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz",
-            "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/strip-json-comments": {
             "version": "0.0.30",
-            "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz",
-            "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/stylis": {
             "version": "4.2.5",
-            "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz",
-            "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw=="
+            "license": "MIT"
         },
         "node_modules/@types/supercluster": {
             "version": "7.1.3",
-            "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz",
-            "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/geojson": "*"
             }
         },
         "node_modules/@types/tough-cookie": {
             "version": "4.0.5",
-            "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
-            "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA=="
+            "license": "MIT"
         },
         "node_modules/@types/tunnel": {
             "version": "0.0.3",
-            "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz",
-            "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/unist": {
             "version": "2.0.10",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
-            "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
+            "license": "MIT"
         },
         "node_modules/@types/uuid": {
             "version": "9.0.8",
-            "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz",
-            "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/valid-url": {
             "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/@types/valid-url/-/valid-url-1.0.7.tgz",
-            "integrity": "sha512-tgsWVG80dM5PVEBSbXUttPJTBCOo0IKbBh4R4z/SHsC5C81A3aaUH4fsbj+JYk7fopApU/Mao1c0EWTE592TSg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@types/web": {
             "version": "0.0.143",
-            "integrity": "sha512-TazK16/OqeeqfQRB/Tv/NwzJagHbLi/w5g26FLbiFte/8LpPq6BuTyXHO/cpgwJpE6KGgFSNYb6Ap05Tz9XvCA=="
+            "license": "Apache-2.0"
         },
         "node_modules/@types/webidl-conversions": {
             "version": "7.0.3",
-            "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
-            "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="
+            "license": "MIT"
         },
         "node_modules/@types/webpack": {
             "version": "5.28.5",
-            "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.5.tgz",
-            "integrity": "sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*",
                 "tapable": "^2.2.0",
@@ -10439,8 +9662,7 @@
         },
         "node_modules/@types/webpack-hot-middleware": {
             "version": "2.25.9",
-            "resolved": "https://registry.npmjs.org/@types/webpack-hot-middleware/-/webpack-hot-middleware-2.25.9.tgz",
-            "integrity": "sha512-fad4T9VfocBjS2fZxlqkGoXoVUAjVp0EEnKBRqPwnhEEDN/FqJoFkSP5t9O1gPH75qsyG2kkT/GSUqSNTn1ZPg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/connect": "*",
                 "tapable": "^2.2.0",
@@ -10449,45 +9671,39 @@
         },
         "node_modules/@types/whatwg-url": {
             "version": "11.0.5",
-            "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz",
-            "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/webidl-conversions": "*"
             }
         },
         "node_modules/@types/ws": {
             "version": "8.5.10",
-            "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz",
-            "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/yargs": {
             "version": "17.0.32",
-            "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
-            "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
+            "license": "MIT",
             "dependencies": {
                 "@types/yargs-parser": "*"
             }
         },
         "node_modules/@types/yargs-parser": {
             "version": "21.0.3",
-            "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
-            "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="
+            "license": "MIT"
         },
         "node_modules/@types/youtube": {
             "version": "0.0.50",
-            "resolved": "https://registry.npmjs.org/@types/youtube/-/youtube-0.0.50.tgz",
-            "integrity": "sha512-d4GpH4uPYp9W07kc487tiq6V/EUHl18vZWFMbQoe4Sk9LXEWzFi/BMf9x7TI4m7/j7gU3KeX8H6M8aPBgykeLw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@typescript-eslint/eslint-plugin": {
             "version": "7.10.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.10.0.tgz",
-            "integrity": "sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@eslint-community/regexpp": "^4.10.0",
                 "@typescript-eslint/scope-manager": "7.10.0",
@@ -10518,7 +9734,7 @@
         },
         "node_modules/@typescript-eslint/parser": {
             "version": "7.13.1",
-            "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "@typescript-eslint/scope-manager": "7.13.1",
                 "@typescript-eslint/types": "7.13.1",
@@ -10544,8 +9760,7 @@
         },
         "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
             "version": "7.13.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz",
-            "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==",
+            "license": "MIT",
             "dependencies": {
                 "@typescript-eslint/types": "7.13.1",
                 "@typescript-eslint/visitor-keys": "7.13.1"
@@ -10560,8 +9775,7 @@
         },
         "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
             "version": "7.13.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz",
-            "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==",
+            "license": "MIT",
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
             },
@@ -10572,8 +9786,7 @@
         },
         "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
             "version": "7.13.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz",
-            "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "@typescript-eslint/types": "7.13.1",
                 "@typescript-eslint/visitor-keys": "7.13.1",
@@ -10599,8 +9812,7 @@
         },
         "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
             "version": "7.13.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz",
-            "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==",
+            "license": "MIT",
             "dependencies": {
                 "@typescript-eslint/types": "7.13.1",
                 "eslint-visitor-keys": "^3.4.3"
@@ -10615,8 +9827,7 @@
         },
         "node_modules/@typescript-eslint/parser/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -10626,9 +9837,8 @@
         },
         "node_modules/@typescript-eslint/scope-manager": {
             "version": "7.10.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz",
-            "integrity": "sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@typescript-eslint/types": "7.10.0",
                 "@typescript-eslint/visitor-keys": "7.10.0"
@@ -10643,9 +9853,8 @@
         },
         "node_modules/@typescript-eslint/type-utils": {
             "version": "7.10.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.10.0.tgz",
-            "integrity": "sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@typescript-eslint/typescript-estree": "7.10.0",
                 "@typescript-eslint/utils": "7.10.0",
@@ -10670,9 +9879,8 @@
         },
         "node_modules/@typescript-eslint/types": {
             "version": "7.10.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.10.0.tgz",
-            "integrity": "sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
             },
@@ -10683,9 +9891,8 @@
         },
         "node_modules/@typescript-eslint/typescript-estree": {
             "version": "7.10.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz",
-            "integrity": "sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==",
             "dev": true,
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "@typescript-eslint/types": "7.10.0",
                 "@typescript-eslint/visitor-keys": "7.10.0",
@@ -10711,9 +9918,8 @@
         },
         "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
             "dev": true,
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -10723,9 +9929,8 @@
         },
         "node_modules/@typescript-eslint/utils": {
             "version": "7.10.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.10.0.tgz",
-            "integrity": "sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.4.0",
                 "@typescript-eslint/scope-manager": "7.10.0",
@@ -10745,9 +9950,8 @@
         },
         "node_modules/@typescript-eslint/visitor-keys": {
             "version": "7.10.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz",
-            "integrity": "sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@typescript-eslint/types": "7.10.0",
                 "eslint-visitor-keys": "^3.4.3"
@@ -10762,13 +9966,11 @@
         },
         "node_modules/@ungap/structured-clone": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
-            "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
+            "license": "ISC"
         },
         "node_modules/@vue/compiler-core": {
             "version": "3.4.27",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz",
-            "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/parser": "^7.24.4",
                 "@vue/shared": "3.4.27",
@@ -10779,8 +9981,7 @@
         },
         "node_modules/@vue/compiler-dom": {
             "version": "3.4.27",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz",
-            "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==",
+            "license": "MIT",
             "dependencies": {
                 "@vue/compiler-core": "3.4.27",
                 "@vue/shared": "3.4.27"
@@ -10788,8 +9989,7 @@
         },
         "node_modules/@vue/compiler-sfc": {
             "version": "3.4.27",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz",
-            "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/parser": "^7.24.4",
                 "@vue/compiler-core": "3.4.27",
@@ -10804,8 +10004,7 @@
         },
         "node_modules/@vue/compiler-ssr": {
             "version": "3.4.27",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz",
-            "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==",
+            "license": "MIT",
             "dependencies": {
                 "@vue/compiler-dom": "3.4.27",
                 "@vue/shared": "3.4.27"
@@ -10813,13 +10012,11 @@
         },
         "node_modules/@vue/shared": {
             "version": "3.4.27",
-            "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz",
-            "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA=="
+            "license": "MIT"
         },
         "node_modules/@webassemblyjs/ast": {
             "version": "1.12.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
-            "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
+            "license": "MIT",
             "dependencies": {
                 "@webassemblyjs/helper-numbers": "1.11.6",
                 "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
@@ -10827,23 +10024,19 @@
         },
         "node_modules/@webassemblyjs/floating-point-hex-parser": {
             "version": "1.11.6",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
-            "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw=="
+            "license": "MIT"
         },
         "node_modules/@webassemblyjs/helper-api-error": {
             "version": "1.11.6",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
-            "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q=="
+            "license": "MIT"
         },
         "node_modules/@webassemblyjs/helper-buffer": {
             "version": "1.12.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
-            "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw=="
+            "license": "MIT"
         },
         "node_modules/@webassemblyjs/helper-numbers": {
             "version": "1.11.6",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
-            "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
+            "license": "MIT",
             "dependencies": {
                 "@webassemblyjs/floating-point-hex-parser": "1.11.6",
                 "@webassemblyjs/helper-api-error": "1.11.6",
@@ -10852,13 +10045,11 @@
         },
         "node_modules/@webassemblyjs/helper-wasm-bytecode": {
             "version": "1.11.6",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
-            "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA=="
+            "license": "MIT"
         },
         "node_modules/@webassemblyjs/helper-wasm-section": {
             "version": "1.12.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
-            "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
+            "license": "MIT",
             "dependencies": {
                 "@webassemblyjs/ast": "1.12.1",
                 "@webassemblyjs/helper-buffer": "1.12.1",
@@ -10868,29 +10059,25 @@
         },
         "node_modules/@webassemblyjs/ieee754": {
             "version": "1.11.6",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
-            "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
+            "license": "MIT",
             "dependencies": {
                 "@xtuc/ieee754": "^1.2.0"
             }
         },
         "node_modules/@webassemblyjs/leb128": {
             "version": "1.11.6",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
-            "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@xtuc/long": "4.2.2"
             }
         },
         "node_modules/@webassemblyjs/utf8": {
             "version": "1.11.6",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
-            "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA=="
+            "license": "MIT"
         },
         "node_modules/@webassemblyjs/wasm-edit": {
             "version": "1.12.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
-            "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
+            "license": "MIT",
             "dependencies": {
                 "@webassemblyjs/ast": "1.12.1",
                 "@webassemblyjs/helper-buffer": "1.12.1",
@@ -10904,8 +10091,7 @@
         },
         "node_modules/@webassemblyjs/wasm-gen": {
             "version": "1.12.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
-            "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
+            "license": "MIT",
             "dependencies": {
                 "@webassemblyjs/ast": "1.12.1",
                 "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
@@ -10916,8 +10102,7 @@
         },
         "node_modules/@webassemblyjs/wasm-opt": {
             "version": "1.12.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
-            "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
+            "license": "MIT",
             "dependencies": {
                 "@webassemblyjs/ast": "1.12.1",
                 "@webassemblyjs/helper-buffer": "1.12.1",
@@ -10927,8 +10112,7 @@
         },
         "node_modules/@webassemblyjs/wasm-parser": {
             "version": "1.12.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
-            "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
+            "license": "MIT",
             "dependencies": {
                 "@webassemblyjs/ast": "1.12.1",
                 "@webassemblyjs/helper-api-error": "1.11.6",
@@ -10940,8 +10124,7 @@
         },
         "node_modules/@webassemblyjs/wast-printer": {
             "version": "1.12.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
-            "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
+            "license": "MIT",
             "dependencies": {
                 "@webassemblyjs/ast": "1.12.1",
                 "@xtuc/long": "4.2.2"
@@ -10949,8 +10132,7 @@
         },
         "node_modules/@webpack-cli/configtest": {
             "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
-            "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=14.15.0"
             },
@@ -10961,8 +10143,7 @@
         },
         "node_modules/@webpack-cli/info": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
-            "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
+            "license": "MIT",
             "engines": {
                 "node": ">=14.15.0"
             },
@@ -10973,8 +10154,7 @@
         },
         "node_modules/@webpack-cli/serve": {
             "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
-            "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=14.15.0"
             },
@@ -10990,8 +10170,7 @@
         },
         "node_modules/@webscopeio/react-textarea-autocomplete": {
             "version": "4.9.2",
-            "resolved": "https://registry.npmjs.org/@webscopeio/react-textarea-autocomplete/-/react-textarea-autocomplete-4.9.2.tgz",
-            "integrity": "sha512-9l5lbyA709d5HHvI/COflSnblBJeYGxB2/0ghP3m3YViLzXRMzJwaXqnqz6oA96y7QdR3pQWYtVmkUKA0AUVAA==",
+            "license": "MIT",
             "dependencies": {
                 "custom-event": "^1.0.1",
                 "textarea-caret": "3.0.2"
@@ -11004,28 +10183,23 @@
         },
         "node_modules/@webscopeio/react-textarea-autocomplete/node_modules/textarea-caret": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/textarea-caret/-/textarea-caret-3.0.2.tgz",
-            "integrity": "sha512-gRzeti2YS4did7UJnPQ47wrjD+vp+CJIe9zbsu0bJ987d8QVLvLNG9757rqiQTIy4hGIeFauTTJt5Xkn51UkXg=="
+            "license": "MIT"
         },
         "node_modules/@xtuc/ieee754": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-            "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
+            "license": "BSD-3-Clause"
         },
         "node_modules/@xtuc/long": {
             "version": "4.2.2",
-            "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
-            "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
+            "license": "Apache-2.0"
         },
         "node_modules/abbrev": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-            "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+            "license": "ISC"
         },
         "node_modules/abort-controller": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
-            "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+            "license": "MIT",
             "dependencies": {
                 "event-target-shim": "^5.0.0"
             },
@@ -11035,8 +10209,7 @@
         },
         "node_modules/accepts": {
             "version": "1.3.8",
-            "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
-            "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+            "license": "MIT",
             "dependencies": {
                 "mime-types": "~2.1.34",
                 "negotiator": "0.6.3"
@@ -11047,8 +10220,7 @@
         },
         "node_modules/acorn": {
             "version": "8.11.3",
-            "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
-            "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+            "license": "MIT",
             "bin": {
                 "acorn": "bin/acorn"
             },
@@ -11058,40 +10230,36 @@
         },
         "node_modules/acorn-import-assertions": {
             "version": "1.9.0",
-            "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
-            "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+            "license": "MIT",
             "peerDependencies": {
                 "acorn": "^8"
             }
         },
         "node_modules/acorn-jsx": {
             "version": "5.3.2",
-            "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-            "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+            "license": "MIT",
             "peerDependencies": {
                 "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
             }
         },
         "node_modules/acorn-walk": {
             "version": "8.3.2",
-            "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
-            "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=0.4.0"
             }
         },
         "node_modules/adm-zip": {
             "version": "0.5.12",
-            "integrity": "sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.0"
             }
         },
         "node_modules/agent-base": {
             "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
-            "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "4"
             },
@@ -11101,8 +10269,7 @@
         },
         "node_modules/agentkeepalive": {
             "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
-            "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
+            "license": "MIT",
             "dependencies": {
                 "humanize-ms": "^1.2.1"
             },
@@ -11112,8 +10279,7 @@
         },
         "node_modules/aggregate-error": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
-            "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+            "license": "MIT",
             "dependencies": {
                 "clean-stack": "^2.0.0",
                 "indent-string": "^4.0.0"
@@ -11124,8 +10290,7 @@
         },
         "node_modules/ajv": {
             "version": "6.12.6",
-            "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-            "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+            "license": "MIT",
             "dependencies": {
                 "fast-deep-equal": "^3.1.1",
                 "fast-json-stable-stringify": "^2.0.0",
@@ -11139,8 +10304,7 @@
         },
         "node_modules/ajv-formats": {
             "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
-            "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+            "license": "MIT",
             "dependencies": {
                 "ajv": "^8.0.0"
             },
@@ -11155,8 +10319,7 @@
         },
         "node_modules/ajv-formats/node_modules/ajv": {
             "version": "8.16.0",
-            "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
-            "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
+            "license": "MIT",
             "dependencies": {
                 "fast-deep-equal": "^3.1.3",
                 "json-schema-traverse": "^1.0.0",
@@ -11170,30 +10333,26 @@
         },
         "node_modules/ajv-formats/node_modules/json-schema-traverse": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-            "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+            "license": "MIT"
         },
         "node_modules/ajv-keywords": {
             "version": "3.5.2",
-            "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
-            "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+            "license": "MIT",
             "peerDependencies": {
                 "ajv": "^6.9.1"
             }
         },
         "node_modules/ansi-colors": {
             "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
-            "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/ansi-escape-sequences": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz",
-            "integrity": "sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw==",
+            "license": "MIT",
             "dependencies": {
                 "array-back": "^3.0.1"
             },
@@ -11203,17 +10362,15 @@
         },
         "node_modules/ansi-escape-sequences/node_modules/array-back": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
-            "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/ansi-escapes": {
             "version": "4.3.2",
-            "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
-            "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "type-fest": "^0.21.3"
             },
@@ -11226,9 +10383,8 @@
         },
         "node_modules/ansi-escapes/node_modules/type-fest": {
             "version": "0.21.3",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
-            "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
             "dev": true,
+            "license": "(MIT OR CC0-1.0)",
             "engines": {
                 "node": ">=10"
             },
@@ -11238,27 +10394,24 @@
         },
         "node_modules/ansi-html-community": {
             "version": "0.0.8",
-            "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
-            "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
             "engines": [
                 "node >= 0.8.0"
             ],
+            "license": "Apache-2.0",
             "bin": {
                 "ansi-html": "bin/ansi-html"
             }
         },
         "node_modules/ansi-regex": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-            "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/ansi-styles": {
             "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-            "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+            "license": "MIT",
             "dependencies": {
                 "color-convert": "^1.9.0"
             },
@@ -11268,13 +10421,11 @@
         },
         "node_modules/any-base": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz",
-            "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="
+            "license": "MIT"
         },
         "node_modules/anymatch": {
             "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
-            "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+            "license": "ISC",
             "dependencies": {
                 "normalize-path": "^3.0.0",
                 "picomatch": "^2.0.4"
@@ -11285,13 +10436,11 @@
         },
         "node_modules/aproba": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
-            "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
+            "license": "ISC"
         },
         "node_modules/archiver": {
             "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz",
-            "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==",
+            "license": "MIT",
             "dependencies": {
                 "archiver-utils": "^5.0.2",
                 "async": "^3.2.4",
@@ -11307,8 +10456,7 @@
         },
         "node_modules/archiver-utils": {
             "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz",
-            "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==",
+            "license": "MIT",
             "dependencies": {
                 "glob": "^10.0.0",
                 "graceful-fs": "^4.2.0",
@@ -11322,16 +10470,9 @@
                 "node": ">= 14"
             }
         },
-        "node_modules/archy": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
-            "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw=="
-        },
         "node_modules/are-we-there-yet": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
-            "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
-            "deprecated": "This package is no longer supported.",
+            "license": "ISC",
             "dependencies": {
                 "delegates": "^1.0.0",
                 "readable-stream": "^3.6.0"
@@ -11342,8 +10483,7 @@
         },
         "node_modules/are-we-there-yet/node_modules/readable-stream": {
             "version": "3.6.2",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-            "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+            "license": "MIT",
             "dependencies": {
                 "inherits": "^2.0.3",
                 "string_decoder": "^1.1.1",
@@ -11355,47 +10495,41 @@
         },
         "node_modules/are-we-there-yet/node_modules/readable-stream/node_modules/string_decoder": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-            "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+            "license": "MIT",
             "dependencies": {
                 "safe-buffer": "~5.2.0"
             }
         },
         "node_modules/arg": {
             "version": "4.1.3",
-            "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
-            "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/argparse": {
             "version": "1.0.10",
-            "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-            "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+            "license": "MIT",
             "dependencies": {
                 "sprintf-js": "~1.0.2"
             }
         },
         "node_modules/aria-query": {
             "version": "5.3.0",
-            "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
-            "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
             "dev": true,
+            "license": "Apache-2.0",
             "dependencies": {
                 "dequal": "^2.0.3"
             }
         },
         "node_modules/arr-union": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
-            "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/array-back": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
-            "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+            "license": "MIT",
             "dependencies": {
                 "typical": "^2.6.1"
             },
@@ -11405,9 +10539,8 @@
         },
         "node_modules/array-buffer-byte-length": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
-            "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.5",
                 "is-array-buffer": "^3.0.4"
@@ -11421,22 +10554,19 @@
         },
         "node_modules/array-differ": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
-            "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/array-flatten": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
-            "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+            "license": "MIT"
         },
         "node_modules/array-includes": {
             "version": "3.1.8",
-            "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
-            "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -11454,17 +10584,15 @@
         },
         "node_modules/array-union": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-            "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/array.prototype.findlast": {
             "version": "1.2.5",
-            "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
-            "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -11482,9 +10610,8 @@
         },
         "node_modules/array.prototype.findlastindex": {
             "version": "1.2.5",
-            "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
-            "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -11502,9 +10629,8 @@
         },
         "node_modules/array.prototype.flat": {
             "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
-            "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.2.0",
@@ -11520,9 +10646,8 @@
         },
         "node_modules/array.prototype.flatmap": {
             "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
-            "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.2.0",
@@ -11538,9 +10663,8 @@
         },
         "node_modules/array.prototype.toreversed": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz",
-            "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.2.0",
@@ -11550,9 +10674,8 @@
         },
         "node_modules/array.prototype.tosorted": {
             "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz",
-            "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.5",
                 "define-properties": "^1.2.1",
@@ -11563,9 +10686,8 @@
         },
         "node_modules/arraybuffer.prototype.slice": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
-            "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "array-buffer-byte-length": "^1.0.1",
                 "call-bind": "^1.0.5",
@@ -11585,29 +10707,25 @@
         },
         "node_modules/arrify": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
-            "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/asap": {
             "version": "2.0.6",
-            "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
-            "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+            "license": "MIT"
         },
         "node_modules/asn1": {
             "version": "0.2.6",
-            "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
-            "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+            "license": "MIT",
             "dependencies": {
                 "safer-buffer": "~2.1.0"
             }
         },
         "node_modules/asn1.js": {
             "version": "5.4.1",
-            "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
-            "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+            "license": "MIT",
             "dependencies": {
                 "bn.js": "^4.0.0",
                 "inherits": "^2.0.1",
@@ -11617,63 +10735,54 @@
         },
         "node_modules/assert-never": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
-            "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw=="
+            "license": "MIT"
         },
         "node_modules/assert-plus": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-            "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.8"
             }
         },
         "node_modules/assertion-error": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
-            "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/assign-symbols": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
-            "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/ast-types-flow": {
             "version": "0.0.8",
-            "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
-            "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/astral-regex": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
-            "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/async": {
             "version": "3.2.5",
-            "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
-            "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg=="
+            "license": "MIT"
         },
         "node_modules/asynckit": {
             "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-            "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+            "license": "MIT"
         },
         "node_modules/available-typed-arrays": {
             "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
-            "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+            "license": "MIT",
             "dependencies": {
                 "possible-typed-array-names": "^1.0.0"
             },
@@ -11686,29 +10795,26 @@
         },
         "node_modules/aws-sign2": {
             "version": "0.7.0",
-            "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-            "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": "*"
             }
         },
         "node_modules/aws4": {
             "version": "1.13.0",
-            "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.0.tgz",
-            "integrity": "sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g=="
+            "license": "MIT"
         },
         "node_modules/axe-core": {
             "version": "4.7.0",
-            "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz",
-            "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==",
             "dev": true,
+            "license": "MPL-2.0",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/axios": {
             "version": "1.7.2",
-            "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
+            "license": "MIT",
             "dependencies": {
                 "follow-redirects": "^1.15.6",
                 "form-data": "^4.0.0",
@@ -11717,23 +10823,20 @@
         },
         "node_modules/axobject-query": {
             "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
-            "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
             "dev": true,
+            "license": "Apache-2.0",
             "dependencies": {
                 "dequal": "^2.0.3"
             }
         },
         "node_modules/b4a": {
             "version": "1.6.6",
-            "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
-            "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg=="
+            "license": "Apache-2.0"
         },
         "node_modules/babel": {
             "version": "6.23.0",
-            "resolved": "https://registry.npmjs.org/babel/-/babel-6.23.0.tgz",
-            "integrity": "sha512-ZDcCaI8Vlct8PJ3DvmyqUz+5X2Ylz3ZuuItBe/74yXosk2dwyVo/aN7MCJ8HJzhnnJ+6yP4o+lDgG9MBe91DLA==",
             "deprecated": "In 6.x, the babel package has been deprecated in favor of babel-cli. Check https://opencollective.com/babel to support the Babel maintainers",
+            "license": "MIT",
             "bin": {
                 "babel": "lib/cli.js",
                 "babel-external-helpers": "lib/cli.js",
@@ -11742,10 +10845,9 @@
         },
         "node_modules/babel-eslint": {
             "version": "10.1.0",
-            "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
-            "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
             "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@babel/code-frame": "^7.0.0",
                 "@babel/parser": "^7.7.0",
@@ -11763,17 +10865,15 @@
         },
         "node_modules/babel-eslint/node_modules/eslint-visitor-keys": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-            "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
             "dev": true,
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/babel-loader": {
             "version": "9.1.3",
-            "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
-            "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
+            "license": "MIT",
             "dependencies": {
                 "find-cache-dir": "^4.0.0",
                 "schema-utils": "^4.0.0"
@@ -11788,8 +10888,7 @@
         },
         "node_modules/babel-plugin-macros": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
-            "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.12.5",
                 "cosmiconfig": "^7.0.0",
@@ -11802,8 +10901,7 @@
         },
         "node_modules/babel-plugin-polyfill-corejs2": {
             "version": "0.4.11",
-            "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
-            "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/compat-data": "^7.22.6",
                 "@babel/helper-define-polyfill-provider": "^0.6.2",
@@ -11815,8 +10913,7 @@
         },
         "node_modules/babel-plugin-polyfill-corejs3": {
             "version": "0.10.4",
-            "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
-            "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-define-polyfill-provider": "^0.6.1",
                 "core-js-compat": "^3.36.1"
@@ -11827,8 +10924,7 @@
         },
         "node_modules/babel-plugin-polyfill-regenerator": {
             "version": "0.6.2",
-            "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz",
-            "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/helper-define-polyfill-provider": "^0.6.2"
             },
@@ -11838,8 +10934,7 @@
         },
         "node_modules/babel-runtime": {
             "version": "6.26.0",
-            "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
-            "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
+            "license": "MIT",
             "dependencies": {
                 "core-js": "^2.4.0",
                 "regenerator-runtime": "^0.11.0"
@@ -11847,20 +10942,17 @@
         },
         "node_modules/babel-runtime/node_modules/core-js": {
             "version": "2.6.12",
-            "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
-            "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
             "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
-            "hasInstallScript": true
+            "hasInstallScript": true,
+            "license": "MIT"
         },
         "node_modules/babel-runtime/node_modules/regenerator-runtime": {
             "version": "0.11.1",
-            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-            "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+            "license": "MIT"
         },
         "node_modules/babel-walk": {
             "version": "3.0.0-canary-5",
-            "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
-            "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/types": "^7.9.6"
             },
@@ -11870,8 +10962,7 @@
         },
         "node_modules/bail": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
-            "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -11879,32 +10970,25 @@
         },
         "node_modules/balanced-match": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-            "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+            "license": "MIT"
         },
         "node_modules/bare-events": {
             "version": "2.4.2",
-            "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz",
-            "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==",
+            "license": "Apache-2.0",
             "optional": true
         },
         "node_modules/Base64": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz",
-            "integrity": "sha512-reGEWshDmTDQDsCec/HduOO9Wyj6yMOupMfhIf3ugN1TDlK2NQW4DDJSqNNtp380SNcvRfXtO8HSCQot0d0SMw=="
+            "version": "0.2.1"
         },
         "node_modules/base64-arraybuffer": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
-            "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6.0"
             }
         },
         "node_modules/base64-js": {
             "version": "1.5.1",
-            "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
-            "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
             "funding": [
                 {
                     "type": "github",
@@ -11918,52 +11002,46 @@
                     "type": "consulting",
                     "url": "https://feross.org/support"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/base64id": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
-            "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+            "license": "MIT",
             "engines": {
                 "node": "^4.5.0 || >= 5.9"
             }
         },
         "node_modules/base64url": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
-            "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.0.0"
             }
         },
         "node_modules/batch": {
             "version": "0.6.1",
-            "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
-            "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/bcrypt-nodejs": {
             "version": "0.0.3",
-            "resolved": "https://registry.npmjs.org/bcrypt-nodejs/-/bcrypt-nodejs-0.0.3.tgz",
-            "integrity": "sha512-NmTbLm867btBHCBZ222FQXkQKzecB0KG6pTXFa6NeTVZaSnLfCsx7EK2PL3J+kX8xJThUquEBbhimRCKKZX9zA==",
             "deprecated": "bcrypt-nodejs is no longer actively maintained. Please use bcrypt or bcryptjs. See https://github.com/kelektiv/node.bcrypt.js/wiki/bcrypt-vs-brypt.js to learn more about these two options"
         },
         "node_modules/bcrypt-pbkdf": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
-            "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "tweetnacl": "^0.14.3"
             }
         },
         "node_modules/before-after-hook": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
-            "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A=="
+            "license": "Apache-2.0"
         },
         "node_modules/better-react-mathjax": {
             "version": "2.0.3",
-            "integrity": "sha512-wfifT8GFOKb1TWm2+E50I6DJpLZ5kLbch283Lu043EJtwSv0XvZDjr4YfR4d2MjAhqP6SH4VjjrKgbX8R00oCQ==",
+            "license": "MIT",
             "dependencies": {
                 "mathjax-full": "^3.2.2"
             },
@@ -11973,13 +11051,11 @@
         },
         "node_modules/bezier-curve": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/bezier-curve/-/bezier-curve-1.0.0.tgz",
-            "integrity": "sha512-h6uZJ6qdFfswS1rIRericgouhTeiVi/MnH10OKtCu2IZzXa+ZcjaxRLHY4u/evRsJcxYbbiNkgWQj2Z4UIcpEQ=="
+            "license": "MIT"
         },
         "node_modules/bezier-js": {
             "version": "6.1.4",
-            "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-6.1.4.tgz",
-            "integrity": "sha512-PA0FW9ZpcHbojUCMu28z9Vg/fNkwTj5YhusSAjHHDfHDGLxJ6YUKrAN2vk1fP2MMOxVw4Oko16FMlRGVBGqLKg==",
+            "license": "MIT",
             "funding": {
                 "type": "individual",
                 "url": "https://github.com/Pomax/bezierjs/blob/master/FUNDING.md"
@@ -11987,8 +11063,7 @@
         },
         "node_modules/big.js": {
             "version": "5.2.2",
-            "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-            "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+            "license": "MIT",
             "engines": {
                 "node": "*"
             }
@@ -12003,8 +11078,7 @@
         },
         "node_modules/bin-links": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz",
-            "integrity": "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==",
+            "license": "ISC",
             "dependencies": {
                 "cmd-shim": "^6.0.0",
                 "npm-normalize-package-bin": "^3.0.0",
@@ -12017,8 +11091,7 @@
         },
         "node_modules/binary-extensions": {
             "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
-            "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             },
@@ -12028,31 +11101,26 @@
         },
         "node_modules/bingmaps-react": {
             "version": "1.2.10",
-            "resolved": "https://registry.npmjs.org/bingmaps-react/-/bingmaps-react-1.2.10.tgz",
-            "integrity": "sha512-fM887Sr6OIlo6ThmSpGfNEDssSytdnsMrbDTDs+YH/43etf0dlfcR4oaJvygy+fwn21hpP2lVvwTHUDZvGxZqA==",
+            "license": "MIT",
             "peerDependencies": {
                 "react": ">= 16.12.0"
             }
         },
         "node_modules/bluebird": {
             "version": "3.7.2",
-            "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
-            "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
+            "license": "MIT"
         },
         "node_modules/bmp-js": {
             "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz",
-            "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw=="
+            "license": "MIT"
         },
         "node_modules/bn.js": {
             "version": "4.12.0",
-            "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-            "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
+            "license": "MIT"
         },
         "node_modules/body-parser": {
             "version": "1.20.2",
-            "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
-            "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+            "license": "MIT",
             "dependencies": {
                 "bytes": "3.1.2",
                 "content-type": "~1.0.5",
@@ -12074,22 +11142,19 @@
         },
         "node_modules/body-parser/node_modules/debug": {
             "version": "2.6.9",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "license": "MIT",
             "dependencies": {
                 "ms": "2.0.0"
             }
         },
         "node_modules/body-parser/node_modules/ms": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+            "license": "MIT"
         },
         "node_modules/bonjour-service": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz",
-            "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "fast-deep-equal": "^3.1.3",
                 "multicast-dns": "^7.2.5"
@@ -12097,13 +11162,10 @@
         },
         "node_modules/boolbase": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
-            "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+            "license": "ISC"
         },
         "node_modules/bootstrap": {
             "version": "5.3.3",
-            "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz",
-            "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==",
             "funding": [
                 {
                     "type": "github",
@@ -12114,22 +11176,21 @@
                     "url": "https://opencollective.com/bootstrap"
                 }
             ],
+            "license": "MIT",
             "peerDependencies": {
                 "@popperjs/core": "^2.11.8"
             }
         },
         "node_modules/brace-expansion": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0"
             }
         },
         "node_modules/braces": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
-            "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+            "license": "MIT",
             "dependencies": {
                 "fill-range": "^7.1.1"
             },
@@ -12139,15 +11200,14 @@
         },
         "node_modules/brotli": {
             "version": "1.3.3",
-            "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
-            "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==",
+            "license": "MIT",
             "dependencies": {
                 "base64-js": "^1.1.2"
             }
         },
         "node_modules/browndash-components": {
             "version": "0.1.44",
-            "integrity": "sha512-+QYEHDqd3iauijdKiVA0jXGFkOMEKn+qb7Y2iG+VK0xAh8Fho3rAUoSMv6snfg+kMc1oMGhACzJa5XauTtvguQ==",
+            "license": "ISC",
             "dependencies": {
                 "@emotion/react": "^11.11.1",
                 "@emotion/styled": "^11.11.0",
@@ -12162,8 +11222,6 @@
         },
         "node_modules/browndash-components/node_modules/npm": {
             "version": "9.9.3",
-            "resolved": "https://registry.npmjs.org/npm/-/npm-9.9.3.tgz",
-            "integrity": "sha512-Z1l+rcQ5kYb17F3hHtO601arEpvdRYnCLtg8xo3AGtyj3IthwaraEOexI9903uANkifFbqHC8hT53KIrozWg8A==",
             "bundleDependencies": [
                 "@isaacs/string-locale-compare",
                 "@npmcli/arborist",
@@ -12236,6 +11294,14 @@
                 "which",
                 "write-file-atomic"
             ],
+            "license": "Artistic-2.0",
+            "workspaces": [
+                "docs",
+                "smoke-tests",
+                "mock-globals",
+                "mock-registry",
+                "workspaces/*"
+            ],
             "dependencies": {
                 "@isaacs/string-locale-compare": "^1.1.0",
                 "@npmcli/arborist": "^6.5.0",
@@ -13931,6 +12997,19 @@
                 "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
             }
         },
+        "node_modules/browndash-components/node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet/node_modules/readable-stream": {
+            "version": "3.6.2",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "inherits": "^2.0.3",
+                "string_decoder": "^1.1.1",
+                "util-deprecate": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 6"
+            }
+        },
         "node_modules/browndash-components/node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": {
             "version": "1.1.11",
             "inBundle": true,
@@ -14145,6 +13224,10 @@
                 "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
             }
         },
+        "node_modules/browndash-components/node_modules/npm/node_modules/node-gyp/node_modules/readable-stream": {
+            "extraneous": true,
+            "inBundle": true
+        },
         "node_modules/browndash-components/node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": {
             "version": "3.0.7",
             "inBundle": true,
@@ -14590,19 +13673,6 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/browndash-components/node_modules/npm/node_modules/readable-stream": {
-            "version": "3.6.2",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "inherits": "^2.0.3",
-                "string_decoder": "^1.1.1",
-                "util-deprecate": "^1.0.1"
-            },
-            "engines": {
-                "node": ">= 6"
-            }
-        },
         "node_modules/browndash-components/node_modules/npm/node_modules/retry": {
             "version": "0.12.0",
             "inBundle": true,
@@ -15183,27 +14253,23 @@
         },
         "node_modules/browndash-components/node_modules/react-icons": {
             "version": "4.12.0",
-            "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz",
-            "integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==",
+            "license": "MIT",
             "peerDependencies": {
                 "react": "*"
             }
         },
         "node_modules/browser-assert": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz",
-            "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ=="
+            "version": "1.2.1"
         },
         "node_modules/browser-stdout": {
             "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
-            "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
-            "dev": true
+            "dev": true,
+            "license": "ISC"
         },
         "node_modules/browserslist": {
-            "version": "4.23.0",
-            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
-            "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
+            "version": "4.23.2",
+            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
+            "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
             "funding": [
                 {
                     "type": "opencollective",
@@ -15219,10 +14285,10 @@
                 }
             ],
             "dependencies": {
-                "caniuse-lite": "^1.0.30001587",
-                "electron-to-chromium": "^1.4.668",
+                "caniuse-lite": "^1.0.30001640",
+                "electron-to-chromium": "^1.4.820",
                 "node-releases": "^2.0.14",
-                "update-browserslist-db": "^1.0.13"
+                "update-browserslist-db": "^1.1.0"
             },
             "bin": {
                 "browserslist": "cli.js"
@@ -15232,17 +14298,15 @@
             }
         },
         "node_modules/bson": {
-            "version": "6.7.0",
-            "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz",
-            "integrity": "sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==",
+            "version": "6.8.0",
+            "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz",
+            "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==",
             "engines": {
                 "node": ">=16.20.1"
             }
         },
         "node_modules/buffer": {
             "version": "5.7.1",
-            "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
-            "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
             "funding": [
                 {
                     "type": "github",
@@ -15257,6 +14321,7 @@
                     "url": "https://feross.org/support"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "base64-js": "^1.3.1",
                 "ieee754": "^1.1.13"
@@ -15264,51 +14329,44 @@
         },
         "node_modules/buffer-crc32": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz",
-            "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8.0.0"
             }
         },
         "node_modules/buffer-equal": {
             "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
-            "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.4.0"
             }
         },
         "node_modules/buffer-equal-constant-time": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
-            "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
+            "license": "BSD-3-Clause"
         },
         "node_modules/buffer-from": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
-            "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+            "license": "MIT"
         },
         "node_modules/built-in-math-eval": {
             "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/built-in-math-eval/-/built-in-math-eval-0.3.0.tgz",
-            "integrity": "sha512-5XD5cujru60ooKJ4sGZqoH5v2Xvgw7ezV54gJX/OnPkgDKoH3BnlMEi8xW6hl8xaEjxKHebgrsawroeZnGwIMA==",
+            "license": "MIT",
             "dependencies": {
                 "math-codegen": "^0.3.5"
             }
         },
         "node_modules/builtin-modules": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
-            "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/bundle-name": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
-            "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "run-applescript": "^7.0.0"
             },
@@ -15321,16 +14379,14 @@
         },
         "node_modules/bytes": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
-            "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.8"
             }
         },
         "node_modules/bytewise": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz",
-            "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==",
+            "license": "MIT",
             "dependencies": {
                 "bytewise-core": "^1.2.2",
                 "typewise": "^1.0.3"
@@ -15338,16 +14394,14 @@
         },
         "node_modules/bytewise-core": {
             "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz",
-            "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==",
+            "license": "MIT",
             "dependencies": {
                 "typewise-core": "^1.2"
             }
         },
         "node_modules/cacache": {
             "version": "18.0.3",
-            "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz",
-            "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==",
+            "license": "ISC",
             "dependencies": {
                 "@npmcli/fs": "^3.1.0",
                 "fs-minipass": "^3.0.0",
@@ -15368,8 +14422,7 @@
         },
         "node_modules/cacache/node_modules/fs-minipass": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
-            "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
+            "license": "ISC",
             "dependencies": {
                 "minipass": "^7.0.3"
             },
@@ -15379,24 +14432,21 @@
         },
         "node_modules/cacache/node_modules/lru-cache": {
             "version": "10.2.2",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
-            "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+            "license": "ISC",
             "engines": {
                 "node": "14 || >=16.14"
             }
         },
         "node_modules/cacheable-lookup": {
             "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
-            "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==",
+            "license": "MIT",
             "engines": {
                 "node": ">=14.16"
             }
         },
         "node_modules/cacheable-request": {
             "version": "12.0.1",
-            "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-12.0.1.tgz",
-            "integrity": "sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/http-cache-semantics": "^4.0.4",
                 "get-stream": "^9.0.1",
@@ -15412,8 +14462,7 @@
         },
         "node_modules/cacheable-request/node_modules/get-stream": {
             "version": "9.0.1",
-            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
-            "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+            "license": "MIT",
             "dependencies": {
                 "@sec-ant/readable-stream": "^0.4.1",
                 "is-stream": "^4.0.1"
@@ -15427,8 +14476,7 @@
         },
         "node_modules/cacheable-request/node_modules/is-stream": {
             "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
-            "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
+            "license": "MIT",
             "engines": {
                 "node": ">=18"
             },
@@ -15438,8 +14486,7 @@
         },
         "node_modules/call-bind": {
             "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
-            "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+            "license": "MIT",
             "dependencies": {
                 "es-define-property": "^1.0.0",
                 "es-errors": "^1.3.0",
@@ -15456,24 +14503,20 @@
         },
         "node_modules/callsite": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
-            "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==",
             "engines": {
                 "node": "*"
             }
         },
         "node_modules/callsites": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-            "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/camel-case": {
             "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
-            "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
+            "license": "MIT",
             "dependencies": {
                 "pascal-case": "^3.1.2",
                 "tslib": "^2.0.3"
@@ -15481,8 +14524,7 @@
         },
         "node_modules/camelcase": {
             "version": "6.3.0",
-            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-            "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10"
             },
@@ -15492,16 +14534,15 @@
         },
         "node_modules/camelize": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz",
-            "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==",
+            "license": "MIT",
             "funding": {
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
         "node_modules/caniuse-lite": {
-            "version": "1.0.30001621",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz",
-            "integrity": "sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==",
+            "version": "1.0.30001642",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz",
+            "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==",
             "funding": [
                 {
                     "type": "opencollective",
@@ -15519,9 +14560,8 @@
         },
         "node_modules/canvas": {
             "version": "2.11.2",
-            "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz",
-            "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==",
             "hasInstallScript": true,
+            "license": "MIT",
             "dependencies": {
                 "@mapbox/node-pre-gyp": "^1.0.0",
                 "nan": "^2.17.0",
@@ -15533,13 +14573,11 @@
         },
         "node_modules/caseless": {
             "version": "0.12.0",
-            "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-            "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+            "license": "Apache-2.0"
         },
         "node_modules/ccount": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
-            "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -15547,8 +14585,8 @@
         },
         "node_modules/chai": {
             "version": "5.1.1",
-            "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "assertion-error": "^2.0.1",
                 "check-error": "^2.1.1",
@@ -15562,8 +14600,7 @@
         },
         "node_modules/chalk": {
             "version": "2.4.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^3.2.1",
                 "escape-string-regexp": "^1.0.5",
@@ -15575,16 +14612,14 @@
         },
         "node_modules/chalk/node_modules/escape-string-regexp": {
             "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-            "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.8.0"
             }
         },
         "node_modules/character-entities": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
-            "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -15592,8 +14627,7 @@
         },
         "node_modules/character-entities-html4": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
-            "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -15601,8 +14635,7 @@
         },
         "node_modules/character-entities-legacy": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
-            "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -15610,16 +14643,14 @@
         },
         "node_modules/character-parser": {
             "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
-            "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==",
+            "license": "MIT",
             "dependencies": {
                 "is-regex": "^1.0.3"
             }
         },
         "node_modules/character-reference-invalid": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
-            "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -15627,13 +14658,12 @@
         },
         "node_modules/chardet": {
             "version": "0.7.0",
-            "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
-            "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/chart.js": {
             "version": "4.4.3",
-            "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==",
+            "license": "MIT",
             "dependencies": {
                 "@kurkle/color": "^0.3.0"
             },
@@ -15643,27 +14673,23 @@
         },
         "node_modules/cheap-ruler": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/cheap-ruler/-/cheap-ruler-3.0.2.tgz",
-            "integrity": "sha512-02T332h1/HTN6cDSufLP8x4JzDs2+VC+8qZ/N0kWIVPyc2xUkWwWh3B2fJxR7raXkL4Mq7k554mfuM9ofv/vGg=="
+            "license": "ISC"
         },
         "node_modules/check-error": {
             "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
-            "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 16"
             }
         },
         "node_modules/child_process": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz",
-            "integrity": "sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g=="
+            "license": "ISC"
         },
         "node_modules/chokidar": {
             "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
-            "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+            "license": "MIT",
             "dependencies": {
                 "anymatch": "~3.1.2",
                 "braces": "~3.0.2",
@@ -15685,8 +14711,7 @@
         },
         "node_modules/chokidar/node_modules/glob-parent": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+            "license": "ISC",
             "dependencies": {
                 "is-glob": "^4.0.1"
             },
@@ -15696,59 +14721,42 @@
         },
         "node_modules/chownr": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
-            "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+            "license": "ISC",
             "engines": {
                 "node": ">=10"
             }
         },
         "node_modules/chrome-trace-event": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
-            "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.0"
             }
         },
         "node_modules/ci-info": {
             "version": "3.9.0",
-            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
-            "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
             "funding": [
                 {
                     "type": "github",
                     "url": "https://github.com/sponsors/sibiraj-s"
                 }
             ],
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
-        "node_modules/cidr-regex": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-4.1.1.tgz",
-            "integrity": "sha512-ekKcVp+iRB9zlKFXyx7io7nINgb0oRjgRdXNEodp1OuxRui8FXr/CA40Tz1voWUp9DPPrMyQKy01vJhDo4N1lw==",
-            "dependencies": {
-                "ip-regex": "^5.0.0"
-            },
-            "engines": {
-                "node": ">=14"
-            }
-        },
         "node_modules/class-transformer": {
             "version": "0.5.1",
-            "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
-            "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw=="
+            "license": "MIT"
         },
         "node_modules/classnames": {
             "version": "2.5.1",
-            "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
-            "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
+            "license": "MIT"
         },
         "node_modules/clean-css": {
             "version": "5.3.3",
-            "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz",
-            "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==",
+            "license": "MIT",
             "dependencies": {
                 "source-map": "~0.6.0"
             },
@@ -15758,55 +14766,22 @@
         },
         "node_modules/clean-css/node_modules/source-map": {
             "version": "0.6.1",
-            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-            "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/clean-stack": {
             "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
-            "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
-        "node_modules/cli-columns": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/cli-columns/-/cli-columns-4.0.0.tgz",
-            "integrity": "sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ==",
-            "dependencies": {
-                "string-width": "^4.2.3",
-                "strip-ansi": "^6.0.1"
-            },
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/cli-columns/node_modules/emoji-regex": {
-            "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
-        },
-        "node_modules/cli-columns/node_modules/string-width": {
-            "version": "4.2.3",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-            "dependencies": {
-                "emoji-regex": "^8.0.0",
-                "is-fullwidth-code-point": "^3.0.0",
-                "strip-ansi": "^6.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
         "node_modules/cli-cursor": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
-            "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "restore-cursor": "^3.1.0"
             },
@@ -15816,22 +14791,19 @@
         },
         "node_modules/cli-width": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
-            "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
             "dev": true,
+            "license": "ISC",
             "engines": {
                 "node": ">= 10"
             }
         },
         "node_modules/client-only": {
             "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
-            "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
+            "license": "MIT"
         },
         "node_modules/cliss": {
             "version": "0.0.2",
-            "resolved": "https://registry.npmjs.org/cliss/-/cliss-0.0.2.tgz",
-            "integrity": "sha512-6rj9pgdukjT994Md13JCUAgTk91abAKrygL9sAvmHY4F6AKMOV8ccGaxhUUfcBuyg3sundWnn3JE0Mc9W6ZYqw==",
+            "license": "ISC",
             "dependencies": {
                 "command-line-usage": "^4.0.1",
                 "deepmerge": "^2.0.0",
@@ -15845,32 +14817,28 @@
         },
         "node_modules/cliss/node_modules/ansi-regex": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
-            "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/cliss/node_modules/camelcase": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
-            "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/cliss/node_modules/deepmerge": {
             "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
-            "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/cliss/node_modules/strip-ansi": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-            "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-regex": "^3.0.0"
             },
@@ -15880,16 +14848,14 @@
         },
         "node_modules/cliss/node_modules/yargs-parser": {
             "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
-            "integrity": "sha512-WhzC+xgstid9MbVUktco/bf+KJG+Uu6vMX0LN1sLJvwmbCQVxb4D8LzogobonKycNasCZLdOzTAk1SK7+K7swg==",
+            "license": "ISC",
             "dependencies": {
                 "camelcase": "^4.1.0"
             }
         },
         "node_modules/cliui": {
             "version": "7.0.4",
-            "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
-            "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+            "license": "ISC",
             "dependencies": {
                 "string-width": "^4.2.0",
                 "strip-ansi": "^6.0.0",
@@ -15898,8 +14864,7 @@
         },
         "node_modules/cliui/node_modules/ansi-styles": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+            "license": "MIT",
             "dependencies": {
                 "color-convert": "^2.0.1"
             },
@@ -15912,8 +14877,7 @@
         },
         "node_modules/cliui/node_modules/color-convert": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+            "license": "MIT",
             "dependencies": {
                 "color-name": "~1.1.4"
             },
@@ -15923,18 +14887,15 @@
         },
         "node_modules/cliui/node_modules/color-name": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+            "license": "MIT"
         },
         "node_modules/cliui/node_modules/emoji-regex": {
             "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+            "license": "MIT"
         },
         "node_modules/cliui/node_modules/string-width": {
             "version": "4.2.3",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+            "license": "MIT",
             "dependencies": {
                 "emoji-regex": "^8.0.0",
                 "is-fullwidth-code-point": "^3.0.0",
@@ -15946,8 +14907,7 @@
         },
         "node_modules/cliui/node_modules/wrap-ansi": {
             "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-            "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^4.0.0",
                 "string-width": "^4.1.0",
@@ -15962,14 +14922,12 @@
         },
         "node_modules/clj-fuzzy": {
             "version": "0.3.3",
-            "resolved": "https://registry.npmjs.org/clj-fuzzy/-/clj-fuzzy-0.3.3.tgz",
-            "integrity": "sha512-9cyh9A8+OphDZeKIG21MgyDHWDkWxTvagwvFLVjtdi6eToFENF7iDLlKwhHrnBQRSQwprKNhazG053nE/UgwfQ==",
-            "deprecated": "use the `talisman` library instead"
+            "deprecated": "use the `talisman` library instead",
+            "license": "MIT"
         },
         "node_modules/clone-deep": {
             "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
-            "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+            "license": "MIT",
             "dependencies": {
                 "is-plain-object": "^2.0.4",
                 "kind-of": "^6.0.2",
@@ -15981,24 +14939,21 @@
         },
         "node_modules/clsx": {
             "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
-            "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/cmd-shim": {
             "version": "6.0.3",
-            "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz",
-            "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/color": {
             "version": "4.2.3",
-            "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
-            "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+            "license": "MIT",
             "dependencies": {
                 "color-convert": "^2.0.1",
                 "color-string": "^1.9.0"
@@ -16009,21 +14964,18 @@
         },
         "node_modules/color-convert": {
             "version": "1.9.3",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+            "license": "MIT",
             "dependencies": {
                 "color-name": "1.1.3"
             }
         },
         "node_modules/color-name": {
             "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+            "license": "MIT"
         },
         "node_modules/color-string": {
             "version": "1.9.1",
-            "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
-            "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+            "license": "MIT",
             "dependencies": {
                 "color-name": "^1.0.0",
                 "simple-swizzle": "^0.2.2"
@@ -16031,16 +14983,14 @@
         },
         "node_modules/color-support": {
             "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
-            "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+            "license": "ISC",
             "bin": {
                 "color-support": "bin.js"
             }
         },
         "node_modules/color/node_modules/color-convert": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+            "license": "MIT",
             "dependencies": {
                 "color-name": "~1.1.4"
             },
@@ -16050,26 +15000,22 @@
         },
         "node_modules/color/node_modules/color-name": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+            "license": "MIT"
         },
         "node_modules/colorette": {
             "version": "2.0.20",
-            "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
-            "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="
+            "license": "MIT"
         },
         "node_modules/colors": {
             "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
-            "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.1.90"
             }
         },
         "node_modules/combined-stream": {
             "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
-            "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+            "license": "MIT",
             "dependencies": {
                 "delayed-stream": "~1.0.0"
             },
@@ -16079,8 +15025,7 @@
         },
         "node_modules/comma-separated-tokens": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
-            "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -16088,8 +15033,7 @@
         },
         "node_modules/command-line-usage": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
-            "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-escape-sequences": "^4.0.0",
                 "array-back": "^2.0.0",
@@ -16102,26 +15046,22 @@
         },
         "node_modules/commander": {
             "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
-            "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 10"
             }
         },
         "node_modules/common-ancestor-path": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz",
-            "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="
+            "license": "ISC"
         },
         "node_modules/common-path-prefix": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
-            "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w=="
+            "license": "ISC"
         },
         "node_modules/compress-commons": {
             "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz",
-            "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==",
+            "license": "MIT",
             "dependencies": {
                 "crc-32": "^1.2.0",
                 "crc32-stream": "^6.0.0",
@@ -16135,9 +15075,8 @@
         },
         "node_modules/compressible": {
             "version": "2.0.18",
-            "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
-            "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "mime-db": ">= 1.43.0 < 2"
             },
@@ -16147,9 +15086,8 @@
         },
         "node_modules/compression": {
             "version": "1.7.4",
-            "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
-            "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "accepts": "~1.3.5",
                 "bytes": "3.0.0",
@@ -16165,37 +15103,32 @@
         },
         "node_modules/compression/node_modules/bytes": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
-            "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.8"
             }
         },
         "node_modules/compression/node_modules/debug": {
             "version": "2.6.9",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ms": "2.0.0"
             }
         },
         "node_modules/compression/node_modules/ms": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/compression/node_modules/safe-buffer": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-            "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/compute-cosine-similarity": {
             "version": "1.1.0",
-            "integrity": "sha512-FXhNx0ILLjGi9Z9+lglLzM12+0uoTnYkHm7GiadXDAr0HGVLm25OivUS1B/LPkbzzvlcXz/1EvWg9ZYyJSdhTw==",
             "dependencies": {
                 "compute-dot": "^1.1.0",
                 "compute-l2norm": "^1.1.0",
@@ -16205,8 +15138,6 @@
         },
         "node_modules/compute-dot": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/compute-dot/-/compute-dot-1.1.0.tgz",
-            "integrity": "sha512-L5Ocet4DdMrXboss13K59OK23GXjiSia7+7Ukc7q4Bl+RVpIXK2W9IHMbWDZkh+JUEvJAwOKRaJDiFUa1LTnJg==",
             "dependencies": {
                 "validate.io-array": "^1.0.3",
                 "validate.io-function": "^1.0.2"
@@ -16214,8 +15145,6 @@
         },
         "node_modules/compute-l2norm": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/compute-l2norm/-/compute-l2norm-1.1.0.tgz",
-            "integrity": "sha512-6EHh1Elj90eU28SXi+h2PLnTQvZmkkHWySpoFz+WOlVNLz3DQoC4ISUHSV9n5jMxPHtKGJ01F4uu2PsXBB8sSg==",
             "dependencies": {
                 "validate.io-array": "^1.0.3",
                 "validate.io-function": "^1.0.2"
@@ -16223,13 +15152,11 @@
         },
         "node_modules/concat-map": {
             "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-            "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+            "license": "MIT"
         },
         "node_modules/concaveman": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/concaveman/-/concaveman-1.2.1.tgz",
-            "integrity": "sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw==",
+            "license": "ISC",
             "dependencies": {
                 "point-in-polygon": "^1.1.0",
                 "rbush": "^3.0.1",
@@ -16239,39 +15166,33 @@
         },
         "node_modules/concaveman/node_modules/rbush": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz",
-            "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
+            "license": "MIT",
             "dependencies": {
                 "quickselect": "^2.0.0"
             }
         },
         "node_modules/confusing-browser-globals": {
             "version": "1.0.11",
-            "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
-            "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/connect-flash": {
             "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/connect-flash/-/connect-flash-0.1.1.tgz",
-            "integrity": "sha512-2rcfELQt/ZMP+SM/pG8PyhJRaLKp+6Hk2IUBNkEit09X+vwn3QsAL3ZbYtxUn7NVPzbMTSLRDhqe0B/eh30RYA==",
             "engines": {
                 "node": ">= 0.4.0"
             }
         },
         "node_modules/connect-history-api-fallback": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
-            "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=0.8"
             }
         },
         "node_modules/connect-mongo": {
             "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-5.1.0.tgz",
-            "integrity": "sha512-xT0vxQLqyqoUTxPLzlP9a/u+vir0zNkhiy9uAdHjSCcUUf7TS5b55Icw8lVyYFxfemP3Mf9gdwUOgeF3cxCAhw==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "^4.3.1",
                 "kruptein": "^3.0.0"
@@ -16286,13 +15207,11 @@
         },
         "node_modules/console-control-strings": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
-            "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
+            "license": "ISC"
         },
         "node_modules/constantinople": {
             "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
-            "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/parser": "^7.6.0",
                 "@babel/types": "^7.6.1"
@@ -16300,8 +15219,7 @@
         },
         "node_modules/content-disposition": {
             "version": "0.5.4",
-            "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
-            "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+            "license": "MIT",
             "dependencies": {
                 "safe-buffer": "5.2.1"
             },
@@ -16311,8 +15229,7 @@
         },
         "node_modules/content-type": {
             "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
-            "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
@@ -16325,16 +15242,14 @@
         },
         "node_modules/cookie": {
             "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
-            "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/cookie-parser": {
             "version": "1.4.6",
-            "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz",
-            "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==",
+            "license": "MIT",
             "dependencies": {
                 "cookie": "0.4.1",
                 "cookie-signature": "1.0.6"
@@ -16345,8 +15260,7 @@
         },
         "node_modules/cookie-session": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/cookie-session/-/cookie-session-2.1.0.tgz",
-            "integrity": "sha512-u73BDmR8QLGcs+Lprs0cfbcAPKl2HnPcjpwRXT41sEV4DRJ2+W0vJEEZkG31ofkx+HZflA70siRIjiTdIodmOQ==",
+            "license": "MIT",
             "dependencies": {
                 "cookies": "0.9.1",
                 "debug": "3.2.7",
@@ -16359,21 +15273,18 @@
         },
         "node_modules/cookie-session/node_modules/debug": {
             "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+            "license": "MIT",
             "dependencies": {
                 "ms": "^2.1.1"
             }
         },
         "node_modules/cookie-signature": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
-            "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+            "license": "MIT"
         },
         "node_modules/cookies": {
             "version": "0.9.1",
-            "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz",
-            "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==",
+            "license": "MIT",
             "dependencies": {
                 "depd": "~2.0.0",
                 "keygrip": "~1.1.0"
@@ -16394,8 +15305,7 @@
         },
         "node_modules/core-js-compat": {
             "version": "3.37.1",
-            "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
-            "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
+            "license": "MIT",
             "dependencies": {
                 "browserslist": "^4.23.0"
             },
@@ -16406,9 +15316,8 @@
         },
         "node_modules/core-js-pure": {
             "version": "3.37.1",
-            "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz",
-            "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==",
             "hasInstallScript": true,
+            "license": "MIT",
             "funding": {
                 "type": "opencollective",
                 "url": "https://opencollective.com/core-js"
@@ -16416,13 +15325,11 @@
         },
         "node_modules/core-util-is": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-            "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+            "license": "MIT"
         },
         "node_modules/cors": {
             "version": "2.8.5",
-            "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
-            "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+            "license": "MIT",
             "dependencies": {
                 "object-assign": "^4",
                 "vary": "^1"
@@ -16433,16 +15340,14 @@
         },
         "node_modules/cose-base": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz",
-            "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==",
+            "license": "MIT",
             "dependencies": {
                 "layout-base": "^1.0.0"
             }
         },
         "node_modules/cosmiconfig": {
             "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
-            "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/parse-json": "^4.0.0",
                 "import-fresh": "^3.2.1",
@@ -16456,8 +15361,7 @@
         },
         "node_modules/crc-32": {
             "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
-            "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+            "license": "Apache-2.0",
             "bin": {
                 "crc32": "bin/crc32.njs"
             },
@@ -16467,8 +15371,7 @@
         },
         "node_modules/crc32-stream": {
             "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz",
-            "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==",
+            "license": "MIT",
             "dependencies": {
                 "crc-32": "^1.2.0",
                 "readable-stream": "^4.0.0"
@@ -16479,15 +15382,13 @@
         },
         "node_modules/create-require": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
-            "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/cross-env": {
             "version": "7.0.3",
-            "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
-            "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "cross-spawn": "^7.0.1"
             },
@@ -16503,16 +15404,14 @@
         },
         "node_modules/cross-fetch": {
             "version": "3.1.8",
-            "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz",
-            "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==",
+            "license": "MIT",
             "dependencies": {
                 "node-fetch": "^2.6.12"
             }
         },
         "node_modules/cross-spawn": {
             "version": "7.0.3",
-            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-            "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+            "license": "MIT",
             "dependencies": {
                 "path-key": "^3.1.0",
                 "shebang-command": "^2.0.0",
@@ -16524,23 +15423,21 @@
         },
         "node_modules/css-color-keywords": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
-            "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==",
+            "license": "ISC",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/css-line-break": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
-            "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+            "license": "MIT",
             "dependencies": {
                 "utrie": "^1.0.2"
             }
         },
         "node_modules/css-loader": {
             "version": "7.1.2",
-            "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==",
+            "license": "MIT",
             "dependencies": {
                 "icss-utils": "^5.1.0",
                 "postcss": "^8.4.33",
@@ -16573,8 +15470,7 @@
         },
         "node_modules/css-loader/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -16584,8 +15480,7 @@
         },
         "node_modules/css-select": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
-            "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "boolbase": "^1.0.0",
                 "css-what": "^6.0.1",
@@ -16599,8 +15494,7 @@
         },
         "node_modules/css-select/node_modules/dom-serializer": {
             "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
-            "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+            "license": "MIT",
             "dependencies": {
                 "domelementtype": "^2.0.1",
                 "domhandler": "^4.2.0",
@@ -16612,8 +15506,7 @@
         },
         "node_modules/css-select/node_modules/domhandler": {
             "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
-            "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "domelementtype": "^2.2.0"
             },
@@ -16626,8 +15519,7 @@
         },
         "node_modules/css-select/node_modules/domutils": {
             "version": "2.8.0",
-            "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
-            "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "dom-serializer": "^1.0.1",
                 "domelementtype": "^2.2.0",
@@ -16639,16 +15531,14 @@
         },
         "node_modules/css-select/node_modules/entities": {
             "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
-            "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+            "license": "BSD-2-Clause",
             "funding": {
                 "url": "https://github.com/fb55/entities?sponsor=1"
             }
         },
         "node_modules/css-to-react-native": {
             "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz",
-            "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==",
+            "license": "MIT",
             "dependencies": {
                 "camelize": "^1.0.0",
                 "css-color-keywords": "^1.0.0",
@@ -16657,8 +15547,7 @@
         },
         "node_modules/css-what": {
             "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
-            "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+            "license": "BSD-2-Clause",
             "engines": {
                 "node": ">= 6"
             },
@@ -16668,13 +15557,11 @@
         },
         "node_modules/csscolorparser": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz",
-            "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w=="
+            "license": "MIT"
         },
         "node_modules/cssesc": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-            "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+            "license": "MIT",
             "bin": {
                 "cssesc": "bin/cssesc"
             },
@@ -16684,9 +15571,8 @@
         },
         "node_modules/cssstyle": {
             "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz",
-            "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "rrweb-cssom": "^0.6.0"
             },
@@ -16696,13 +15582,11 @@
         },
         "node_modules/csstype": {
             "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
-            "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+            "license": "MIT"
         },
         "node_modules/csv-parser": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.0.0.tgz",
-            "integrity": "sha512-s6OYSXAK3IdKqYO33y09jhypG/bSDHPuyCme/IdEHfWpLf/jKcpitVFyOC6UemgGk8v7Q5u2XE0vvwmanxhGlQ==",
+            "license": "MIT",
             "dependencies": {
                 "minimist": "^1.2.0"
             },
@@ -16715,11 +15599,11 @@
         },
         "node_modules/csv-stringify": {
             "version": "6.5.0",
-            "integrity": "sha512-edlXFVKcUx7r8Vx5zQucsuMg4wb/xT6qyz+Sr1vnLrdXqlLD1+UKyWNyZ9zn6mUW1ewmGxrpVwAcChGF0HQ/2Q=="
+            "license": "MIT"
         },
         "node_modules/csvtojson": {
             "version": "2.0.10",
-            "integrity": "sha512-lUWFxGKyhraKCW8Qghz6Z0f2l/PqB1W3AO0HKJzGIQ5JRSlR651ekJDiGJbBT4sRNNv5ddnSGVEnsxP9XRCVpQ==",
+            "license": "MIT",
             "dependencies": {
                 "bluebird": "^3.5.1",
                 "lodash": "^4.17.3",
@@ -16734,21 +15618,18 @@
         },
         "node_modules/custom-event": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
-            "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg=="
+            "license": "MIT"
         },
         "node_modules/cytoscape": {
             "version": "3.29.2",
-            "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.29.2.tgz",
-            "integrity": "sha512-2G1ycU28Nh7OHT9rkXRLpCDP30MKH1dXJORZuBhtEhEW7pKwgPi77ImqlCWinouyE1PNepIOGZBOrE84DG7LyQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10"
             }
         },
         "node_modules/cytoscape-cose-bilkent": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz",
-            "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==",
+            "license": "MIT",
             "dependencies": {
                 "cose-base": "^1.0.0"
             },
@@ -16758,14 +15639,12 @@
         },
         "node_modules/D": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/D/-/D-1.0.0.tgz",
-            "integrity": "sha512-nQvrCBu7K2pSSEtIM0EEF03FVjcczCXInMt3moLNFbjlWx6bZrX72uT6/1uAXDbnzGUAx9gTyDiQ+vrFi663oA==",
-            "deprecated": "Package no longer supported. Contact support@npmjs.com for more info."
+            "deprecated": "Package no longer supported. Contact support@npmjs.com for more info.",
+            "license": "ISC"
         },
         "node_modules/d3": {
             "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
-            "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
+            "license": "ISC",
             "dependencies": {
                 "d3-array": "3",
                 "d3-axis": "3",
@@ -16804,8 +15683,7 @@
         },
         "node_modules/d3-array": {
             "version": "3.2.4",
-            "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
-            "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+            "license": "ISC",
             "dependencies": {
                 "internmap": "1 - 2"
             },
@@ -16815,16 +15693,14 @@
         },
         "node_modules/d3-axis": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
-            "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+            "license": "ISC",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/d3-brush": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
-            "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+            "license": "ISC",
             "dependencies": {
                 "d3-dispatch": "1 - 3",
                 "d3-drag": "2 - 3",
@@ -16838,8 +15714,7 @@
         },
         "node_modules/d3-chord": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
-            "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+            "license": "ISC",
             "dependencies": {
                 "d3-path": "1 - 3"
             },
@@ -16849,16 +15724,14 @@
         },
         "node_modules/d3-color": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
-            "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+            "license": "ISC",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/d3-contour": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
-            "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
+            "license": "ISC",
             "dependencies": {
                 "d3-array": "^3.2.0"
             },
@@ -16868,8 +15741,7 @@
         },
         "node_modules/d3-delaunay": {
             "version": "6.0.4",
-            "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
-            "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
+            "license": "ISC",
             "dependencies": {
                 "delaunator": "5"
             },
@@ -16879,16 +15751,14 @@
         },
         "node_modules/d3-dispatch": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
-            "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+            "license": "ISC",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/d3-drag": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
-            "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+            "license": "ISC",
             "dependencies": {
                 "d3-dispatch": "1 - 3",
                 "d3-selection": "3"
@@ -16899,8 +15769,7 @@
         },
         "node_modules/d3-dsv": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
-            "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+            "license": "ISC",
             "dependencies": {
                 "commander": "7",
                 "iconv-lite": "0.6",
@@ -16923,8 +15792,7 @@
         },
         "node_modules/d3-dsv/node_modules/iconv-lite": {
             "version": "0.6.3",
-            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-            "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+            "license": "MIT",
             "dependencies": {
                 "safer-buffer": ">= 2.1.2 < 3.0.0"
             },
@@ -16934,16 +15802,14 @@
         },
         "node_modules/d3-ease": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
-            "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/d3-fetch": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
-            "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+            "license": "ISC",
             "dependencies": {
                 "d3-dsv": "1 - 3"
             },
@@ -16953,8 +15819,7 @@
         },
         "node_modules/d3-force": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
-            "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+            "license": "ISC",
             "dependencies": {
                 "d3-dispatch": "1 - 3",
                 "d3-quadtree": "1 - 3",
@@ -16966,37 +15831,32 @@
         },
         "node_modules/d3-format": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
-            "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+            "license": "ISC",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/d3-geo": {
             "version": "1.7.1",
-            "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.7.1.tgz",
-            "integrity": "sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "d3-array": "1"
             }
         },
         "node_modules/d3-geo/node_modules/d3-array": {
             "version": "1.2.4",
-            "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
-            "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
+            "license": "BSD-3-Clause"
         },
         "node_modules/d3-hierarchy": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
-            "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+            "license": "ISC",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/d3-interpolate": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
-            "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+            "license": "ISC",
             "dependencies": {
                 "d3-color": "1 - 3"
             },
@@ -17006,40 +15866,35 @@
         },
         "node_modules/d3-path": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
-            "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+            "license": "ISC",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/d3-polygon": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
-            "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
+            "license": "ISC",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/d3-quadtree": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
-            "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+            "license": "ISC",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/d3-random": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
-            "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
+            "license": "ISC",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/d3-sankey": {
             "version": "0.12.3",
-            "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz",
-            "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "d3-array": "1 - 2",
                 "d3-shape": "^1.2.0"
@@ -17047,34 +15902,29 @@
         },
         "node_modules/d3-sankey/node_modules/d3-array": {
             "version": "2.12.1",
-            "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
-            "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "internmap": "^1.0.0"
             }
         },
         "node_modules/d3-sankey/node_modules/d3-path": {
             "version": "1.0.9",
-            "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
-            "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
+            "license": "BSD-3-Clause"
         },
         "node_modules/d3-sankey/node_modules/d3-shape": {
             "version": "1.3.7",
-            "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
-            "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "d3-path": "1"
             }
         },
         "node_modules/d3-sankey/node_modules/internmap": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
-            "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="
+            "license": "ISC"
         },
         "node_modules/d3-scale": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
-            "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+            "license": "ISC",
             "dependencies": {
                 "d3-array": "2.10.0 - 3",
                 "d3-format": "1 - 3",
@@ -17088,8 +15938,7 @@
         },
         "node_modules/d3-scale-chromatic": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
-            "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
+            "license": "ISC",
             "dependencies": {
                 "d3-color": "1 - 3",
                 "d3-interpolate": "1 - 3"
@@ -17100,16 +15949,14 @@
         },
         "node_modules/d3-selection": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
-            "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+            "license": "ISC",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/d3-shape": {
             "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
-            "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+            "license": "ISC",
             "dependencies": {
                 "d3-path": "^3.1.0"
             },
@@ -17119,8 +15966,7 @@
         },
         "node_modules/d3-time": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
-            "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+            "license": "ISC",
             "dependencies": {
                 "d3-array": "2 - 3"
             },
@@ -17130,8 +15976,7 @@
         },
         "node_modules/d3-time-format": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
-            "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+            "license": "ISC",
             "dependencies": {
                 "d3-time": "1 - 3"
             },
@@ -17141,16 +15986,14 @@
         },
         "node_modules/d3-timer": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
-            "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+            "license": "ISC",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/d3-transition": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
-            "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+            "license": "ISC",
             "dependencies": {
                 "d3-color": "1 - 3",
                 "d3-dispatch": "1 - 3",
@@ -17167,13 +16010,11 @@
         },
         "node_modules/d3-voronoi": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz",
-            "integrity": "sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw=="
+            "license": "BSD-3-Clause"
         },
         "node_modules/d3-zoom": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
-            "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+            "license": "ISC",
             "dependencies": {
                 "d3-dispatch": "1 - 3",
                 "d3-drag": "2 - 3",
@@ -17187,8 +16028,7 @@
         },
         "node_modules/d3/node_modules/d3-array": {
             "version": "3.2.4",
-            "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
-            "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+            "license": "ISC",
             "dependencies": {
                 "internmap": "1 - 2"
             },
@@ -17198,8 +16038,7 @@
         },
         "node_modules/d3/node_modules/d3-geo": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
-            "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
+            "license": "ISC",
             "dependencies": {
                 "d3-array": "2.5.0 - 3"
             },
@@ -17209,8 +16048,7 @@
         },
         "node_modules/dagre-d3-es": {
             "version": "7.0.10",
-            "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz",
-            "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==",
+            "license": "MIT",
             "dependencies": {
                 "d3": "^7.8.2",
                 "lodash-es": "^4.17.21"
@@ -17218,14 +16056,12 @@
         },
         "node_modules/damerau-levenshtein": {
             "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
-            "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
-            "dev": true
+            "dev": true,
+            "license": "BSD-2-Clause"
         },
         "node_modules/dashdash": {
             "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-            "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+            "license": "MIT",
             "dependencies": {
                 "assert-plus": "^1.0.0"
             },
@@ -17235,17 +16071,15 @@
         },
         "node_modules/data-uri-to-buffer": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
-            "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 6"
             }
         },
         "node_modules/data-urls": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
-            "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "whatwg-mimetype": "^4.0.0",
                 "whatwg-url": "^14.0.0"
@@ -17256,9 +16090,8 @@
         },
         "node_modules/data-view-buffer": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
-            "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.6",
                 "es-errors": "^1.3.0",
@@ -17273,9 +16106,8 @@
         },
         "node_modules/data-view-byte-length": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
-            "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "es-errors": "^1.3.0",
@@ -17290,9 +16122,8 @@
         },
         "node_modules/data-view-byte-offset": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
-            "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.6",
                 "es-errors": "^1.3.0",
@@ -17307,8 +16138,7 @@
         },
         "node_modules/date-fns": {
             "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
-            "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/kossnocorp"
@@ -17316,13 +16146,11 @@
         },
         "node_modules/dayjs": {
             "version": "1.11.11",
-            "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz",
-            "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg=="
+            "license": "MIT"
         },
         "node_modules/debug": {
             "version": "4.3.4",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-            "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+            "license": "MIT",
             "dependencies": {
                 "ms": "2.1.2"
             },
@@ -17337,9 +16165,8 @@
         },
         "node_modules/decamelize": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
-            "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=10"
             },
@@ -17349,19 +16176,16 @@
         },
         "node_modules/decimal.js": {
             "version": "10.4.3",
-            "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
-            "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/decimal.js-light": {
             "version": "2.5.1",
-            "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
-            "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
+            "license": "MIT"
         },
         "node_modules/decode-named-character-reference": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
-            "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
+            "license": "MIT",
             "dependencies": {
                 "character-entities": "^2.0.0"
             },
@@ -17372,16 +16196,14 @@
         },
         "node_modules/decode-uri-component": {
             "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
-            "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10"
             }
         },
         "node_modules/decompress-response": {
             "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
-            "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+            "license": "MIT",
             "dependencies": {
                 "mimic-response": "^3.1.0"
             },
@@ -17394,8 +16216,7 @@
         },
         "node_modules/decompress-response/node_modules/mimic-response": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
-            "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10"
             },
@@ -17405,17 +16226,15 @@
         },
         "node_modules/deep-eql": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.1.tgz",
-            "integrity": "sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/deep-equal": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz",
-            "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==",
+            "license": "MIT",
             "dependencies": {
                 "is-arguments": "^1.1.1",
                 "is-date-object": "^1.0.5",
@@ -17433,30 +16252,26 @@
         },
         "node_modules/deep-extend": {
             "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
-            "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4.0.0"
             }
         },
         "node_modules/deep-is": {
             "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-            "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+            "license": "MIT"
         },
         "node_modules/deepmerge": {
             "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
-            "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/default-browser": {
             "version": "5.2.1",
-            "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz",
-            "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "bundle-name": "^4.1.0",
                 "default-browser-id": "^5.0.0"
@@ -17470,9 +16285,8 @@
         },
         "node_modules/default-browser-id": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz",
-            "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=18"
             },
@@ -17482,9 +16296,8 @@
         },
         "node_modules/default-gateway": {
             "version": "6.0.3",
-            "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
-            "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
             "dev": true,
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "execa": "^5.0.0"
             },
@@ -17494,16 +16307,14 @@
         },
         "node_modules/defer-to-connect": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
-            "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10"
             }
         },
         "node_modules/define-data-property": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
-            "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+            "license": "MIT",
             "dependencies": {
                 "es-define-property": "^1.0.0",
                 "es-errors": "^1.3.0",
@@ -17518,9 +16329,8 @@
         },
         "node_modules/define-lazy-prop": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
-            "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=12"
             },
@@ -17530,8 +16340,7 @@
         },
         "node_modules/define-properties": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
-            "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+            "license": "MIT",
             "dependencies": {
                 "define-data-property": "^1.0.1",
                 "has-property-descriptors": "^1.0.0",
@@ -17546,39 +16355,33 @@
         },
         "node_modules/delaunator": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz",
-            "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==",
+            "license": "ISC",
             "dependencies": {
                 "robust-predicates": "^3.0.2"
             }
         },
         "node_modules/delaunator/node_modules/robust-predicates": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",
-            "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="
+            "license": "Unlicense"
         },
         "node_modules/delayed-stream": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-            "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.4.0"
             }
         },
         "node_modules/delegates": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
-            "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
+            "license": "MIT"
         },
         "node_modules/density-clustering": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/density-clustering/-/density-clustering-1.3.0.tgz",
-            "integrity": "sha512-icpmBubVTwLnsaor9qH/4tG5+7+f61VcqMN3V3pm9sxxSCt2Jcs0zWOgwZW9ARJYaKD3FumIgHiMOcIMRRAzFQ=="
+            "license": "MIT"
         },
         "node_modules/depcheck": {
             "version": "1.4.7",
-            "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.7.tgz",
-            "integrity": "sha512-1lklS/bV5chOxwNKA/2XUUk/hPORp8zihZsXflr8x0kLwmcZ9Y9BsS6Hs3ssvA+2wUVbG0U2Ciqvm1SokNjPkA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/parser": "^7.23.0",
                 "@babel/traverse": "^7.23.2",
@@ -17613,8 +16416,7 @@
         },
         "node_modules/depcheck/node_modules/minimatch": {
             "version": "7.4.6",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz",
-            "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^2.0.1"
             },
@@ -17627,8 +16429,7 @@
         },
         "node_modules/depcheck/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -17638,29 +16439,25 @@
         },
         "node_modules/depd": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
-            "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.8"
             }
         },
         "node_modules/deps-regex": {
             "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/deps-regex/-/deps-regex-0.2.0.tgz",
-            "integrity": "sha512-PwuBojGMQAYbWkMXOY9Pd/NWCDNHVH12pnS7WHqZkTSeMESe4hwnKKRp0yR87g37113x4JPbo/oIvXY+s/f56Q=="
+            "license": "MIT"
         },
         "node_modules/dequal": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
-            "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/destroy": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
-            "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.8",
                 "npm": "1.2.8000 || >= 1.4.16"
@@ -17668,30 +16465,26 @@
         },
         "node_modules/detect-file": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
-            "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/detect-libc": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
-            "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/detect-node": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
-            "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/devlop": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
-            "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+            "license": "MIT",
             "dependencies": {
                 "dequal": "^2.0.0"
             },
@@ -17702,8 +16495,7 @@
         },
         "node_modules/dezalgo": {
             "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
-            "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
+            "license": "ISC",
             "dependencies": {
                 "asap": "^2.0.0",
                 "wrappy": "1"
@@ -17711,16 +16503,14 @@
         },
         "node_modules/diff": {
             "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
-            "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">=0.3.1"
             }
         },
         "node_modules/dir-glob": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-            "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+            "license": "MIT",
             "dependencies": {
                 "path-type": "^4.0.0"
             },
@@ -17730,9 +16520,8 @@
         },
         "node_modules/dns-packet": {
             "version": "5.6.1",
-            "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
-            "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@leichtgewicht/ip-codec": "^2.0.1"
             },
@@ -17742,8 +16531,7 @@
         },
         "node_modules/doctrine": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-            "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "esutils": "^2.0.2"
             },
@@ -17753,21 +16541,18 @@
         },
         "node_modules/doctypes": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
-            "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ=="
+            "license": "MIT"
         },
         "node_modules/dom-converter": {
             "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
-            "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+            "license": "MIT",
             "dependencies": {
                 "utila": "~0.4"
             }
         },
         "node_modules/dom-helpers": {
             "version": "5.2.1",
-            "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
-            "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.8.7",
                 "csstype": "^3.0.2"
@@ -17775,8 +16560,7 @@
         },
         "node_modules/dom-serializer": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
-            "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+            "license": "MIT",
             "dependencies": {
                 "domelementtype": "^2.3.0",
                 "domhandler": "^5.0.2",
@@ -17787,25 +16571,21 @@
             }
         },
         "node_modules/dom-walk": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
-            "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
+            "version": "0.1.2"
         },
         "node_modules/domelementtype": {
             "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
-            "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
             "funding": [
                 {
                     "type": "github",
                     "url": "https://github.com/sponsors/fb55"
                 }
-            ]
+            ],
+            "license": "BSD-2-Clause"
         },
         "node_modules/domhandler": {
             "version": "5.0.3",
-            "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
-            "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "domelementtype": "^2.3.0"
             },
@@ -17818,13 +16598,11 @@
         },
         "node_modules/dompurify": {
             "version": "3.1.4",
-            "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.4.tgz",
-            "integrity": "sha512-2gnshi6OshmuKil8rMZuQCGiUF3cUxHY3NGDzUAdUx/NPEe5DVnO8BDoAQouvgwnx0R/+a6jUn36Z0FSdq8vww=="
+            "license": "(MPL-2.0 OR Apache-2.0)"
         },
         "node_modules/domutils": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
-            "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "dom-serializer": "^2.0.0",
                 "domelementtype": "^2.3.0",
@@ -17836,8 +16614,7 @@
         },
         "node_modules/dot-case": {
             "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
-            "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+            "license": "MIT",
             "dependencies": {
                 "no-case": "^3.0.4",
                 "tslib": "^2.0.3"
@@ -17845,8 +16622,7 @@
         },
         "node_modules/dotenv": {
             "version": "16.4.5",
-            "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
-            "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
+            "license": "BSD-2-Clause",
             "engines": {
                 "node": ">=12"
             },
@@ -17856,32 +16632,27 @@
         },
         "node_modules/double-bits": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/double-bits/-/double-bits-1.1.1.tgz",
-            "integrity": "sha512-BCLEIBq0O/DWoA7BsCu/R+RP0ZXiowP8BhtJT3qeuuQEBpnS8LK/Wo6UTJQv6v8mK1fj8n90YziHLwGdM5whSg=="
+            "license": "MIT"
         },
         "node_modules/dynamic-dedupe": {
             "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz",
-            "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "xtend": "^4.0.0"
             }
         },
         "node_modules/earcut": {
             "version": "2.2.4",
-            "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
-            "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="
+            "license": "ISC"
         },
         "node_modules/eastasianwidth": {
             "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
-            "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+            "license": "MIT"
         },
         "node_modules/ecc-jsbn": {
             "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
-            "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+            "license": "MIT",
             "dependencies": {
                 "jsbn": "~0.1.0",
                 "safer-buffer": "^2.1.0"
@@ -17889,52 +16660,45 @@
         },
         "node_modules/ecdsa-sig-formatter": {
             "version": "1.0.11",
-            "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
-            "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "safe-buffer": "^5.0.1"
             }
         },
         "node_modules/ee-first": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-            "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+            "license": "MIT"
         },
         "node_modules/electron-to-chromium": {
-            "version": "1.4.782",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.782.tgz",
-            "integrity": "sha512-JUfU61e8tr+i5Y1FKXcKs+Xe+rJ+CEqm4cgv1kMihPE2EvYHmYyVr3Im/+1+Z5B29Be2EEGCZCwAc6Tazdl1Yg=="
+            "version": "1.4.828",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.828.tgz",
+            "integrity": "sha512-QOIJiWpQJDHAVO4P58pwb133Cwee0nbvy/MV1CwzZVGpkH1RX33N3vsaWRCpR6bF63AAq366neZrRTu7Qlsbbw=="
         },
         "node_modules/elkjs": {
             "version": "0.9.3",
-            "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.3.tgz",
-            "integrity": "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ=="
+            "license": "EPL-2.0"
         },
         "node_modules/emoji-regex": {
             "version": "9.2.2",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-            "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+            "license": "MIT"
         },
         "node_modules/emojis-list": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-            "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 4"
             }
         },
         "node_modules/encodeurl": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
-            "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.8"
             }
         },
         "node_modules/encoding": {
             "version": "0.1.13",
-            "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
-            "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+            "license": "MIT",
             "optional": true,
             "dependencies": {
                 "iconv-lite": "^0.6.2"
@@ -17942,8 +16706,7 @@
         },
         "node_modules/encoding/node_modules/iconv-lite": {
             "version": "0.6.3",
-            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-            "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+            "license": "MIT",
             "optional": true,
             "dependencies": {
                 "safer-buffer": ">= 2.1.2 < 3.0.0"
@@ -17954,8 +16717,7 @@
         },
         "node_modules/engine.io": {
             "version": "6.5.4",
-            "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz",
-            "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/cookie": "^0.4.1",
                 "@types/cors": "^2.8.12",
@@ -17974,8 +16736,7 @@
         },
         "node_modules/engine.io-client": {
             "version": "6.5.3",
-            "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz",
-            "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==",
+            "license": "MIT",
             "dependencies": {
                 "@socket.io/component-emitter": "~3.1.0",
                 "debug": "~4.3.1",
@@ -17986,8 +16747,7 @@
         },
         "node_modules/engine.io-client/node_modules/ws": {
             "version": "8.11.0",
-            "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
-            "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10.0.0"
             },
@@ -18006,16 +16766,14 @@
         },
         "node_modules/engine.io-parser": {
             "version": "5.2.2",
-            "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz",
-            "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10.0.0"
             }
         },
         "node_modules/engine.io/node_modules/ws": {
             "version": "8.11.0",
-            "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
-            "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10.0.0"
             },
@@ -18034,8 +16792,7 @@
         },
         "node_modules/enhanced-resolve": {
             "version": "5.16.1",
-            "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz",
-            "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==",
+            "license": "MIT",
             "dependencies": {
                 "graceful-fs": "^4.2.4",
                 "tapable": "^2.2.0"
@@ -18046,8 +16803,7 @@
         },
         "node_modules/entities": {
             "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-            "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+            "license": "BSD-2-Clause",
             "engines": {
                 "node": ">=0.12"
             },
@@ -18057,16 +16813,14 @@
         },
         "node_modules/env-paths": {
             "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
-            "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/envinfo": {
             "version": "7.13.0",
-            "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
-            "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==",
+            "license": "MIT",
             "bin": {
                 "envinfo": "dist/cli.js"
             },
@@ -18076,22 +16830,19 @@
         },
         "node_modules/err-code": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
-            "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="
+            "license": "MIT"
         },
         "node_modules/error-ex": {
             "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-            "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+            "license": "MIT",
             "dependencies": {
                 "is-arrayish": "^0.2.1"
             }
         },
         "node_modules/es-abstract": {
             "version": "1.23.3",
-            "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
-            "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "array-buffer-byte-length": "^1.0.1",
                 "arraybuffer.prototype.slice": "^1.0.3",
@@ -18149,8 +16900,7 @@
         },
         "node_modules/es-define-property": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
-            "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+            "license": "MIT",
             "dependencies": {
                 "get-intrinsic": "^1.2.4"
             },
@@ -18160,17 +16910,15 @@
         },
         "node_modules/es-errors": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
-            "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.4"
             }
         },
         "node_modules/es-iterator-helpers": {
             "version": "1.0.19",
-            "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz",
-            "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -18193,14 +16941,12 @@
         },
         "node_modules/es-module-lexer": {
             "version": "1.5.3",
-            "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz",
-            "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg=="
+            "license": "MIT"
         },
         "node_modules/es-object-atoms": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
-            "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "es-errors": "^1.3.0"
             },
@@ -18210,9 +16956,8 @@
         },
         "node_modules/es-set-tostringtag": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
-            "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "get-intrinsic": "^1.2.4",
                 "has-tostringtag": "^1.0.2",
@@ -18224,18 +16969,16 @@
         },
         "node_modules/es-shim-unscopables": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
-            "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "hasown": "^2.0.0"
             }
         },
         "node_modules/es-to-primitive": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-            "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "is-callable": "^1.1.4",
                 "is-date-object": "^1.0.1",
@@ -18250,26 +16993,22 @@
         },
         "node_modules/es6-promise": {
             "version": "4.2.8",
-            "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
-            "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
+            "license": "MIT"
         },
         "node_modules/escalade": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
-            "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/escape-html": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-            "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+            "license": "MIT"
         },
         "node_modules/escape-string-regexp": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-            "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10"
             },
@@ -18279,8 +17018,7 @@
         },
         "node_modules/eslint": {
             "version": "8.57.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
-            "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+            "license": "MIT",
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.2.0",
                 "@eslint-community/regexpp": "^4.6.1",
@@ -18333,9 +17071,8 @@
         },
         "node_modules/eslint-config-airbnb": {
             "version": "19.0.4",
-            "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz",
-            "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "eslint-config-airbnb-base": "^15.0.0",
                 "object.assign": "^4.1.2",
@@ -18354,9 +17091,8 @@
         },
         "node_modules/eslint-config-airbnb-base": {
             "version": "15.0.0",
-            "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
-            "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "confusing-browser-globals": "^1.0.10",
                 "object.assign": "^4.1.2",
@@ -18373,9 +17109,8 @@
         },
         "node_modules/eslint-config-esnext": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/eslint-config-esnext/-/eslint-config-esnext-4.1.0.tgz",
-            "integrity": "sha512-GhfVEXdqYKEIIj7j+Fw2SQdL9qyZMekgXfq6PyXM66cQw0B435ddjz3P3kxOBVihMRJ0xGYjosaveQz5Y6z0uA==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "babel-eslint": "^10.0.1",
                 "eslint": "^6.8.0",
@@ -18388,9 +17123,8 @@
         },
         "node_modules/eslint-config-esnext/node_modules/acorn": {
             "version": "7.4.1",
-            "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-            "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
             "dev": true,
+            "license": "MIT",
             "bin": {
                 "acorn": "bin/acorn"
             },
@@ -18400,18 +17134,16 @@
         },
         "node_modules/eslint-config-esnext/node_modules/ansi-regex": {
             "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
-            "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/eslint-config-esnext/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -18419,9 +17151,8 @@
         },
         "node_modules/eslint-config-esnext/node_modules/cross-spawn": {
             "version": "6.0.5",
-            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-            "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "nice-try": "^1.0.4",
                 "path-key": "^2.0.1",
@@ -18435,18 +17166,16 @@
         },
         "node_modules/eslint-config-esnext/node_modules/cross-spawn/node_modules/semver": {
             "version": "5.7.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
-            "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
             "dev": true,
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver"
             }
         },
         "node_modules/eslint-config-esnext/node_modules/eslint": {
             "version": "6.8.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
-            "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@babel/code-frame": "^7.0.0",
                 "ajv": "^6.10.0",
@@ -18498,9 +17227,8 @@
         },
         "node_modules/eslint-config-esnext/node_modules/eslint-scope": {
             "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-            "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
             "dev": true,
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "esrecurse": "^4.3.0",
                 "estraverse": "^4.1.1"
@@ -18511,9 +17239,8 @@
         },
         "node_modules/eslint-config-esnext/node_modules/eslint-utils": {
             "version": "1.4.3",
-            "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
-            "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "eslint-visitor-keys": "^1.1.0"
             },
@@ -18523,18 +17250,16 @@
         },
         "node_modules/eslint-config-esnext/node_modules/eslint-visitor-keys": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-            "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
             "dev": true,
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/eslint-config-esnext/node_modules/espree": {
             "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
-            "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
             "dev": true,
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "acorn": "^7.1.1",
                 "acorn-jsx": "^5.2.0",
@@ -18546,18 +17271,16 @@
         },
         "node_modules/eslint-config-esnext/node_modules/estraverse": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-            "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
             "dev": true,
+            "license": "BSD-2-Clause",
             "engines": {
                 "node": ">=4.0"
             }
         },
         "node_modules/eslint-config-esnext/node_modules/file-entry-cache": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
-            "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "flat-cache": "^2.0.1"
             },
@@ -18567,9 +17290,8 @@
         },
         "node_modules/eslint-config-esnext/node_modules/flat-cache": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
-            "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "flatted": "^2.0.0",
                 "rimraf": "2.6.3",
@@ -18581,16 +17303,13 @@
         },
         "node_modules/eslint-config-esnext/node_modules/flatted": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
-            "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
-            "dev": true
+            "dev": true,
+            "license": "ISC"
         },
         "node_modules/eslint-config-esnext/node_modules/glob": {
             "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -18608,9 +17327,8 @@
         },
         "node_modules/eslint-config-esnext/node_modules/glob-parent": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "is-glob": "^4.0.1"
             },
@@ -18620,9 +17338,8 @@
         },
         "node_modules/eslint-config-esnext/node_modules/globals": {
             "version": "12.4.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
-            "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "type-fest": "^0.8.1"
             },
@@ -18635,18 +17352,16 @@
         },
         "node_modules/eslint-config-esnext/node_modules/ignore": {
             "version": "4.0.6",
-            "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
-            "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 4"
             }
         },
         "node_modules/eslint-config-esnext/node_modules/levn": {
             "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-            "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "prelude-ls": "~1.1.2",
                 "type-check": "~0.3.2"
@@ -18657,9 +17372,8 @@
         },
         "node_modules/eslint-config-esnext/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -18669,9 +17383,8 @@
         },
         "node_modules/eslint-config-esnext/node_modules/mkdirp": {
             "version": "0.5.6",
-            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-            "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "minimist": "^1.2.6"
             },
@@ -18681,9 +17394,8 @@
         },
         "node_modules/eslint-config-esnext/node_modules/optionator": {
             "version": "0.8.3",
-            "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-            "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "deep-is": "~0.1.3",
                 "fast-levenshtein": "~2.0.6",
@@ -18698,17 +17410,14 @@
         },
         "node_modules/eslint-config-esnext/node_modules/path-key": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-            "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/eslint-config-esnext/node_modules/prelude-ls": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-            "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
             "dev": true,
             "engines": {
                 "node": ">= 0.8.0"
@@ -18716,19 +17425,16 @@
         },
         "node_modules/eslint-config-esnext/node_modules/regexpp": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
-            "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=6.5.0"
             }
         },
         "node_modules/eslint-config-esnext/node_modules/rimraf": {
             "version": "2.6.3",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
-            "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
-            "deprecated": "Rimraf versions prior to v4 are no longer supported",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "glob": "^7.1.3"
             },
@@ -18738,9 +17444,8 @@
         },
         "node_modules/eslint-config-esnext/node_modules/shebang-command": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-            "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "shebang-regex": "^1.0.0"
             },
@@ -18750,18 +17455,16 @@
         },
         "node_modules/eslint-config-esnext/node_modules/shebang-regex": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-            "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/eslint-config-esnext/node_modules/strip-ansi": {
             "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-            "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-regex": "^4.1.0"
             },
@@ -18771,9 +17474,8 @@
         },
         "node_modules/eslint-config-esnext/node_modules/type-check": {
             "version": "0.3.2",
-            "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-            "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "prelude-ls": "~1.1.2"
             },
@@ -18783,18 +17485,16 @@
         },
         "node_modules/eslint-config-esnext/node_modules/type-fest": {
             "version": "0.8.1",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-            "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
             "dev": true,
+            "license": "(MIT OR CC0-1.0)",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/eslint-config-esnext/node_modules/which": {
             "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "isexe": "^2.0.0"
             },
@@ -18804,9 +17504,8 @@
         },
         "node_modules/eslint-config-node": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/eslint-config-node/-/eslint-config-node-4.1.0.tgz",
-            "integrity": "sha512-Wz17xV5O2WFG8fGdMYEBdbiL6TL7YNJSJvSX9V4sXQownewfYmoqlly7wxqLkOUv/57pq6LnnotMiQQrrPjCqQ==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "eslint": "^6.8.0",
                 "eslint-config-esnext": "^4.1.0"
@@ -18817,9 +17516,8 @@
         },
         "node_modules/eslint-config-node/node_modules/acorn": {
             "version": "7.4.1",
-            "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-            "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
             "dev": true,
+            "license": "MIT",
             "bin": {
                 "acorn": "bin/acorn"
             },
@@ -18829,18 +17527,16 @@
         },
         "node_modules/eslint-config-node/node_modules/ansi-regex": {
             "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
-            "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/eslint-config-node/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -18848,9 +17544,8 @@
         },
         "node_modules/eslint-config-node/node_modules/cross-spawn": {
             "version": "6.0.5",
-            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-            "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "nice-try": "^1.0.4",
                 "path-key": "^2.0.1",
@@ -18864,18 +17559,16 @@
         },
         "node_modules/eslint-config-node/node_modules/cross-spawn/node_modules/semver": {
             "version": "5.7.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
-            "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
             "dev": true,
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver"
             }
         },
         "node_modules/eslint-config-node/node_modules/eslint": {
             "version": "6.8.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
-            "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@babel/code-frame": "^7.0.0",
                 "ajv": "^6.10.0",
@@ -18927,9 +17620,8 @@
         },
         "node_modules/eslint-config-node/node_modules/eslint-scope": {
             "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-            "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
             "dev": true,
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "esrecurse": "^4.3.0",
                 "estraverse": "^4.1.1"
@@ -18940,9 +17632,8 @@
         },
         "node_modules/eslint-config-node/node_modules/eslint-utils": {
             "version": "1.4.3",
-            "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
-            "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "eslint-visitor-keys": "^1.1.0"
             },
@@ -18952,18 +17643,16 @@
         },
         "node_modules/eslint-config-node/node_modules/eslint-visitor-keys": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-            "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
             "dev": true,
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/eslint-config-node/node_modules/espree": {
             "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
-            "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
             "dev": true,
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "acorn": "^7.1.1",
                 "acorn-jsx": "^5.2.0",
@@ -18975,18 +17664,16 @@
         },
         "node_modules/eslint-config-node/node_modules/estraverse": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-            "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
             "dev": true,
+            "license": "BSD-2-Clause",
             "engines": {
                 "node": ">=4.0"
             }
         },
         "node_modules/eslint-config-node/node_modules/file-entry-cache": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
-            "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "flat-cache": "^2.0.1"
             },
@@ -18996,9 +17683,8 @@
         },
         "node_modules/eslint-config-node/node_modules/flat-cache": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
-            "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "flatted": "^2.0.0",
                 "rimraf": "2.6.3",
@@ -19010,16 +17696,13 @@
         },
         "node_modules/eslint-config-node/node_modules/flatted": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
-            "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
-            "dev": true
+            "dev": true,
+            "license": "ISC"
         },
         "node_modules/eslint-config-node/node_modules/glob": {
             "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -19037,9 +17720,8 @@
         },
         "node_modules/eslint-config-node/node_modules/glob-parent": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "is-glob": "^4.0.1"
             },
@@ -19049,9 +17731,8 @@
         },
         "node_modules/eslint-config-node/node_modules/globals": {
             "version": "12.4.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
-            "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "type-fest": "^0.8.1"
             },
@@ -19064,18 +17745,16 @@
         },
         "node_modules/eslint-config-node/node_modules/ignore": {
             "version": "4.0.6",
-            "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
-            "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 4"
             }
         },
         "node_modules/eslint-config-node/node_modules/levn": {
             "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-            "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "prelude-ls": "~1.1.2",
                 "type-check": "~0.3.2"
@@ -19086,9 +17765,8 @@
         },
         "node_modules/eslint-config-node/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -19098,9 +17776,8 @@
         },
         "node_modules/eslint-config-node/node_modules/mkdirp": {
             "version": "0.5.6",
-            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-            "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "minimist": "^1.2.6"
             },
@@ -19110,9 +17787,8 @@
         },
         "node_modules/eslint-config-node/node_modules/optionator": {
             "version": "0.8.3",
-            "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-            "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "deep-is": "~0.1.3",
                 "fast-levenshtein": "~2.0.6",
@@ -19127,17 +17803,14 @@
         },
         "node_modules/eslint-config-node/node_modules/path-key": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-            "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/eslint-config-node/node_modules/prelude-ls": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-            "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
             "dev": true,
             "engines": {
                 "node": ">= 0.8.0"
@@ -19145,19 +17818,16 @@
         },
         "node_modules/eslint-config-node/node_modules/regexpp": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
-            "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=6.5.0"
             }
         },
         "node_modules/eslint-config-node/node_modules/rimraf": {
             "version": "2.6.3",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
-            "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
-            "deprecated": "Rimraf versions prior to v4 are no longer supported",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "glob": "^7.1.3"
             },
@@ -19167,9 +17837,8 @@
         },
         "node_modules/eslint-config-node/node_modules/shebang-command": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-            "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "shebang-regex": "^1.0.0"
             },
@@ -19179,18 +17848,16 @@
         },
         "node_modules/eslint-config-node/node_modules/shebang-regex": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-            "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/eslint-config-node/node_modules/strip-ansi": {
             "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-            "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-regex": "^4.1.0"
             },
@@ -19200,9 +17867,8 @@
         },
         "node_modules/eslint-config-node/node_modules/type-check": {
             "version": "0.3.2",
-            "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-            "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "prelude-ls": "~1.1.2"
             },
@@ -19212,18 +17878,16 @@
         },
         "node_modules/eslint-config-node/node_modules/type-fest": {
             "version": "0.8.1",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-            "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
             "dev": true,
+            "license": "(MIT OR CC0-1.0)",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/eslint-config-node/node_modules/which": {
             "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "isexe": "^2.0.0"
             },
@@ -19233,9 +17897,8 @@
         },
         "node_modules/eslint-config-prettier": {
             "version": "9.1.0",
-            "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
-            "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
             "dev": true,
+            "license": "MIT",
             "bin": {
                 "eslint-config-prettier": "bin/cli.js"
             },
@@ -19245,9 +17908,8 @@
         },
         "node_modules/eslint-import-resolver-node": {
             "version": "0.3.9",
-            "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
-            "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "debug": "^3.2.7",
                 "is-core-module": "^2.13.0",
@@ -19256,17 +17918,16 @@
         },
         "node_modules/eslint-import-resolver-node/node_modules/debug": {
             "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ms": "^2.1.1"
             }
         },
         "node_modules/eslint-import-resolver-typescript": {
             "version": "3.6.1",
-            "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "debug": "^4.3.4",
                 "enhanced-resolve": "^5.12.0",
@@ -19289,9 +17950,8 @@
         },
         "node_modules/eslint-module-utils": {
             "version": "2.8.1",
-            "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
-            "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "debug": "^3.2.7"
             },
@@ -19306,18 +17966,16 @@
         },
         "node_modules/eslint-module-utils/node_modules/debug": {
             "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ms": "^2.1.1"
             }
         },
         "node_modules/eslint-plugin-babel": {
             "version": "5.3.1",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz",
-            "integrity": "sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "eslint-rule-composer": "^0.3.0"
             },
@@ -19330,9 +17988,8 @@
         },
         "node_modules/eslint-plugin-es": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
-            "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "eslint-utils": "^2.0.0",
                 "regexpp": "^3.0.0"
@@ -19349,9 +18006,8 @@
         },
         "node_modules/eslint-plugin-import": {
             "version": "2.29.1",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
-            "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "array-includes": "^3.1.7",
                 "array.prototype.findlastindex": "^1.2.3",
@@ -19380,9 +18036,8 @@
         },
         "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -19390,18 +18045,16 @@
         },
         "node_modules/eslint-plugin-import/node_modules/debug": {
             "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ms": "^2.1.1"
             }
         },
         "node_modules/eslint-plugin-import/node_modules/doctrine": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-            "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
             "dev": true,
+            "license": "Apache-2.0",
             "dependencies": {
                 "esutils": "^2.0.2"
             },
@@ -19411,9 +18064,8 @@
         },
         "node_modules/eslint-plugin-import/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -19423,9 +18075,8 @@
         },
         "node_modules/eslint-plugin-jsx-a11y": {
             "version": "6.8.0",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz",
-            "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.23.2",
                 "aria-query": "^5.3.0",
@@ -19453,9 +18104,8 @@
         },
         "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -19463,9 +18113,8 @@
         },
         "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -19475,9 +18124,8 @@
         },
         "node_modules/eslint-plugin-node": {
             "version": "11.1.0",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
-            "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "eslint-plugin-es": "^3.0.0",
                 "eslint-utils": "^2.0.0",
@@ -19495,9 +18143,8 @@
         },
         "node_modules/eslint-plugin-node/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -19505,9 +18152,8 @@
         },
         "node_modules/eslint-plugin-node/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -19517,9 +18163,8 @@
         },
         "node_modules/eslint-plugin-prettier": {
             "version": "5.1.3",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
-            "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "prettier-linter-helpers": "^1.0.0",
                 "synckit": "^0.8.6"
@@ -19547,8 +18192,8 @@
         },
         "node_modules/eslint-plugin-react": {
             "version": "7.34.1",
-            "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "array-includes": "^3.1.7",
                 "array.prototype.findlast": "^1.2.4",
@@ -19578,8 +18223,8 @@
         },
         "node_modules/eslint-plugin-react-hooks": {
             "version": "4.6.2",
-            "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=10"
             },
@@ -19589,9 +18234,8 @@
         },
         "node_modules/eslint-plugin-react/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -19599,9 +18243,8 @@
         },
         "node_modules/eslint-plugin-react/node_modules/doctrine": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-            "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
             "dev": true,
+            "license": "Apache-2.0",
             "dependencies": {
                 "esutils": "^2.0.2"
             },
@@ -19611,9 +18254,8 @@
         },
         "node_modules/eslint-plugin-react/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -19623,9 +18265,8 @@
         },
         "node_modules/eslint-plugin-react/node_modules/resolve": {
             "version": "2.0.0-next.5",
-            "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
-            "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "is-core-module": "^2.13.0",
                 "path-parse": "^1.0.7",
@@ -19640,17 +18281,15 @@
         },
         "node_modules/eslint-rule-composer": {
             "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz",
-            "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=4.0.0"
             }
         },
         "node_modules/eslint-scope": {
             "version": "7.2.2",
-            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
-            "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "esrecurse": "^4.3.0",
                 "estraverse": "^5.2.0"
@@ -19664,9 +18303,8 @@
         },
         "node_modules/eslint-utils": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
-            "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "eslint-visitor-keys": "^1.1.0"
             },
@@ -19679,17 +18317,15 @@
         },
         "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-            "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
             "dev": true,
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/eslint-visitor-keys": {
             "version": "3.4.3",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-            "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
             },
@@ -19699,7 +18335,7 @@
         },
         "node_modules/eslint-webpack-plugin": {
             "version": "4.1.0",
-            "integrity": "sha512-C3wAG2jyockIhN0YRLuKieKj2nx/gnE/VHmoHemD5ifnAtY6ZU+jNPfzPoX4Zd6RIbUyWTiZUh/ofUlBhoAX7w==",
+            "license": "MIT",
             "dependencies": {
                 "@types/eslint": "^8.56.5",
                 "jest-worker": "^29.7.0",
@@ -19721,16 +18357,14 @@
         },
         "node_modules/eslint/node_modules/@eslint/js": {
             "version": "8.57.0",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
-            "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+            "license": "MIT",
             "engines": {
                 "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
             }
         },
         "node_modules/eslint/node_modules/ansi-styles": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+            "license": "MIT",
             "dependencies": {
                 "color-convert": "^2.0.1"
             },
@@ -19743,13 +18377,11 @@
         },
         "node_modules/eslint/node_modules/argparse": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+            "license": "Python-2.0"
         },
         "node_modules/eslint/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -19757,8 +18389,7 @@
         },
         "node_modules/eslint/node_modules/chalk": {
             "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-            "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^4.1.0",
                 "supports-color": "^7.1.0"
@@ -19772,8 +18403,7 @@
         },
         "node_modules/eslint/node_modules/color-convert": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+            "license": "MIT",
             "dependencies": {
                 "color-name": "~1.1.4"
             },
@@ -19783,13 +18413,11 @@
         },
         "node_modules/eslint/node_modules/color-name": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+            "license": "MIT"
         },
         "node_modules/eslint/node_modules/globals": {
             "version": "13.24.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-            "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+            "license": "MIT",
             "dependencies": {
                 "type-fest": "^0.20.2"
             },
@@ -19800,18 +18428,26 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
+        "node_modules/eslint/node_modules/globals/node_modules/type-fest": {
+            "version": "0.20.2",
+            "license": "(MIT OR CC0-1.0)",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/eslint/node_modules/has-flag": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/eslint/node_modules/js-yaml": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-            "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+            "license": "MIT",
             "dependencies": {
                 "argparse": "^2.0.1"
             },
@@ -19821,8 +18457,7 @@
         },
         "node_modules/eslint/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -19832,8 +18467,7 @@
         },
         "node_modules/eslint/node_modules/supports-color": {
             "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-            "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+            "license": "MIT",
             "dependencies": {
                 "has-flag": "^4.0.0"
             },
@@ -19843,16 +18477,14 @@
         },
         "node_modules/esm": {
             "version": "3.2.25",
-            "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
-            "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/espree": {
             "version": "9.6.1",
-            "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-            "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "acorn": "^8.9.0",
                 "acorn-jsx": "^5.3.2",
@@ -19867,8 +18499,7 @@
         },
         "node_modules/esprima": {
             "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-            "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+            "license": "BSD-2-Clause",
             "bin": {
                 "esparse": "bin/esparse.js",
                 "esvalidate": "bin/esvalidate.js"
@@ -19879,8 +18510,7 @@
         },
         "node_modules/esquery": {
             "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
-            "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "estraverse": "^5.1.0"
             },
@@ -19890,8 +18520,7 @@
         },
         "node_modules/esrecurse": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-            "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "estraverse": "^5.2.0"
             },
@@ -19901,16 +18530,14 @@
         },
         "node_modules/estraverse": {
             "version": "5.3.0",
-            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-            "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+            "license": "BSD-2-Clause",
             "engines": {
                 "node": ">=4.0"
             }
         },
         "node_modules/estree-util-is-identifier-name": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
-            "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
+            "license": "MIT",
             "funding": {
                 "type": "opencollective",
                 "url": "https://opencollective.com/unified"
@@ -19918,51 +18545,44 @@
         },
         "node_modules/estree-walker": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-            "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+            "license": "MIT"
         },
         "node_modules/esutils": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-            "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+            "license": "BSD-2-Clause",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/etag": {
             "version": "1.8.1",
-            "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-            "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/event-target-shim": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
-            "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/eventemitter3": {
             "version": "4.0.7",
-            "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
-            "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
+            "license": "MIT"
         },
         "node_modules/events": {
             "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
-            "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.8.x"
             }
         },
         "node_modules/execa": {
             "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
-            "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "cross-spawn": "^7.0.3",
                 "get-stream": "^6.0.0",
@@ -19983,9 +18603,8 @@
         },
         "node_modules/execa/node_modules/get-stream": {
             "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
-            "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=10"
             },
@@ -19995,45 +18614,36 @@
         },
         "node_modules/execa/node_modules/signal-exit": {
             "version": "3.0.7",
-            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-            "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-            "dev": true
+            "dev": true,
+            "license": "ISC"
         },
         "node_modules/exif": {
             "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/exif/-/exif-0.6.0.tgz",
-            "integrity": "sha512-gEwM4uanNMfLnDNKclZ7jPEA99E3rpy4ntoS6QW8u6murZjl1o8qRaPdMoC46Syg3d9/QaET0bYKhWlTwJCPgg==",
             "dependencies": {
                 "debug": "^2.2"
             }
         },
         "node_modules/exif-parser": {
-            "version": "0.1.12",
-            "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz",
-            "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw=="
+            "version": "0.1.12"
         },
         "node_modules/exif/node_modules/debug": {
             "version": "2.6.9",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "license": "MIT",
             "dependencies": {
                 "ms": "2.0.0"
             }
         },
         "node_modules/exif/node_modules/ms": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+            "license": "MIT"
         },
         "node_modules/exifr": {
             "version": "7.1.3",
-            "resolved": "https://registry.npmjs.org/exifr/-/exifr-7.1.3.tgz",
-            "integrity": "sha512-g/aje2noHivrRSLbAUtBPWFbxKdKhgj/xr1vATDdUXPOFYJlQ62Ft0oy+72V6XLIpDJfHs6gXLbBLAolqOXYRw=="
+            "license": "MIT"
         },
         "node_modules/expand-tilde": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
-            "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==",
+            "license": "MIT",
             "dependencies": {
                 "homedir-polyfill": "^1.0.1"
             },
@@ -20043,13 +18653,11 @@
         },
         "node_modules/exponential-backoff": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz",
-            "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw=="
+            "license": "Apache-2.0"
         },
         "node_modules/express": {
             "version": "4.19.2",
-            "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
-            "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+            "license": "MIT",
             "dependencies": {
                 "accepts": "~1.3.8",
                 "array-flatten": "1.1.1",
@@ -20089,8 +18697,6 @@
         },
         "node_modules/express-flash": {
             "version": "0.0.2",
-            "resolved": "https://registry.npmjs.org/express-flash/-/express-flash-0.0.2.tgz",
-            "integrity": "sha512-QVUR0ZZRCaa8+iPHoUQaQJrQWcQuK/Q+19M7IUIdIEtvwhrA/ifHT7y1CVJI41YfGiOQnbGtn3uvd2vOdgu58A==",
             "dependencies": {
                 "connect-flash": "0.1.x"
             },
@@ -20100,8 +18706,7 @@
         },
         "node_modules/express-session": {
             "version": "1.18.0",
-            "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.0.tgz",
-            "integrity": "sha512-m93QLWr0ju+rOwApSsyso838LQwgfs44QtOP/WBiwtAgPIo/SAh1a5c6nn2BR6mFNZehTpqKDESzP+fRHVbxwQ==",
+            "license": "MIT",
             "dependencies": {
                 "cookie": "0.6.0",
                 "cookie-signature": "1.0.7",
@@ -20118,33 +18723,29 @@
         },
         "node_modules/express-session/node_modules/cookie": {
             "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
-            "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/express-session/node_modules/cookie-signature": {
             "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
-            "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA=="
+            "license": "MIT"
         },
         "node_modules/express-session/node_modules/debug": {
             "version": "2.6.9",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "license": "MIT",
             "dependencies": {
                 "ms": "2.0.0"
             }
         },
         "node_modules/express-session/node_modules/ms": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+            "license": "MIT"
         },
         "node_modules/express-validator": {
             "version": "7.1.0",
-            "integrity": "sha512-ePn6NXjHRZiZkwTiU1Rl2hy6aUqmi6Cb4/s8sfUsKH7j2yYl9azSpl8xEHcOj1grzzQ+UBEoLWtE1s6FDxW++g==",
+            "license": "MIT",
             "dependencies": {
                 "lodash": "^4.17.21",
                 "validator": "~13.12.0"
@@ -20155,34 +18756,29 @@
         },
         "node_modules/express/node_modules/cookie": {
             "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
-            "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/express/node_modules/debug": {
             "version": "2.6.9",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "license": "MIT",
             "dependencies": {
                 "ms": "2.0.0"
             }
         },
         "node_modules/express/node_modules/ms": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+            "license": "MIT"
         },
         "node_modules/extend": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-            "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+            "license": "MIT"
         },
         "node_modules/extend-shallow": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-            "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+            "license": "MIT",
             "dependencies": {
                 "is-extendable": "^0.1.0"
             },
@@ -20192,9 +18788,8 @@
         },
         "node_modules/external-editor": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
-            "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "chardet": "^0.7.0",
                 "iconv-lite": "^0.4.24",
@@ -20206,41 +18801,35 @@
         },
         "node_modules/extract-colors": {
             "version": "4.0.6",
-            "integrity": "sha512-U+pYyQKXCSHOmtZPIEJBGLJjLDiqS+oOub2ILA3a7UGt9+IvZvwAN3hOPFjUgT+gX/apSBwP5vBgnKMlV0fy8Q=="
+            "license": "GPL-3.0"
         },
         "node_modules/extsprintf": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-            "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
             "engines": [
                 "node >=0.6.0"
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/fast-deep-equal": {
             "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-            "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+            "license": "MIT"
         },
         "node_modules/fast-diff": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
-            "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
-            "dev": true
+            "dev": true,
+            "license": "Apache-2.0"
         },
         "node_modules/fast-equals": {
             "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-4.0.3.tgz",
-            "integrity": "sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg=="
+            "license": "MIT"
         },
         "node_modules/fast-fifo": {
             "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
-            "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
+            "license": "MIT"
         },
         "node_modules/fast-glob": {
             "version": "3.3.2",
-            "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
-            "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+            "license": "MIT",
             "dependencies": {
                 "@nodelib/fs.stat": "^2.0.2",
                 "@nodelib/fs.walk": "^1.2.3",
@@ -20254,8 +18843,7 @@
         },
         "node_modules/fast-glob/node_modules/glob-parent": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+            "license": "ISC",
             "dependencies": {
                 "is-glob": "^4.0.1"
             },
@@ -20265,35 +18853,30 @@
         },
         "node_modules/fast-json-stable-stringify": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-            "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+            "license": "MIT"
         },
         "node_modules/fast-levenshtein": {
             "version": "2.0.6",
-            "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-            "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
+            "license": "MIT"
         },
         "node_modules/fastest-levenshtein": {
             "version": "1.0.16",
-            "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
-            "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 4.9.1"
             }
         },
         "node_modules/fastq": {
             "version": "1.17.1",
-            "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
-            "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+            "license": "ISC",
             "dependencies": {
                 "reusify": "^1.0.4"
             }
         },
         "node_modules/faye-websocket": {
             "version": "0.11.4",
-            "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
-            "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
             "dev": true,
+            "license": "Apache-2.0",
             "dependencies": {
                 "websocket-driver": ">=0.5.1"
             },
@@ -20303,8 +18886,7 @@
         },
         "node_modules/fetch-blob": {
             "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz",
-            "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==",
+            "license": "MIT",
             "engines": {
                 "node": "^10.17.0 || >=12.3.0"
             },
@@ -20316,22 +18898,18 @@
         },
         "node_modules/fflate": {
             "version": "0.8.2",
-            "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
-            "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="
+            "license": "MIT"
         },
         "node_modules/ffmpeg": {
             "version": "0.0.4",
-            "resolved": "https://registry.npmjs.org/ffmpeg/-/ffmpeg-0.0.4.tgz",
-            "integrity": "sha512-3TgWUJJlZGQn+crJFyhsO/oNeRRnGTy6GhgS98oUCIfZrOW5haPPV7DUfOm3xJcHr5q3TJpjk2GudPutrNisRA==",
             "dependencies": {
                 "when": ">= 0.0.1"
             }
         },
         "node_modules/figures": {
             "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
-            "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "escape-string-regexp": "^1.0.5"
             },
@@ -20344,17 +18922,15 @@
         },
         "node_modules/figures/node_modules/escape-string-regexp": {
             "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-            "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=0.8.0"
             }
         },
         "node_modules/file-entry-cache": {
             "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-            "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+            "license": "MIT",
             "dependencies": {
                 "flat-cache": "^3.0.4"
             },
@@ -20364,8 +18940,7 @@
         },
         "node_modules/file-loader": {
             "version": "6.2.0",
-            "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
-            "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
+            "license": "MIT",
             "dependencies": {
                 "loader-utils": "^2.0.0",
                 "schema-utils": "^3.0.0"
@@ -20383,8 +18958,7 @@
         },
         "node_modules/file-loader/node_modules/schema-utils": {
             "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
-            "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/json-schema": "^7.0.8",
                 "ajv": "^6.12.5",
@@ -20400,13 +18974,11 @@
         },
         "node_modules/file-saver": {
             "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
-            "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+            "license": "MIT"
         },
         "node_modules/file-type": {
             "version": "16.5.4",
-            "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
-            "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
+            "license": "MIT",
             "dependencies": {
                 "readable-web-to-node-stream": "^3.0.0",
                 "strtok3": "^6.2.4",
@@ -20421,8 +18993,7 @@
         },
         "node_modules/fill-range": {
             "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
-            "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+            "license": "MIT",
             "dependencies": {
                 "to-regex-range": "^5.0.1"
             },
@@ -20432,16 +19003,14 @@
         },
         "node_modules/filter-obj": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz",
-            "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/finalhandler": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
-            "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "2.6.9",
                 "encodeurl": "~1.0.2",
@@ -20457,29 +19026,24 @@
         },
         "node_modules/finalhandler/node_modules/debug": {
             "version": "2.6.9",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "license": "MIT",
             "dependencies": {
                 "ms": "2.0.0"
             }
         },
         "node_modules/finalhandler/node_modules/ms": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+            "license": "MIT"
         },
         "node_modules/find": {
             "version": "0.1.7",
-            "resolved": "https://registry.npmjs.org/find/-/find-0.1.7.tgz",
-            "integrity": "sha512-jPrupTOe/pO//3a9Ty2o4NqQCp0L46UG+swUnfFtdmtQVN8pEltKpAqR7Nuf6vWn0GBXx5w+R1MyZzqwjEIqdA==",
             "dependencies": {
                 "traverse-chain": "~0.1.0"
             }
         },
         "node_modules/find-cache-dir": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
-            "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
+            "license": "MIT",
             "dependencies": {
                 "common-path-prefix": "^3.0.0",
                 "pkg-dir": "^7.0.0"
@@ -20493,8 +19057,7 @@
         },
         "node_modules/find-in-files": {
             "version": "0.5.0",
-            "resolved": "https://registry.npmjs.org/find-in-files/-/find-in-files-0.5.0.tgz",
-            "integrity": "sha512-VraTc6HdtdSHmAp0yJpAy20yPttGKzyBWc7b7FPnnsX9TOgmKx0g9xajizpF/iuu4IvNK4TP0SpyBT9zAlwG+g==",
+            "license": "MIT",
             "dependencies": {
                 "find": "^0.1.5",
                 "q": "^1.0.1"
@@ -20502,13 +19065,11 @@
         },
         "node_modules/find-root": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
-            "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
+            "license": "MIT"
         },
         "node_modules/find-up": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
-            "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+            "license": "MIT",
             "dependencies": {
                 "locate-path": "^6.0.0",
                 "path-exists": "^4.0.0"
@@ -20522,8 +19083,7 @@
         },
         "node_modules/findup-sync": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz",
-            "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==",
+            "license": "MIT",
             "dependencies": {
                 "detect-file": "^1.0.0",
                 "is-glob": "^4.0.3",
@@ -20536,21 +19096,18 @@
         },
         "node_modules/fit-curve": {
             "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/fit-curve/-/fit-curve-0.2.0.tgz",
-            "integrity": "sha512-op7ofeL13getbqL5J5ACeNxTlLWzusn4/jjEjSVA1sS7PfXWumdtNITvLuTjSobis+jZzMil2rsJ3Vhw7OxQyQ=="
+            "license": "MIT"
         },
         "node_modules/flat": {
             "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
-            "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+            "license": "BSD-3-Clause",
             "bin": {
                 "flat": "cli.js"
             }
         },
         "node_modules/flat-cache": {
             "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
-            "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+            "license": "MIT",
             "dependencies": {
                 "flatted": "^3.2.9",
                 "keyv": "^4.5.3",
@@ -20562,8 +19119,7 @@
         },
         "node_modules/flat-cache/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -20571,9 +19127,7 @@
         },
         "node_modules/flat-cache/node_modules/glob": {
             "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "deprecated": "Glob versions prior to v9 are no longer supported",
+            "license": "ISC",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -20591,8 +19145,7 @@
         },
         "node_modules/flat-cache/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -20602,9 +19155,7 @@
         },
         "node_modules/flat-cache/node_modules/rimraf": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-            "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-            "deprecated": "Rimraf versions prior to v4 are no longer supported",
+            "license": "ISC",
             "dependencies": {
                 "glob": "^7.1.3"
             },
@@ -20617,13 +19168,11 @@
         },
         "node_modules/flatted": {
             "version": "3.3.1",
-            "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
-            "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw=="
+            "license": "ISC"
         },
         "node_modules/flexlayout-react": {
             "version": "0.7.15",
-            "resolved": "https://registry.npmjs.org/flexlayout-react/-/flexlayout-react-0.7.15.tgz",
-            "integrity": "sha512-ydTMdEoQO5BniylxVkSxa59rEY0+96lqqRII+QK+yq6028eHywPuxZawt4g45y5pMb9ptP4N9HPAQXAFsxwowQ==",
+            "license": "ISC",
             "peerDependencies": {
                 "react": "^18.0.0",
                 "react-dom": "^18.0.0"
@@ -20631,7 +19180,7 @@
         },
         "node_modules/fluent-ffmpeg": {
             "version": "2.1.3",
-            "integrity": "sha512-Be3narBNt2s6bsaqP6Jzq91heDgOEaDCJAXcE3qcma/EJBSy5FB4cvO31XBInuAuKBx8Kptf8dkhjK0IOru39Q==",
+            "license": "MIT",
             "dependencies": {
                 "async": "^0.2.9",
                 "which": "^1.1.1"
@@ -20641,14 +19190,11 @@
             }
         },
         "node_modules/fluent-ffmpeg/node_modules/async": {
-            "version": "0.2.10",
-            "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
-            "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
+            "version": "0.2.10"
         },
         "node_modules/fluent-ffmpeg/node_modules/which": {
             "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+            "license": "ISC",
             "dependencies": {
                 "isexe": "^2.0.0"
             },
@@ -20658,14 +19204,13 @@
         },
         "node_modules/follow-redirects": {
             "version": "1.15.6",
-            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
-            "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
             "funding": [
                 {
                     "type": "individual",
                     "url": "https://github.com/sponsors/RubenVerborgh"
                 }
             ],
+            "license": "MIT",
             "engines": {
                 "node": ">=4.0"
             },
@@ -20677,32 +19222,28 @@
         },
         "node_modules/for-each": {
             "version": "0.3.3",
-            "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
-            "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+            "license": "MIT",
             "dependencies": {
                 "is-callable": "^1.1.3"
             }
         },
         "node_modules/for-each-property": {
             "version": "0.0.4",
-            "resolved": "https://registry.npmjs.org/for-each-property/-/for-each-property-0.0.4.tgz",
-            "integrity": "sha512-xYs28PM0CKXETFzuGC6ZooH0voZlsSDZwidJcy92flQJi3PK7i3gZx23xHXCPOaD4zmet3bDo+wS7E7SujrlCw==",
+            "license": "MIT",
             "dependencies": {
                 "get-prototype-chain": "^1.0.1"
             }
         },
         "node_modules/for-each-property-deep": {
             "version": "0.0.3",
-            "resolved": "https://registry.npmjs.org/for-each-property-deep/-/for-each-property-deep-0.0.3.tgz",
-            "integrity": "sha512-qzP8QkODWVVRPpWiBZacSbBl67cTTWoBfxMG0wE46AsS1yl7qv05sGN+dHvD4s4tnvl/goe6Sp4qBI+rlVBgNg==",
+            "license": "MIT",
             "dependencies": {
                 "for-each-property": "0.0.4"
             }
         },
         "node_modules/foreground-child": {
             "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
-            "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
+            "license": "ISC",
             "dependencies": {
                 "cross-spawn": "^7.0.0",
                 "signal-exit": "^4.0.1"
@@ -20716,16 +19257,14 @@
         },
         "node_modules/forever-agent": {
             "version": "0.6.1",
-            "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-            "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": "*"
             }
         },
         "node_modules/fork-ts-checker-webpack-plugin": {
             "version": "9.0.2",
-            "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz",
-            "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/code-frame": "^7.16.7",
                 "chalk": "^4.1.2",
@@ -20751,8 +19290,7 @@
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+            "license": "MIT",
             "dependencies": {
                 "color-convert": "^2.0.1"
             },
@@ -20765,13 +19303,11 @@
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/argparse": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+            "license": "Python-2.0"
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -20779,8 +19315,7 @@
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": {
             "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-            "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^4.1.0",
                 "supports-color": "^7.1.0"
@@ -20794,8 +19329,7 @@
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+            "license": "MIT",
             "dependencies": {
                 "color-name": "~1.1.4"
             },
@@ -20805,13 +19339,11 @@
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+            "license": "MIT"
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": {
             "version": "8.3.6",
-            "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
-            "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
+            "license": "MIT",
             "dependencies": {
                 "import-fresh": "^3.3.0",
                 "js-yaml": "^4.1.0",
@@ -20835,16 +19367,14 @@
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/js-yaml": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-            "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+            "license": "MIT",
             "dependencies": {
                 "argparse": "^2.0.1"
             },
@@ -20854,8 +19384,7 @@
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -20865,8 +19394,7 @@
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": {
             "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
-            "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/json-schema": "^7.0.8",
                 "ajv": "^6.12.5",
@@ -20882,8 +19410,7 @@
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -20893,8 +19420,7 @@
         },
         "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": {
             "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-            "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+            "license": "MIT",
             "dependencies": {
                 "has-flag": "^4.0.0"
             },
@@ -20904,8 +19430,7 @@
         },
         "node_modules/form-data": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
-            "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+            "license": "MIT",
             "dependencies": {
                 "asynckit": "^0.4.0",
                 "combined-stream": "^1.0.8",
@@ -20917,16 +19442,14 @@
         },
         "node_modules/form-data-encoder": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz",
-            "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 18"
             }
         },
         "node_modules/formdata-node": {
             "version": "4.4.1",
-            "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
-            "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==",
+            "license": "MIT",
             "dependencies": {
                 "node-domexception": "1.0.0",
                 "web-streams-polyfill": "4.0.0-beta.3"
@@ -20937,16 +19460,14 @@
         },
         "node_modules/formdata-node/node_modules/web-streams-polyfill": {
             "version": "4.0.0-beta.3",
-            "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz",
-            "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 14"
             }
         },
         "node_modules/formidable": {
             "version": "3.5.1",
-            "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz",
-            "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==",
+            "license": "MIT",
             "dependencies": {
                 "dezalgo": "^1.0.4",
                 "hexoid": "^1.0.0",
@@ -20958,24 +19479,21 @@
         },
         "node_modules/forwarded": {
             "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
-            "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/fresh": {
             "version": "0.5.2",
-            "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
-            "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/fs-extra": {
             "version": "10.1.0",
-            "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
-            "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+            "license": "MIT",
             "dependencies": {
                 "graceful-fs": "^4.2.0",
                 "jsonfile": "^6.0.1",
@@ -20987,8 +19505,7 @@
         },
         "node_modules/fs-minipass": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
-            "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+            "license": "ISC",
             "dependencies": {
                 "minipass": "^3.0.0"
             },
@@ -20998,8 +19515,7 @@
         },
         "node_modules/fs-minipass/node_modules/minipass": {
             "version": "3.3.6",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+            "license": "ISC",
             "dependencies": {
                 "yallist": "^4.0.0"
             },
@@ -21009,24 +19525,19 @@
         },
         "node_modules/fs-minipass/node_modules/yallist": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+            "license": "ISC"
         },
         "node_modules/fs-monkey": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz",
-            "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg=="
+            "license": "Unlicense"
         },
         "node_modules/fs.realpath": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-            "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+            "license": "ISC"
         },
         "node_modules/fsevents": {
             "version": "2.3.3",
-            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
-            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-            "hasInstallScript": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "darwin"
@@ -21037,16 +19548,14 @@
         },
         "node_modules/function-bind": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-            "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+            "license": "MIT",
             "funding": {
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
         "node_modules/function-plot": {
             "version": "1.24.4",
-            "resolved": "https://registry.npmjs.org/function-plot/-/function-plot-1.24.4.tgz",
-            "integrity": "sha512-qlAfK6AENICh0HWiwx6h0aIAq/l/4YYNxConi89Bs7w4W+Jj5t548U6bPRbNR667N0hBLCSYOyYE2VsmRrflGg==",
+            "license": "MIT",
             "dependencies": {
                 "built-in-math-eval": "^0.3.0",
                 "d3-axis": "^3.0.0",
@@ -21063,9 +19572,8 @@
         },
         "node_modules/function.prototype.name": {
             "version": "1.1.6",
-            "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
-            "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.2.0",
@@ -21081,23 +19589,19 @@
         },
         "node_modules/functional-red-black-tree": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-            "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/functions-have-names": {
             "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
-            "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+            "license": "MIT",
             "funding": {
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
         "node_modules/gauge": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
-            "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
-            "deprecated": "This package is no longer supported.",
+            "license": "ISC",
             "dependencies": {
                 "aproba": "^1.0.3 || ^2.0.0",
                 "color-support": "^1.1.2",
@@ -21115,18 +19619,15 @@
         },
         "node_modules/gauge/node_modules/emoji-regex": {
             "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+            "license": "MIT"
         },
         "node_modules/gauge/node_modules/signal-exit": {
             "version": "3.0.7",
-            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-            "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+            "license": "ISC"
         },
         "node_modules/gauge/node_modules/string-width": {
             "version": "4.2.3",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+            "license": "MIT",
             "dependencies": {
                 "emoji-regex": "^8.0.0",
                 "is-fullwidth-code-point": "^3.0.0",
@@ -21138,8 +19639,7 @@
         },
         "node_modules/gaxios": {
             "version": "6.6.0",
-            "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.6.0.tgz",
-            "integrity": "sha512-bpOZVQV5gthH/jVCSuYuokRo2bTKOcuBiVWpjmTn6C5Agl5zclGfTljuGsQZxwwDBkli+YhZhP4TdlqTnhOezQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "extend": "^3.0.2",
                 "https-proxy-agent": "^7.0.1",
@@ -21153,8 +19653,7 @@
         },
         "node_modules/gaxios/node_modules/agent-base": {
             "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
-            "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "^4.3.4"
             },
@@ -21164,8 +19663,7 @@
         },
         "node_modules/gaxios/node_modules/https-proxy-agent": {
             "version": "7.0.4",
-            "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
-            "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
+            "license": "MIT",
             "dependencies": {
                 "agent-base": "^7.0.2",
                 "debug": "4"
@@ -21215,16 +19713,14 @@
         },
         "node_modules/geojson-equality": {
             "version": "0.1.6",
-            "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz",
-            "integrity": "sha512-TqG8YbqizP3EfwP5Uw4aLu6pKkg6JQK9uq/XZ1lXQntvTHD1BBKJWhNpJ2M0ax6TuWMP3oyx6Oq7FCIfznrgpQ==",
+            "license": "MIT",
             "dependencies": {
                 "deep-equal": "^1.0.0"
             }
         },
         "node_modules/geojson-rbush": {
             "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.2.0.tgz",
-            "integrity": "sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==",
+            "license": "MIT",
             "dependencies": {
                 "@turf/bbox": "*",
                 "@turf/helpers": "6.x",
@@ -21235,43 +19731,37 @@
         },
         "node_modules/geojson-rbush/node_modules/@types/geojson": {
             "version": "7946.0.8",
-            "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz",
-            "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA=="
+            "license": "MIT"
         },
         "node_modules/geojson-rbush/node_modules/rbush": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz",
-            "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
+            "license": "MIT",
             "dependencies": {
                 "quickselect": "^2.0.0"
             }
         },
         "node_modules/geojson-vt": {
             "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz",
-            "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg=="
+            "license": "ISC"
         },
         "node_modules/get-caller-file": {
             "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-            "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+            "license": "ISC",
             "engines": {
                 "node": "6.* || 8.* || >= 10.*"
             }
         },
         "node_modules/get-func-name": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
-            "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": "*"
             }
         },
         "node_modules/get-intrinsic": {
             "version": "1.2.4",
-            "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
-            "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+            "license": "MIT",
             "dependencies": {
                 "es-errors": "^1.3.0",
                 "function-bind": "^1.1.2",
@@ -21288,29 +19778,25 @@
         },
         "node_modules/get-node-dimensions": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz",
-            "integrity": "sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ=="
+            "license": "MIT"
         },
         "node_modules/get-prototype-chain": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/get-prototype-chain/-/get-prototype-chain-1.0.1.tgz",
-            "integrity": "sha512-2m7WZ0jveIg/dAbCbpUxEToaJ8Dmti5EkgDP8YM3UpHUT6SAORjE2odP8XQGNVGXMHi8q8cCCoy3HTByTaTVTw==",
+            "license": "ISC",
             "engines": {
                 "node": ">=4.0.0"
             }
         },
         "node_modules/get-stdin": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
-            "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.12.0"
             }
         },
         "node_modules/get-stream": {
             "version": "8.0.1",
-            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
-            "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=16"
             },
@@ -21320,9 +19806,8 @@
         },
         "node_modules/get-symbol-description": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
-            "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.5",
                 "es-errors": "^1.3.0",
@@ -21337,9 +19822,8 @@
         },
         "node_modules/get-tsconfig": {
             "version": "4.7.5",
-            "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz",
-            "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "resolve-pkg-maps": "^1.0.0"
             },
@@ -21349,24 +19833,21 @@
         },
         "node_modules/get-value": {
             "version": "2.0.6",
-            "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
-            "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/getpass": {
             "version": "0.1.7",
-            "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-            "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+            "license": "MIT",
             "dependencies": {
                 "assert-plus": "^1.0.0"
             }
         },
         "node_modules/gifwrap": {
             "version": "0.10.1",
-            "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.10.1.tgz",
-            "integrity": "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==",
+            "license": "MIT",
             "dependencies": {
                 "image-q": "^4.0.0",
                 "omggif": "^1.0.10"
@@ -21374,13 +19855,11 @@
         },
         "node_modules/gl-matrix": {
             "version": "3.4.3",
-            "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz",
-            "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA=="
+            "license": "MIT"
         },
         "node_modules/glob": {
             "version": "10.4.1",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz",
-            "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==",
+            "license": "ISC",
             "dependencies": {
                 "foreground-child": "^3.1.0",
                 "jackspeak": "^3.1.2",
@@ -21400,8 +19879,7 @@
         },
         "node_modules/glob-parent": {
             "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-            "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+            "license": "ISC",
             "dependencies": {
                 "is-glob": "^4.0.3"
             },
@@ -21411,13 +19889,11 @@
         },
         "node_modules/glob-to-regexp": {
             "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
-            "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
+            "license": "BSD-2-Clause"
         },
         "node_modules/global": {
             "version": "4.4.0",
-            "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
-            "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+            "license": "MIT",
             "dependencies": {
                 "min-document": "^2.19.0",
                 "process": "^0.11.10"
@@ -21425,8 +19901,7 @@
         },
         "node_modules/global-modules": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
-            "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+            "license": "MIT",
             "dependencies": {
                 "global-prefix": "^1.0.1",
                 "is-windows": "^1.0.1",
@@ -21438,8 +19913,7 @@
         },
         "node_modules/global-prefix": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
-            "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==",
+            "license": "MIT",
             "dependencies": {
                 "expand-tilde": "^2.0.2",
                 "homedir-polyfill": "^1.0.1",
@@ -21453,8 +19927,7 @@
         },
         "node_modules/global-prefix/node_modules/which": {
             "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+            "license": "ISC",
             "dependencies": {
                 "isexe": "^2.0.0"
             },
@@ -21464,8 +19937,8 @@
         },
         "node_modules/globals": {
             "version": "15.3.0",
-            "integrity": "sha512-cCdyVjIUVTtX8ZsPkq1oCsOsLmGIswqnjZYMJJTGaNApj1yHtLSymKhwH51ttirREn75z3p4k051clwg7rvNKA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=18"
             },
@@ -21475,9 +19948,8 @@
         },
         "node_modules/globalthis": {
             "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
-            "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "define-properties": "^1.2.1",
                 "gopd": "^1.0.1"
@@ -21491,8 +19963,7 @@
         },
         "node_modules/globby": {
             "version": "11.1.0",
-            "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-            "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+            "license": "MIT",
             "dependencies": {
                 "array-union": "^2.1.0",
                 "dir-glob": "^3.0.1",
@@ -21510,8 +19981,7 @@
         },
         "node_modules/golden-layout": {
             "version": "2.6.0",
-            "resolved": "https://registry.npmjs.org/golden-layout/-/golden-layout-2.6.0.tgz",
-            "integrity": "sha512-sIVQCiRWOymHbVD1Aw/T9/ijbPYAVGBlgGYd1N9MRKfcyBNSpjr87Vg9nSHm+RCT8ELrvK8IJYJV0QRJuVUkCQ=="
+            "license": "MIT"
         },
         "node_modules/google-auth-library": {
             "version": "9.11.0",
@@ -21543,8 +20013,7 @@
         },
         "node_modules/googleapis": {
             "version": "133.0.0",
-            "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-133.0.0.tgz",
-            "integrity": "sha512-6xyc49j+x7N4smawJs/q1i7mbSkt6SYUWWd9RbsmmDW7gRv+mhwZ4xT+XkPihZcNyo/diF//543WZq4szdS74w==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "google-auth-library": "^9.0.0",
                 "googleapis-common": "^7.0.0"
@@ -21555,8 +20024,7 @@
         },
         "node_modules/googleapis-common": {
             "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz",
-            "integrity": "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "extend": "^3.0.2",
                 "gaxios": "^6.0.3",
@@ -21571,8 +20039,7 @@
         },
         "node_modules/googlephotos": {
             "version": "0.3.5",
-            "resolved": "https://registry.npmjs.org/googlephotos/-/googlephotos-0.3.5.tgz",
-            "integrity": "sha512-l8xUfRGhq8QpfESHA8YMO5SJjuXTxGEibfb+xDg+lvPW7gBupCLgRs9MhhBcqAqxdTK0BSPUY2gqm7zFKpF8tw==",
+            "license": "MIT",
             "dependencies": {
                 "ky": "^0.25.1",
                 "ky-universal": "^0.8.2",
@@ -21584,8 +20051,7 @@
         },
         "node_modules/gopd": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
-            "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+            "license": "MIT",
             "dependencies": {
                 "get-intrinsic": "^1.1.3"
             },
@@ -21595,7 +20061,7 @@
         },
         "node_modules/got": {
             "version": "14.3.0",
-            "integrity": "sha512-vZkrXdq5BtPWTXqvjXSpl6zky3zpHaOVfSug/RfFHu3YrtSsvYzopVMDqrh2do77WnGoCSSRCHW25zXOSAQ9zw==",
+            "license": "MIT",
             "dependencies": {
                 "@sindresorhus/is": "^6.3.1",
                 "@szmarczak/http-timer": "^5.0.1",
@@ -21618,23 +20084,19 @@
         },
         "node_modules/graceful-fs": {
             "version": "4.2.11",
-            "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
-            "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+            "license": "ISC"
         },
         "node_modules/graphemer": {
             "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
-            "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
+            "license": "MIT"
         },
         "node_modules/grid-index": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz",
-            "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA=="
+            "license": "ISC"
         },
         "node_modules/gtoken": {
             "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz",
-            "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==",
+            "license": "MIT",
             "dependencies": {
                 "gaxios": "^6.0.0",
                 "jws": "^4.0.0"
@@ -21645,23 +20107,20 @@
         },
         "node_modules/handle-thing": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
-            "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/har-schema": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-            "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
+            "license": "ISC",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/har-validator": {
             "version": "5.1.5",
-            "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
-            "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
             "deprecated": "this library is no longer supported",
+            "license": "MIT",
             "dependencies": {
                 "ajv": "^6.12.3",
                 "har-schema": "^2.0.0"
@@ -21672,25 +20131,22 @@
         },
         "node_modules/has-bigints": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
-            "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
             "dev": true,
+            "license": "MIT",
             "funding": {
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
         "node_modules/has-flag": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/has-property-descriptors": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
-            "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+            "license": "MIT",
             "dependencies": {
                 "es-define-property": "^1.0.0"
             },
@@ -21700,8 +20156,7 @@
         },
         "node_modules/has-proto": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
-            "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.4"
             },
@@ -21711,8 +20166,7 @@
         },
         "node_modules/has-symbols": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-            "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.4"
             },
@@ -21722,8 +20176,7 @@
         },
         "node_modules/has-tostringtag": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
-            "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+            "license": "MIT",
             "dependencies": {
                 "has-symbols": "^1.0.3"
             },
@@ -21736,13 +20189,11 @@
         },
         "node_modules/has-unicode": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
-            "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
+            "license": "ISC"
         },
         "node_modules/hasown": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
-            "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+            "license": "MIT",
             "dependencies": {
                 "function-bind": "^1.1.2"
             },
@@ -21752,8 +20203,7 @@
         },
         "node_modules/hast-util-from-dom": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.0.tgz",
-            "integrity": "sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==",
+            "license": "ISC",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "hastscript": "^8.0.0",
@@ -21766,8 +20216,7 @@
         },
         "node_modules/hast-util-from-html": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz",
-            "integrity": "sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "devlop": "^1.1.0",
@@ -21783,8 +20232,7 @@
         },
         "node_modules/hast-util-from-html-isomorphic": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz",
-            "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "hast-util-from-dom": "^5.0.0",
@@ -21798,8 +20246,7 @@
         },
         "node_modules/hast-util-from-parse5": {
             "version": "8.0.1",
-            "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz",
-            "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "@types/unist": "^3.0.0",
@@ -21817,13 +20264,11 @@
         },
         "node_modules/hast-util-from-parse5/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/hast-util-is-element": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
-            "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0"
             },
@@ -21834,8 +20279,7 @@
         },
         "node_modules/hast-util-parse-selector": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
-            "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0"
             },
@@ -21846,8 +20290,7 @@
         },
         "node_modules/hast-util-raw": {
             "version": "9.0.3",
-            "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.3.tgz",
-            "integrity": "sha512-ICWvVOF2fq4+7CMmtCPD5CM4QKjPbHpPotE6+8tDooV0ZuyJVUzHsrNX+O5NaRbieTf0F7FfeBOMAwi6Td0+yQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "@types/unist": "^3.0.0",
@@ -21870,13 +20313,11 @@
         },
         "node_modules/hast-util-raw/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/hast-util-to-jsx-runtime": {
             "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz",
-            "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/estree": "^1.0.0",
                 "@types/hast": "^3.0.0",
@@ -21901,13 +20342,11 @@
         },
         "node_modules/hast-util-to-jsx-runtime/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/hast-util-to-parse5": {
             "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz",
-            "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "comma-separated-tokens": "^2.0.0",
@@ -21924,8 +20363,7 @@
         },
         "node_modules/hast-util-to-text": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
-            "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "@types/unist": "^3.0.0",
@@ -21939,13 +20377,11 @@
         },
         "node_modules/hast-util-to-text/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/hast-util-whitespace": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
-            "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0"
             },
@@ -21956,8 +20392,7 @@
         },
         "node_modules/hastscript": {
             "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz",
-            "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "comma-separated-tokens": "^2.0.0",
@@ -21972,37 +20407,32 @@
         },
         "node_modules/he": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
-            "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+            "license": "MIT",
             "bin": {
                 "he": "bin/he"
             }
         },
         "node_modules/hexoid": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
-            "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/hoist-non-react-statics": {
             "version": "3.3.2",
-            "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
-            "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "react-is": "^16.7.0"
             }
         },
         "node_modules/hoist-non-react-statics/node_modules/react-is": {
             "version": "16.13.1",
-            "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-            "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+            "license": "MIT"
         },
         "node_modules/homedir-polyfill": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
-            "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+            "license": "MIT",
             "dependencies": {
                 "parse-passwd": "^1.0.0"
             },
@@ -22012,8 +20442,7 @@
         },
         "node_modules/hosted-git-info": {
             "version": "7.0.2",
-            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
-            "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+            "license": "ISC",
             "dependencies": {
                 "lru-cache": "^10.0.1"
             },
@@ -22023,22 +20452,19 @@
         },
         "node_modules/hosted-git-info/node_modules/lru-cache": {
             "version": "10.2.2",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
-            "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+            "license": "ISC",
             "engines": {
                 "node": "14 || >=16.14"
             }
         },
         "node_modules/howler": {
             "version": "2.2.4",
-            "resolved": "https://registry.npmjs.org/howler/-/howler-2.2.4.tgz",
-            "integrity": "sha512-iARIBPgcQrwtEr+tALF+rapJ8qSc+Set2GJQl7xT1MQzWaVkFebdJhR3alVlSiUf5U7nAANKuj3aWpwerocD5w=="
+            "license": "MIT"
         },
         "node_modules/hpack.js": {
             "version": "2.1.6",
-            "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
-            "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "inherits": "^2.0.1",
                 "obuf": "^1.0.0",
@@ -22048,15 +20474,13 @@
         },
         "node_modules/hpack.js/node_modules/isarray": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/hpack.js/node_modules/readable-stream": {
             "version": "2.3.8",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
-            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "core-util-is": "~1.0.0",
                 "inherits": "~2.0.3",
@@ -22069,30 +20493,26 @@
         },
         "node_modules/hpack.js/node_modules/readable-stream/node_modules/core-util-is": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
-            "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/hpack.js/node_modules/safe-buffer": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-            "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/hpack.js/node_modules/string_decoder": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-            "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "safe-buffer": "~5.1.0"
             }
         },
         "node_modules/html-encoding-sniffer": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
-            "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "whatwg-encoding": "^3.1.1"
             },
@@ -22102,8 +20522,6 @@
         },
         "node_modules/html-entities": {
             "version": "2.5.2",
-            "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
-            "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
             "funding": [
                 {
                     "type": "github",
@@ -22113,12 +20531,12 @@
                     "type": "patreon",
                     "url": "https://patreon.com/mdevils"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/html-minifier-terser": {
             "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
-            "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==",
+            "license": "MIT",
             "dependencies": {
                 "camel-case": "^4.1.2",
                 "clean-css": "^5.2.2",
@@ -22137,21 +20555,18 @@
         },
         "node_modules/html-minifier-terser/node_modules/commander": {
             "version": "8.3.0",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
-            "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 12"
             }
         },
         "node_modules/html-to-image": {
             "version": "1.11.11",
-            "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.11.tgz",
-            "integrity": "sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA=="
+            "license": "MIT"
         },
         "node_modules/html-to-text": {
             "version": "9.0.5",
-            "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz",
-            "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==",
+            "license": "MIT",
             "dependencies": {
                 "@selderee/plugin-htmlparser2": "^0.11.0",
                 "deepmerge": "^4.3.1",
@@ -22165,8 +20580,7 @@
         },
         "node_modules/html-url-attributes": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.0.tgz",
-            "integrity": "sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==",
+            "license": "MIT",
             "funding": {
                 "type": "opencollective",
                 "url": "https://opencollective.com/unified"
@@ -22174,8 +20588,7 @@
         },
         "node_modules/html-void-elements": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
-            "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -22183,8 +20596,7 @@
         },
         "node_modules/html-webpack-plugin": {
             "version": "5.6.0",
-            "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz",
-            "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/html-minifier-terser": "^6.0.0",
                 "html-minifier-terser": "^6.0.2",
@@ -22214,8 +20626,7 @@
         },
         "node_modules/html2canvas": {
             "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
-            "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+            "license": "MIT",
             "dependencies": {
                 "css-line-break": "^2.1.0",
                 "text-segmentation": "^1.0.3"
@@ -22226,8 +20637,6 @@
         },
         "node_modules/htmlparser2": {
             "version": "8.0.2",
-            "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
-            "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
             "funding": [
                 "https://github.com/fb55/htmlparser2?sponsor=1",
                 {
@@ -22235,6 +20644,7 @@
                     "url": "https://github.com/sponsors/fb55"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "domelementtype": "^2.3.0",
                 "domhandler": "^5.0.3",
@@ -22244,8 +20654,7 @@
         },
         "node_modules/http-browserify": {
             "version": "1.7.0",
-            "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-1.7.0.tgz",
-            "integrity": "sha512-Irf/LJXmE3cBzU1eaR4+NEX6bmVLqt1wkmDiA7kBwH7zmb0D8kBAXsDmQ88hhj/qv9iEZKlyGx/hrMcFi8sOHw==",
+            "license": "MIT/X11",
             "dependencies": {
                 "Base64": "~0.2.0",
                 "inherits": "~2.0.1"
@@ -22253,19 +20662,16 @@
         },
         "node_modules/http-cache-semantics": {
             "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
-            "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
+            "license": "BSD-2-Clause"
         },
         "node_modules/http-deceiver": {
             "version": "1.2.7",
-            "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
-            "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/http-errors": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
-            "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+            "license": "MIT",
             "dependencies": {
                 "depd": "2.0.0",
                 "inherits": "2.0.4",
@@ -22279,15 +20685,13 @@
         },
         "node_modules/http-parser-js": {
             "version": "0.5.8",
-            "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
-            "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/http-proxy": {
             "version": "1.18.1",
-            "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
-            "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "eventemitter3": "^4.0.0",
                 "follow-redirects": "^1.0.0",
@@ -22299,8 +20703,7 @@
         },
         "node_modules/http-proxy-agent": {
             "version": "7.0.2",
-            "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
-            "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+            "license": "MIT",
             "dependencies": {
                 "agent-base": "^7.1.0",
                 "debug": "^4.3.4"
@@ -22311,8 +20714,7 @@
         },
         "node_modules/http-proxy-agent/node_modules/agent-base": {
             "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
-            "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "^4.3.4"
             },
@@ -22322,9 +20724,8 @@
         },
         "node_modules/http-proxy-middleware": {
             "version": "2.0.6",
-            "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
-            "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/http-proxy": "^1.17.8",
                 "http-proxy": "^1.18.1",
@@ -22346,9 +20747,8 @@
         },
         "node_modules/http-proxy-middleware/node_modules/is-plain-obj": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
-            "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=10"
             },
@@ -22358,8 +20758,7 @@
         },
         "node_modules/http-signature": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
-            "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+            "license": "MIT",
             "dependencies": {
                 "assert-plus": "^1.0.0",
                 "jsprim": "^1.2.2",
@@ -22372,8 +20771,7 @@
         },
         "node_modules/http2-wrapper": {
             "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
-            "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
+            "license": "MIT",
             "dependencies": {
                 "quick-lru": "^5.1.1",
                 "resolve-alpn": "^1.2.0"
@@ -22384,18 +20782,15 @@
         },
         "node_modules/https": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz",
-            "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg=="
+            "license": "ISC"
         },
         "node_modules/https-browserify": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
-            "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg=="
+            "license": "MIT"
         },
         "node_modules/https-proxy-agent": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
-            "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+            "license": "MIT",
             "dependencies": {
                 "agent-base": "6",
                 "debug": "4"
@@ -22406,25 +20801,22 @@
         },
         "node_modules/human-signals": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
-            "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
             "dev": true,
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=10.17.0"
             }
         },
         "node_modules/humanize-ms": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
-            "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+            "license": "MIT",
             "dependencies": {
                 "ms": "^2.0.0"
             }
         },
         "node_modules/hyntax": {
             "version": "1.1.9",
-            "resolved": "https://registry.npmjs.org/hyntax/-/hyntax-1.1.9.tgz",
-            "integrity": "sha512-xjxyDLbVDdLgjPnl4NM+Iu6il3UPmk6PNCBXruQKeuKDc/HtaZx1hk1AtMgw3vsn9YnLZRfoBpPxYMXcoT5KAA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.11.1",
                 "npm": ">=5.3.0"
@@ -22432,24 +20824,20 @@
         },
         "node_modules/hyperdyperid": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz",
-            "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10.18"
             }
         },
         "node_modules/i": {
             "version": "0.3.7",
-            "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz",
-            "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==",
             "engines": {
                 "node": ">=0.4"
             }
         },
         "node_modules/iconv-lite": {
             "version": "0.4.24",
-            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-            "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+            "license": "MIT",
             "dependencies": {
                 "safer-buffer": ">= 2.1.2 < 3"
             },
@@ -22459,8 +20847,7 @@
         },
         "node_modules/icss-utils": {
             "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
-            "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
+            "license": "ISC",
             "engines": {
                 "node": "^10 || ^12 || >= 14"
             },
@@ -22468,10 +20855,12 @@
                 "postcss": "^8.1.0"
             }
         },
+        "node_modules/idb-keyval": {
+            "version": "6.2.1",
+            "license": "Apache-2.0"
+        },
         "node_modules/ieee754": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
-            "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
             "funding": [
                 {
                     "type": "github",
@@ -22485,25 +20874,23 @@
                     "type": "consulting",
                     "url": "https://feross.org/support"
                 }
-            ]
+            ],
+            "license": "BSD-3-Clause"
         },
         "node_modules/ignore": {
             "version": "5.3.1",
-            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
-            "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 4"
             }
         },
         "node_modules/ignore-by-default": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
-            "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="
+            "license": "ISC"
         },
         "node_modules/ignore-walk": {
             "version": "6.0.5",
-            "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz",
-            "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==",
+            "license": "ISC",
             "dependencies": {
                 "minimatch": "^9.0.0"
             },
@@ -22513,8 +20900,7 @@
         },
         "node_modules/image-data-uri": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/image-data-uri/-/image-data-uri-2.0.1.tgz",
-            "integrity": "sha512-BZh721F2Q5TwBdwpiqrBrHEdj8daj8KuMZK/DOCyqQlz1CqFhhuZWbK5ZCUnAvFJr8LaKHTaWl9ja3/a3DC2Ew==",
+            "license": "MIT",
             "dependencies": {
                 "fs-extra": "^0.26.7",
                 "magicli": "0.0.8",
@@ -22527,8 +20913,7 @@
         },
         "node_modules/image-data-uri/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -22536,8 +20921,7 @@
         },
         "node_modules/image-data-uri/node_modules/fs-extra": {
             "version": "0.26.7",
-            "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz",
-            "integrity": "sha512-waKu+1KumRhYv8D8gMRCKJGAMI9pRnPuEb1mvgYD0f7wBscg+h6bW4FDTmEZhB9VKxvoTtxW+Y7bnIlB7zja6Q==",
+            "license": "MIT",
             "dependencies": {
                 "graceful-fs": "^4.1.2",
                 "jsonfile": "^2.1.0",
@@ -22548,9 +20932,7 @@
         },
         "node_modules/image-data-uri/node_modules/glob": {
             "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "deprecated": "Glob versions prior to v9 are no longer supported",
+            "license": "ISC",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -22568,16 +20950,14 @@
         },
         "node_modules/image-data-uri/node_modules/jsonfile": {
             "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
-            "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==",
+            "license": "MIT",
             "optionalDependencies": {
                 "graceful-fs": "^4.1.6"
             }
         },
         "node_modules/image-data-uri/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -22587,9 +20967,7 @@
         },
         "node_modules/image-data-uri/node_modules/rimraf": {
             "version": "2.7.1",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-            "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
-            "deprecated": "Rimraf versions prior to v4 are no longer supported",
+            "license": "ISC",
             "dependencies": {
                 "glob": "^7.1.3"
             },
@@ -22599,21 +20977,18 @@
         },
         "node_modules/image-q": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz",
-            "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "16.9.1"
             }
         },
         "node_modules/image-q/node_modules/@types/node": {
             "version": "16.9.1",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz",
-            "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="
+            "license": "MIT"
         },
         "node_modules/image-size": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz",
-            "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==",
+            "license": "MIT",
             "dependencies": {
                 "queue": "6.0.2"
             },
@@ -22626,10 +21001,8 @@
         },
         "node_modules/image-size-stream": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/image-size-stream/-/image-size-stream-1.1.0.tgz",
-            "integrity": "sha512-N505B5FSy2Xf5l/Haef+99TwfJqTu40hnU560+rC0Cm6cxtwVz2yRFh9WpOk1YEjfv3dI0PgVYAH0hmXQmjDcw==",
             "dependencies": {
-                "image-size": "git+https://github.com/netroy/image-size#da2c863807a3e9602617bdd357b0de3ab4a064c1",
+                "image-size": "github:netroy/image-size#da2c863807a3e9602617bdd357b0de3ab4a064c1",
                 "readable-stream": "^1.0.33",
                 "tryit": "^1.0.1"
             }
@@ -22648,13 +21021,11 @@
         },
         "node_modules/image-size-stream/node_modules/isarray": {
             "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-            "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
+            "license": "MIT"
         },
         "node_modules/image-size-stream/node_modules/readable-stream": {
             "version": "1.1.14",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
-            "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
+            "license": "MIT",
             "dependencies": {
                 "core-util-is": "~1.0.0",
                 "inherits": "~2.0.1",
@@ -22664,23 +21035,19 @@
         },
         "node_modules/image-size-stream/node_modules/string_decoder": {
             "version": "0.10.31",
-            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-            "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
+            "license": "MIT"
         },
         "node_modules/immediate": {
             "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
-            "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
+            "license": "MIT"
         },
         "node_modules/immutable": {
             "version": "4.3.6",
-            "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz",
-            "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ=="
+            "license": "MIT"
         },
         "node_modules/import-fresh": {
             "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-            "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+            "license": "MIT",
             "dependencies": {
                 "parent-module": "^1.0.0",
                 "resolve-from": "^4.0.0"
@@ -22694,16 +21061,14 @@
         },
         "node_modules/import-fresh/node_modules/resolve-from": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-            "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/import-local": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
-            "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+            "license": "MIT",
             "dependencies": {
                 "pkg-dir": "^4.2.0",
                 "resolve-cwd": "^3.0.0"
@@ -22720,8 +21085,7 @@
         },
         "node_modules/import-local/node_modules/find-up": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-            "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+            "license": "MIT",
             "dependencies": {
                 "locate-path": "^5.0.0",
                 "path-exists": "^4.0.0"
@@ -22732,8 +21096,7 @@
         },
         "node_modules/import-local/node_modules/locate-path": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-            "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+            "license": "MIT",
             "dependencies": {
                 "p-locate": "^4.1.0"
             },
@@ -22743,8 +21106,7 @@
         },
         "node_modules/import-local/node_modules/p-limit": {
             "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-            "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+            "license": "MIT",
             "dependencies": {
                 "p-try": "^2.0.0"
             },
@@ -22757,16 +21119,14 @@
         },
         "node_modules/import-local/node_modules/p-limit/node_modules/p-try": {
             "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-            "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/import-local/node_modules/p-locate": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-            "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+            "license": "MIT",
             "dependencies": {
                 "p-limit": "^2.2.0"
             },
@@ -22776,8 +21136,7 @@
         },
         "node_modules/import-local/node_modules/pkg-dir": {
             "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
-            "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+            "license": "MIT",
             "dependencies": {
                 "find-up": "^4.0.0"
             },
@@ -22787,25 +21146,21 @@
         },
         "node_modules/imurmurhash": {
             "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-            "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.8.19"
             }
         },
         "node_modules/indent-string": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
-            "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/inflight": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-            "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-            "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+            "license": "ISC",
             "dependencies": {
                 "once": "^1.3.0",
                 "wrappy": "1"
@@ -22813,8 +21168,7 @@
         },
         "node_modules/infobox-parser": {
             "version": "3.6.2",
-            "resolved": "https://registry.npmjs.org/infobox-parser/-/infobox-parser-3.6.2.tgz",
-            "integrity": "sha512-lasdwvbtjCtDDO6mArAs/ueFEnBJRyo2UbZPAkd5rEG5NVJ3XFCOvbMwNTT/rJlFv1+ORw8D3UvZV4brpgATCg==",
+            "license": "MIT",
             "dependencies": {
                 "camelcase": "^4.1.0"
             },
@@ -22825,60 +21179,27 @@
         },
         "node_modules/infobox-parser/node_modules/camelcase": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
-            "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/inherits": {
             "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-            "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+            "license": "ISC"
         },
         "node_modules/ini": {
             "version": "1.3.8",
-            "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
-            "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
-        },
-        "node_modules/init-package-json": {
-            "version": "6.0.3",
-            "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-6.0.3.tgz",
-            "integrity": "sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==",
-            "dependencies": {
-                "@npmcli/package-json": "^5.0.0",
-                "npm-package-arg": "^11.0.0",
-                "promzard": "^1.0.0",
-                "read": "^3.0.1",
-                "semver": "^7.3.5",
-                "validate-npm-package-license": "^3.0.4",
-                "validate-npm-package-name": "^5.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/init-package-json/node_modules/semver": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
+            "license": "ISC"
         },
         "node_modules/inline-style-parser": {
             "version": "0.2.3",
-            "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz",
-            "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g=="
+            "license": "MIT"
         },
         "node_modules/inquirer": {
             "version": "7.3.3",
-            "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
-            "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-escapes": "^4.2.1",
                 "chalk": "^4.1.0",
@@ -22900,9 +21221,8 @@
         },
         "node_modules/inquirer/node_modules/ansi-styles": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "color-convert": "^2.0.1"
             },
@@ -22915,9 +21235,8 @@
         },
         "node_modules/inquirer/node_modules/chalk": {
             "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-            "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^4.1.0",
                 "supports-color": "^7.1.0"
@@ -22931,9 +21250,8 @@
         },
         "node_modules/inquirer/node_modules/color-convert": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "color-name": "~1.1.4"
             },
@@ -22943,30 +21261,26 @@
         },
         "node_modules/inquirer/node_modules/color-name": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/inquirer/node_modules/emoji-regex": {
             "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/inquirer/node_modules/has-flag": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/inquirer/node_modules/string-width": {
             "version": "4.2.3",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "emoji-regex": "^8.0.0",
                 "is-fullwidth-code-point": "^3.0.0",
@@ -22978,9 +21292,8 @@
         },
         "node_modules/inquirer/node_modules/supports-color": {
             "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-            "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "has-flag": "^4.0.0"
             },
@@ -22990,8 +21303,7 @@
         },
         "node_modules/inspect-function": {
             "version": "0.3.4",
-            "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.3.4.tgz",
-            "integrity": "sha512-s0RsbJqK/sNZ+U1mykGoTickog3ea1A9Qk4mXniogOBu4PgkkZ56elScO7QC/r8D94lhGmJ2NyDI1ipOA/uq/g==",
+            "license": "MIT",
             "dependencies": {
                 "inspect-parameters-declaration": "0.0.8",
                 "magicli": "0.0.8",
@@ -23005,13 +21317,11 @@
         },
         "node_modules/inspect-function/node_modules/commander": {
             "version": "2.20.3",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+            "license": "MIT"
         },
         "node_modules/inspect-function/node_modules/inspect-parameters-declaration": {
             "version": "0.0.8",
-            "resolved": "https://registry.npmjs.org/inspect-parameters-declaration/-/inspect-parameters-declaration-0.0.8.tgz",
-            "integrity": "sha512-W4QzN1LgFmasKOM+NoLlDd2OAZM3enNZlVUOXoGQKmYBDFgxoPDOyebF55ALaf8avyM9TavNwibXxg347RrzCg==",
+            "license": "MIT",
             "dependencies": {
                 "magicli": "0.0.5",
                 "split-skip": "0.0.2",
@@ -23024,8 +21334,7 @@
         },
         "node_modules/inspect-function/node_modules/inspect-parameters-declaration/node_modules/inspect-function": {
             "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.2.2.tgz",
-            "integrity": "sha512-becs5gzcHwPrlHawscYkyQ/ShiOiosrXPhA5RVZ3qyWH4aWdD52RnMfXq/dwQXciHwiieD8aIPwdIWYv6eL+sQ==",
+            "license": "MIT",
             "dependencies": {
                 "split-skip": "0.0.1",
                 "unpack-string": "0.0.2"
@@ -23033,13 +21342,11 @@
         },
         "node_modules/inspect-function/node_modules/inspect-parameters-declaration/node_modules/inspect-function/node_modules/split-skip": {
             "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.1.tgz",
-            "integrity": "sha512-7dkvq+gofI4M8zx4iZnEZ3O1s7FP4Y/iaIDHJh5RyWrs8idcPauFi2OZe3TBi36fLvR2j5z3kSzVtz6IhPdncQ=="
+            "license": "MIT"
         },
         "node_modules/inspect-function/node_modules/inspect-parameters-declaration/node_modules/magicli": {
             "version": "0.0.5",
-            "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz",
-            "integrity": "sha512-wZbMtnl2v1b+Jp3xlqA9FU/O4I6YhGXR8xSY/eU2+gDAvut/F+W3gl4qs61iL4LELC7jqSAE6aAD5668EbmQHA==",
+            "license": "MIT",
             "dependencies": {
                 "commander": "^2.9.0",
                 "get-stdin": "^5.0.1",
@@ -23049,18 +21356,15 @@
         },
         "node_modules/inspect-function/node_modules/inspect-parameters-declaration/node_modules/split-skip": {
             "version": "0.0.2",
-            "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.2.tgz",
-            "integrity": "sha512-weHOi8BolsDnGIwhhWHbA+wKSuSpvWwjRrdj8SdbIIis2vSwOE37CQP8x3EleuzxanUr3AK8BdUy4MkiOULPZg=="
+            "license": "MIT"
         },
         "node_modules/inspect-function/node_modules/split-skip": {
             "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.1.tgz",
-            "integrity": "sha512-7dkvq+gofI4M8zx4iZnEZ3O1s7FP4Y/iaIDHJh5RyWrs8idcPauFi2OZe3TBi36fLvR2j5z3kSzVtz6IhPdncQ=="
+            "license": "MIT"
         },
         "node_modules/inspect-parameters-declaration": {
             "version": "0.0.9",
-            "resolved": "https://registry.npmjs.org/inspect-parameters-declaration/-/inspect-parameters-declaration-0.0.9.tgz",
-            "integrity": "sha512-c3jrKKA1rwwrsjdGMAo2hFWV0vNe3/RKHxpE/OBt41LP3ynOVI1qmgxpZYK5SQu3jtWCyaho8L7AZzCjJ4mEUw==",
+            "license": "MIT",
             "dependencies": {
                 "magicli": "0.0.5",
                 "split-skip": "0.0.2",
@@ -23073,13 +21377,11 @@
         },
         "node_modules/inspect-parameters-declaration/node_modules/commander": {
             "version": "2.20.3",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+            "license": "MIT"
         },
         "node_modules/inspect-parameters-declaration/node_modules/inspect-function": {
             "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.2.2.tgz",
-            "integrity": "sha512-becs5gzcHwPrlHawscYkyQ/ShiOiosrXPhA5RVZ3qyWH4aWdD52RnMfXq/dwQXciHwiieD8aIPwdIWYv6eL+sQ==",
+            "license": "MIT",
             "dependencies": {
                 "split-skip": "0.0.1",
                 "unpack-string": "0.0.2"
@@ -23087,13 +21389,11 @@
         },
         "node_modules/inspect-parameters-declaration/node_modules/inspect-function/node_modules/split-skip": {
             "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.1.tgz",
-            "integrity": "sha512-7dkvq+gofI4M8zx4iZnEZ3O1s7FP4Y/iaIDHJh5RyWrs8idcPauFi2OZe3TBi36fLvR2j5z3kSzVtz6IhPdncQ=="
+            "license": "MIT"
         },
         "node_modules/inspect-parameters-declaration/node_modules/magicli": {
             "version": "0.0.5",
-            "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz",
-            "integrity": "sha512-wZbMtnl2v1b+Jp3xlqA9FU/O4I6YhGXR8xSY/eU2+gDAvut/F+W3gl4qs61iL4LELC7jqSAE6aAD5668EbmQHA==",
+            "license": "MIT",
             "dependencies": {
                 "commander": "^2.9.0",
                 "get-stdin": "^5.0.1",
@@ -23103,8 +21403,7 @@
         },
         "node_modules/inspect-property": {
             "version": "0.0.6",
-            "resolved": "https://registry.npmjs.org/inspect-property/-/inspect-property-0.0.6.tgz",
-            "integrity": "sha512-LgjHkRl9W6bj2n+kWrAOgvCYPTYt+LanE4rtd/vKNq6yEb+SvVV7UTLzoSPpDX6/U1cAz7VfqPr+lPAIz7wHaQ==",
+            "license": "MIT",
             "dependencies": {
                 "for-each-property": "0.0.4",
                 "for-each-property-deep": "0.0.3",
@@ -23113,9 +21412,8 @@
         },
         "node_modules/internal-slot": {
             "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
-            "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "es-errors": "^1.3.0",
                 "hasown": "^2.0.0",
@@ -23127,32 +21425,28 @@
         },
         "node_modules/internmap": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
-            "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+            "license": "ISC",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/interpret": {
             "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
-            "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.10"
             }
         },
         "node_modules/interval-arithmetic": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/interval-arithmetic/-/interval-arithmetic-1.1.2.tgz",
-            "integrity": "sha512-FmonKqVk5HVc4G79d16rQmCb6zOwv0o4LidhJKtdGTwpc3Kk9UZ5t6UE1AQHFF5RdQaSIQs0AYe5rySFT8C1Ww==",
+            "license": "BSL-1.0",
             "dependencies": {
                 "nextafter": "^1.0.0"
             }
         },
         "node_modules/interval-arithmetic-eval": {
             "version": "0.5.1",
-            "resolved": "https://registry.npmjs.org/interval-arithmetic-eval/-/interval-arithmetic-eval-0.5.1.tgz",
-            "integrity": "sha512-yzc3WdMtplWSHam53p9QcHqB96QoSU412n9UNI3Va+wB3ZWEISVCF2fmmmiqjkEaNIbD/am37wsBAXss4KvRwg==",
+            "license": "MIT",
             "dependencies": {
                 "interval-arithmetic": "^1.1.2",
                 "math-codegen": "^0.4.1"
@@ -23160,8 +21454,7 @@
         },
         "node_modules/interval-arithmetic-eval/node_modules/math-codegen": {
             "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/math-codegen/-/math-codegen-0.4.1.tgz",
-            "integrity": "sha512-Nb/gZIGfexUlCYfzWC9W9SkoShvOlRTrFLajLQjSNoAvLhiZQH4TzTKRh/3lZdezFcPfCl+SHEcsrYf3bJQTNg==",
+            "license": "MIT",
             "dependencies": {
                 "extend": "^3.0.2",
                 "mr-parser": "^0.2.1"
@@ -23169,8 +21462,7 @@
         },
         "node_modules/intl-messageformat": {
             "version": "10.5.14",
-            "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.14.tgz",
-            "integrity": "sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "@formatjs/ecma402-abstract": "2.0.0",
                 "@formatjs/fast-memoize": "2.2.0",
@@ -23180,16 +21472,14 @@
         },
         "node_modules/invariant": {
             "version": "2.2.4",
-            "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
-            "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+            "license": "MIT",
             "dependencies": {
                 "loose-envify": "^1.0.0"
             }
         },
         "node_modules/ip-address": {
             "version": "9.0.5",
-            "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
-            "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
+            "license": "MIT",
             "dependencies": {
                 "jsbn": "1.1.0",
                 "sprintf-js": "^1.1.3"
@@ -23200,37 +21490,22 @@
         },
         "node_modules/ip-address/node_modules/jsbn": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
-            "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
+            "license": "MIT"
         },
         "node_modules/ip-address/node_modules/sprintf-js": {
             "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
-            "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
-        },
-        "node_modules/ip-regex": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz",
-            "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==",
-            "engines": {
-                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
+            "license": "BSD-3-Clause"
         },
         "node_modules/ipaddr.js": {
             "version": "1.9.1",
-            "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
-            "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.10"
             }
         },
         "node_modules/is-alphabetical": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
-            "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -23238,8 +21513,7 @@
         },
         "node_modules/is-alphanumerical": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
-            "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+            "license": "MIT",
             "dependencies": {
                 "is-alphabetical": "^2.0.0",
                 "is-decimal": "^2.0.0"
@@ -23251,8 +21525,7 @@
         },
         "node_modules/is-arguments": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
-            "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "has-tostringtag": "^1.0.0"
@@ -23266,9 +21539,8 @@
         },
         "node_modules/is-array-buffer": {
             "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
-            "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "get-intrinsic": "^1.2.1"
@@ -23282,14 +21554,12 @@
         },
         "node_modules/is-arrayish": {
             "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-            "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
+            "license": "MIT"
         },
         "node_modules/is-async-function": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
-            "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "has-tostringtag": "^1.0.0"
             },
@@ -23302,9 +21572,8 @@
         },
         "node_modules/is-bigint": {
             "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
-            "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "has-bigints": "^1.0.1"
             },
@@ -23314,8 +21583,7 @@
         },
         "node_modules/is-binary-path": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
-            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+            "license": "MIT",
             "dependencies": {
                 "binary-extensions": "^2.0.0"
             },
@@ -23325,9 +21593,8 @@
         },
         "node_modules/is-boolean-object": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
-            "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "has-tostringtag": "^1.0.0"
@@ -23341,8 +21608,7 @@
         },
         "node_modules/is-callable": {
             "version": "1.2.7",
-            "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
-            "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.4"
             },
@@ -23350,21 +21616,9 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/is-cidr": {
-            "version": "5.0.5",
-            "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-5.0.5.tgz",
-            "integrity": "sha512-zDlCvz2v8dBpumuGD4/fc7wzFKY6UYOvFW29JWSstdJoByGN3TKwS0tFA9VWc7DM01VOVOn/DaR84D8Mihp9Rg==",
-            "dependencies": {
-                "cidr-regex": "^4.0.4"
-            },
-            "engines": {
-                "node": ">=14"
-            }
-        },
         "node_modules/is-core-module": {
             "version": "2.13.1",
-            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
-            "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+            "license": "MIT",
             "dependencies": {
                 "hasown": "^2.0.0"
             },
@@ -23374,9 +21628,8 @@
         },
         "node_modules/is-data-view": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
-            "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "is-typed-array": "^1.1.13"
             },
@@ -23389,8 +21642,7 @@
         },
         "node_modules/is-date-object": {
             "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
-            "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+            "license": "MIT",
             "dependencies": {
                 "has-tostringtag": "^1.0.0"
             },
@@ -23403,8 +21655,7 @@
         },
         "node_modules/is-decimal": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
-            "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -23412,9 +21663,8 @@
         },
         "node_modules/is-docker": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
-            "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
             "dev": true,
+            "license": "MIT",
             "bin": {
                 "is-docker": "cli.js"
             },
@@ -23425,10 +21675,13 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
+        "node_modules/is-electron": {
+            "version": "2.2.2",
+            "license": "MIT"
+        },
         "node_modules/is-expression": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
-            "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
+            "license": "MIT",
             "dependencies": {
                 "acorn": "^7.1.1",
                 "object-assign": "^4.1.1"
@@ -23436,8 +21689,7 @@
         },
         "node_modules/is-expression/node_modules/acorn": {
             "version": "7.4.1",
-            "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-            "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+            "license": "MIT",
             "bin": {
                 "acorn": "bin/acorn"
             },
@@ -23447,25 +21699,22 @@
         },
         "node_modules/is-extendable": {
             "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-            "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/is-extglob": {
             "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-            "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/is-finalizationregistry": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz",
-            "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.2"
             },
@@ -23475,21 +21724,18 @@
         },
         "node_modules/is-fullwidth-code-point": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-            "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/is-function": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
-            "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
+            "license": "MIT"
         },
         "node_modules/is-generator-function": {
             "version": "1.0.10",
-            "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
-            "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+            "license": "MIT",
             "dependencies": {
                 "has-tostringtag": "^1.0.0"
             },
@@ -23502,8 +21748,7 @@
         },
         "node_modules/is-glob": {
             "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-            "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+            "license": "MIT",
             "dependencies": {
                 "is-extglob": "^2.1.1"
             },
@@ -23513,8 +21758,7 @@
         },
         "node_modules/is-hexadecimal": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
-            "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -23522,9 +21766,8 @@
         },
         "node_modules/is-inside-container": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
-            "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "is-docker": "^3.0.0"
             },
@@ -23540,14 +21783,12 @@
         },
         "node_modules/is-lambda": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
-            "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="
+            "license": "MIT"
         },
         "node_modules/is-map": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
-            "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.4"
             },
@@ -23557,9 +21798,8 @@
         },
         "node_modules/is-negative-zero": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
-            "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.4"
             },
@@ -23569,9 +21809,8 @@
         },
         "node_modules/is-network-error": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz",
-            "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=16"
             },
@@ -23581,17 +21820,15 @@
         },
         "node_modules/is-number": {
             "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.12.0"
             }
         },
         "node_modules/is-number-object": {
             "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
-            "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "has-tostringtag": "^1.0.0"
             },
@@ -23604,16 +21841,14 @@
         },
         "node_modules/is-path-inside": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
-            "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/is-plain-obj": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
-            "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=12"
             },
@@ -23623,8 +21858,7 @@
         },
         "node_modules/is-plain-object": {
             "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-            "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+            "license": "MIT",
             "dependencies": {
                 "isobject": "^3.0.1"
             },
@@ -23634,19 +21868,16 @@
         },
         "node_modules/is-potential-custom-element-name": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
-            "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/is-promise": {
             "version": "2.2.2",
-            "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
-            "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
+            "license": "MIT"
         },
         "node_modules/is-regex": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
-            "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "has-tostringtag": "^1.0.0"
@@ -23660,9 +21891,8 @@
         },
         "node_modules/is-set": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
-            "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.4"
             },
@@ -23672,9 +21902,8 @@
         },
         "node_modules/is-shared-array-buffer": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
-            "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7"
             },
@@ -23687,8 +21916,7 @@
         },
         "node_modules/is-stream": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
-            "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             },
@@ -23698,9 +21926,8 @@
         },
         "node_modules/is-string": {
             "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
-            "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "has-tostringtag": "^1.0.0"
             },
@@ -23713,9 +21940,8 @@
         },
         "node_modules/is-symbol": {
             "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
-            "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "has-symbols": "^1.0.2"
             },
@@ -23728,8 +21954,7 @@
         },
         "node_modules/is-typed-array": {
             "version": "1.1.13",
-            "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
-            "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+            "license": "MIT",
             "dependencies": {
                 "which-typed-array": "^1.1.14"
             },
@@ -23742,14 +21967,12 @@
         },
         "node_modules/is-typedarray": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-            "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+            "license": "MIT"
         },
         "node_modules/is-unicode-supported": {
             "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
-            "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=10"
             },
@@ -23757,16 +21980,18 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
+        "node_modules/is-url": {
+            "version": "1.2.4",
+            "license": "MIT"
+        },
         "node_modules/is-utf8": {
             "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
-            "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q=="
+            "license": "MIT"
         },
         "node_modules/is-weakmap": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
-            "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.4"
             },
@@ -23776,9 +22001,8 @@
         },
         "node_modules/is-weakref": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
-            "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.2"
             },
@@ -23788,9 +22012,8 @@
         },
         "node_modules/is-weakset": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
-            "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "get-intrinsic": "^1.2.4"
@@ -23804,17 +22027,15 @@
         },
         "node_modules/is-windows": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
-            "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/is-wsl": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
-            "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "is-inside-container": "^1.0.0"
             },
@@ -23827,27 +22048,23 @@
         },
         "node_modules/isarray": {
             "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-            "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/isexe": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-            "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+            "license": "ISC"
         },
         "node_modules/isobject": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-            "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/isomorphic-fetch": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz",
-            "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==",
+            "license": "MIT",
             "dependencies": {
                 "node-fetch": "^2.6.1",
                 "whatwg-fetch": "^3.4.1"
@@ -23855,14 +22072,12 @@
         },
         "node_modules/isstream": {
             "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-            "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
+            "license": "MIT"
         },
         "node_modules/iterator.prototype": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
-            "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "define-properties": "^1.2.1",
                 "get-intrinsic": "^1.2.1",
@@ -23873,8 +22088,7 @@
         },
         "node_modules/its-set": {
             "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/its-set/-/its-set-1.2.3.tgz",
-            "integrity": "sha512-UQc+xLLn+0a8KKRXRj3OS2kERK8G7zcayPpPULqZnPwuJ1hGWEO8+j0T5eycu7DKXYjezw3pyF8oV1fJkJxV5w==",
+            "license": "MIT",
             "dependencies": {
                 "babel-runtime": "6.x.x",
                 "lodash.get": "^4.4.2"
@@ -23882,8 +22096,7 @@
         },
         "node_modules/jackspeak": {
             "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
-            "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
+            "license": "BlueOak-1.0.0",
             "dependencies": {
                 "@isaacs/cliui": "^8.0.2"
             },
@@ -23899,8 +22112,7 @@
         },
         "node_modules/jest-util": {
             "version": "29.7.0",
-            "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
-            "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
+            "license": "MIT",
             "dependencies": {
                 "@jest/types": "^29.6.3",
                 "@types/node": "*",
@@ -23915,8 +22127,7 @@
         },
         "node_modules/jest-util/node_modules/ansi-styles": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+            "license": "MIT",
             "dependencies": {
                 "color-convert": "^2.0.1"
             },
@@ -23929,8 +22140,7 @@
         },
         "node_modules/jest-util/node_modules/chalk": {
             "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-            "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^4.1.0",
                 "supports-color": "^7.1.0"
@@ -23944,8 +22154,7 @@
         },
         "node_modules/jest-util/node_modules/color-convert": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+            "license": "MIT",
             "dependencies": {
                 "color-name": "~1.1.4"
             },
@@ -23955,21 +22164,18 @@
         },
         "node_modules/jest-util/node_modules/color-name": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+            "license": "MIT"
         },
         "node_modules/jest-util/node_modules/has-flag": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/jest-util/node_modules/supports-color": {
             "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-            "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+            "license": "MIT",
             "dependencies": {
                 "has-flag": "^4.0.0"
             },
@@ -23979,8 +22185,7 @@
         },
         "node_modules/jest-worker": {
             "version": "29.7.0",
-            "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
-            "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*",
                 "jest-util": "^29.7.0",
@@ -23993,16 +22198,14 @@
         },
         "node_modules/jest-worker/node_modules/has-flag": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/jest-worker/node_modules/supports-color": {
             "version": "8.1.1",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-            "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+            "license": "MIT",
             "dependencies": {
                 "has-flag": "^4.0.0"
             },
@@ -24015,8 +22218,7 @@
         },
         "node_modules/jimp": {
             "version": "0.22.12",
-            "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.22.12.tgz",
-            "integrity": "sha512-R5jZaYDnfkxKJy1dwLpj/7cvyjxiclxU3F4TrI/J4j2rS0niq6YDUMoPn5hs8GDpO+OZGo7Ky057CRtWesyhfg==",
+            "license": "MIT",
             "dependencies": {
                 "@jimp/custom": "^0.22.12",
                 "@jimp/plugins": "^0.22.12",
@@ -24026,13 +22228,11 @@
         },
         "node_modules/jimp/node_modules/regenerator-runtime": {
             "version": "0.13.11",
-            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
-            "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+            "license": "MIT"
         },
         "node_modules/jpeg-autorotate": {
             "version": "9.0.0",
-            "resolved": "https://registry.npmjs.org/jpeg-autorotate/-/jpeg-autorotate-9.0.0.tgz",
-            "integrity": "sha512-bMzp1iIOpqF2dWiMwb3Mc9MfexYuiBmznNIeVtnedqFrfVql3Ueptg7Cefz6ZJuJais8sb+mBGQD/hw3Ud8eRA==",
+            "license": "MIT",
             "dependencies": {
                 "glob": "^7.2.0",
                 "jpeg-js": "^0.4.3",
@@ -24048,8 +22248,7 @@
         },
         "node_modules/jpeg-autorotate/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -24057,9 +22256,7 @@
         },
         "node_modules/jpeg-autorotate/node_modules/glob": {
             "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "deprecated": "Glob versions prior to v9 are no longer supported",
+            "license": "ISC",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -24077,8 +22274,7 @@
         },
         "node_modules/jpeg-autorotate/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -24088,33 +22284,27 @@
         },
         "node_modules/jpeg-js": {
             "version": "0.4.4",
-            "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz",
-            "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg=="
+            "license": "BSD-3-Clause"
         },
         "node_modules/jquery": {
             "version": "3.7.1",
-            "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
-            "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg=="
+            "license": "MIT"
         },
         "node_modules/js-datepicker": {
             "version": "5.18.2",
-            "resolved": "https://registry.npmjs.org/js-datepicker/-/js-datepicker-5.18.2.tgz",
-            "integrity": "sha512-lBh5tIwb1ewDVlNHuwczoLiMhTFWnGYuHSA7ONAPKyMeofIFZDFGeOZ71UTY/Mk2evJJt+L66ec/RiXUy8XzEg=="
+            "license": "MIT"
         },
         "node_modules/js-stringify": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
-            "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g=="
+            "license": "MIT"
         },
         "node_modules/js-tokens": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-            "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+            "license": "MIT"
         },
         "node_modules/js-yaml": {
             "version": "3.14.1",
-            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-            "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+            "license": "MIT",
             "dependencies": {
                 "argparse": "^1.0.7",
                 "esprima": "^4.0.0"
@@ -24125,13 +22315,12 @@
         },
         "node_modules/jsbn": {
             "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-            "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
+            "license": "MIT"
         },
         "node_modules/jsdom": {
             "version": "24.0.0",
-            "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "cssstyle": "^4.0.1",
                 "data-urls": "^5.0.0",
@@ -24169,9 +22358,8 @@
         },
         "node_modules/jsdom/node_modules/agent-base": {
             "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
-            "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "debug": "^4.3.4"
             },
@@ -24181,9 +22369,8 @@
         },
         "node_modules/jsdom/node_modules/https-proxy-agent": {
             "version": "7.0.4",
-            "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
-            "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "agent-base": "^7.0.2",
                 "debug": "4"
@@ -24194,8 +22381,7 @@
         },
         "node_modules/jsesc": {
             "version": "2.5.2",
-            "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-            "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+            "license": "MIT",
             "bin": {
                 "jsesc": "bin/jsesc"
             },
@@ -24213,51 +22399,42 @@
         },
         "node_modules/json-buffer": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
-            "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
+            "license": "MIT"
         },
         "node_modules/json-parse-even-better-errors": {
             "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
-            "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+            "license": "MIT"
         },
         "node_modules/json-schema": {
             "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
-            "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+            "license": "(AFL-2.1 OR BSD-3-Clause)"
         },
         "node_modules/json-schema-traverse": {
             "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-            "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+            "license": "MIT"
         },
         "node_modules/json-stable-stringify-without-jsonify": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-            "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
+            "license": "MIT"
         },
         "node_modules/json-stringify-nice": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz",
-            "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==",
+            "license": "ISC",
             "funding": {
                 "url": "https://github.com/sponsors/isaacs"
             }
         },
         "node_modules/json-stringify-pretty-compact": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz",
-            "integrity": "sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA=="
+            "license": "MIT"
         },
         "node_modules/json-stringify-safe": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-            "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
+            "license": "ISC"
         },
         "node_modules/json5": {
             "version": "2.2.3",
-            "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
-            "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+            "license": "MIT",
             "bin": {
                 "json5": "lib/cli.js"
             },
@@ -24267,8 +22444,7 @@
         },
         "node_modules/jsonfile": {
             "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
-            "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+            "license": "MIT",
             "dependencies": {
                 "universalify": "^2.0.0"
             },
@@ -24278,24 +22454,21 @@
         },
         "node_modules/jsonparse": {
             "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
-            "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
             "engines": [
                 "node >= 0.2.0"
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/jsonschema": {
             "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz",
-            "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==",
+            "license": "MIT",
             "engines": {
                 "node": "*"
             }
         },
         "node_modules/jsprim": {
             "version": "1.4.2",
-            "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
-            "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+            "license": "MIT",
             "dependencies": {
                 "assert-plus": "1.0.0",
                 "extsprintf": "1.3.0",
@@ -24308,8 +22481,7 @@
         },
         "node_modules/jstransformer": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
-            "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==",
+            "license": "MIT",
             "dependencies": {
                 "is-promise": "^2.0.0",
                 "promise": "^7.0.1"
@@ -24317,9 +22489,8 @@
         },
         "node_modules/jsx-ast-utils": {
             "version": "3.3.5",
-            "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
-            "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "array-includes": "^3.1.6",
                 "array.prototype.flat": "^1.3.1",
@@ -24332,8 +22503,7 @@
         },
         "node_modules/jszip": {
             "version": "3.10.1",
-            "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
-            "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+            "license": "(MIT OR GPL-3.0-or-later)",
             "dependencies": {
                 "lie": "~3.3.0",
                 "pako": "~1.0.2",
@@ -24343,13 +22513,11 @@
         },
         "node_modules/jszip/node_modules/isarray": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+            "license": "MIT"
         },
         "node_modules/jszip/node_modules/readable-stream": {
             "version": "2.3.8",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
-            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+            "license": "MIT",
             "dependencies": {
                 "core-util-is": "~1.0.0",
                 "inherits": "~2.0.3",
@@ -24362,31 +22530,26 @@
         },
         "node_modules/jszip/node_modules/safe-buffer": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-            "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+            "license": "MIT"
         },
         "node_modules/jszip/node_modules/string_decoder": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-            "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+            "license": "MIT",
             "dependencies": {
                 "safe-buffer": "~5.1.0"
             }
         },
         "node_modules/just-diff": {
             "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz",
-            "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA=="
+            "license": "MIT"
         },
         "node_modules/just-diff-apply": {
             "version": "5.5.0",
-            "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz",
-            "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw=="
+            "license": "MIT"
         },
         "node_modules/jwa": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
-            "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
+            "license": "MIT",
             "dependencies": {
                 "buffer-equal-constant-time": "1.0.1",
                 "ecdsa-sig-formatter": "1.0.11",
@@ -24395,8 +22558,7 @@
         },
         "node_modules/jws": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
-            "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
+            "license": "MIT",
             "dependencies": {
                 "jwa": "^2.0.0",
                 "safe-buffer": "^5.0.1"
@@ -24404,20 +22566,18 @@
         },
         "node_modules/kareem": {
             "version": "2.6.3",
-            "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz",
-            "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=12.0.0"
             }
         },
         "node_modules/katex": {
             "version": "0.16.10",
-            "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.10.tgz",
-            "integrity": "sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==",
             "funding": [
                 "https://opencollective.com/katex",
                 "https://github.com/sponsors/katex"
             ],
+            "license": "MIT",
             "dependencies": {
                 "commander": "^8.3.0"
             },
@@ -24427,21 +22587,18 @@
         },
         "node_modules/katex/node_modules/commander": {
             "version": "8.3.0",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
-            "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 12"
             }
         },
         "node_modules/kdbush": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz",
-            "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA=="
+            "license": "ISC"
         },
         "node_modules/keygrip": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
-            "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
+            "license": "MIT",
             "dependencies": {
                 "tsscmp": "1.0.6"
             },
@@ -24451,45 +22608,38 @@
         },
         "node_modules/keyv": {
             "version": "4.5.4",
-            "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
-            "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+            "license": "MIT",
             "dependencies": {
                 "json-buffer": "3.0.1"
             }
         },
         "node_modules/khroma": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz",
-            "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="
+            "version": "2.1.0"
         },
         "node_modules/kind-of": {
             "version": "6.0.3",
-            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-            "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/klaw": {
             "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
-            "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==",
+            "license": "MIT",
             "optionalDependencies": {
                 "graceful-fs": "^4.1.9"
             }
         },
         "node_modules/kleur": {
             "version": "4.1.5",
-            "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
-            "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/kruptein": {
             "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/kruptein/-/kruptein-3.0.6.tgz",
-            "integrity": "sha512-EQJjTwAJfQkC4NfdQdo3HXM2a9pmBm8oidzH270cYu1MbgXPNPMJuldN7OPX+qdhPO5rw4X3/iKz0BFBfkXGKA==",
+            "license": "MIT",
             "dependencies": {
                 "asn1.js": "^5.4.1"
             },
@@ -24499,8 +22649,7 @@
         },
         "node_modules/ky": {
             "version": "0.25.1",
-            "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz",
-            "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10"
             },
@@ -24510,8 +22659,7 @@
         },
         "node_modules/ky-universal": {
             "version": "0.8.2",
-            "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz",
-            "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==",
+            "license": "MIT",
             "dependencies": {
                 "abort-controller": "^3.0.0",
                 "node-fetch": "3.0.0-beta.9"
@@ -24534,8 +22682,7 @@
         },
         "node_modules/ky-universal/node_modules/node-fetch": {
             "version": "3.0.0-beta.9",
-            "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz",
-            "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==",
+            "license": "MIT",
             "dependencies": {
                 "data-uri-to-buffer": "^3.0.1",
                 "fetch-blob": "^2.1.1"
@@ -24550,15 +22697,13 @@
         },
         "node_modules/language-subtag-registry": {
             "version": "0.3.23",
-            "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
-            "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
-            "dev": true
+            "dev": true,
+            "license": "CC0-1.0"
         },
         "node_modules/language-tags": {
             "version": "1.0.9",
-            "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
-            "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "language-subtag-registry": "^0.3.20"
             },
@@ -24568,9 +22713,8 @@
         },
         "node_modules/launch-editor": {
             "version": "2.6.1",
-            "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz",
-            "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "picocolors": "^1.0.0",
                 "shell-quote": "^1.8.1"
@@ -24578,13 +22722,11 @@
         },
         "node_modules/layout-base": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz",
-            "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="
+            "license": "MIT"
         },
         "node_modules/lazystream": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
-            "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
+            "license": "MIT",
             "dependencies": {
                 "readable-stream": "^2.0.5"
             },
@@ -24594,13 +22736,11 @@
         },
         "node_modules/lazystream/node_modules/isarray": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+            "license": "MIT"
         },
         "node_modules/lazystream/node_modules/readable-stream": {
             "version": "2.3.8",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
-            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+            "license": "MIT",
             "dependencies": {
                 "core-util-is": "~1.0.0",
                 "inherits": "~2.0.3",
@@ -24613,26 +22753,29 @@
         },
         "node_modules/lazystream/node_modules/readable-stream/node_modules/core-util-is": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-            "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+            "license": "MIT"
+        },
+        "node_modules/lazystream/node_modules/readable-stream/node_modules/string_decoder": {
+            "version": "1.1.1",
+            "license": "MIT",
+            "dependencies": {
+                "safe-buffer": "~5.1.0"
+            }
         },
         "node_modules/lazystream/node_modules/safe-buffer": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-            "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+            "license": "MIT"
         },
         "node_modules/leac": {
             "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz",
-            "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==",
+            "license": "MIT",
             "funding": {
                 "url": "https://ko-fi.com/killymxi"
             }
         },
         "node_modules/levn": {
             "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-            "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+            "license": "MIT",
             "dependencies": {
                 "prelude-ls": "^1.2.1",
                 "type-check": "~0.4.0"
@@ -24641,255 +22784,27 @@
                 "node": ">= 0.8.0"
             }
         },
-        "node_modules/libnpmaccess": {
-            "version": "8.0.6",
-            "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.6.tgz",
-            "integrity": "sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==",
-            "dependencies": {
-                "npm-package-arg": "^11.0.2",
-                "npm-registry-fetch": "^17.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/libnpmdiff": {
-            "version": "6.1.2",
-            "resolved": "https://registry.npmjs.org/libnpmdiff/-/libnpmdiff-6.1.2.tgz",
-            "integrity": "sha512-cyGmfI9RsAugdbWWSE9eH7tj5/igcRJHFNksIevwXn6mobu+Kna2uX8uWgmlpu90Bg23nPW2rtSJIbGi7IPhyg==",
-            "dependencies": {
-                "@npmcli/arborist": "^7.5.2",
-                "@npmcli/installed-package-contents": "^2.1.0",
-                "binary-extensions": "^2.3.0",
-                "diff": "^5.1.0",
-                "minimatch": "^9.0.4",
-                "npm-package-arg": "^11.0.2",
-                "pacote": "^18.0.6",
-                "tar": "^6.2.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/libnpmexec": {
-            "version": "8.1.1",
-            "resolved": "https://registry.npmjs.org/libnpmexec/-/libnpmexec-8.1.1.tgz",
-            "integrity": "sha512-KGXr+4WvaMNqU27z0qICbFz2EKzYWrcxWoHKWmSX3A1UyEeuLFc86Pie6cbCs5JeKN8TMVyLBJ9z25PHh458eg==",
-            "dependencies": {
-                "@npmcli/arborist": "^7.5.2",
-                "@npmcli/run-script": "^8.1.0",
-                "ci-info": "^4.0.0",
-                "npm-package-arg": "^11.0.2",
-                "pacote": "^18.0.6",
-                "proc-log": "^4.2.0",
-                "read": "^3.0.1",
-                "read-package-json-fast": "^3.0.2",
-                "semver": "^7.3.7",
-                "walk-up-path": "^3.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/libnpmexec/node_modules/ci-info": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz",
-            "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==",
-            "funding": [
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/sibiraj-s"
-                }
-            ],
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/libnpmexec/node_modules/semver": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/libnpmfund": {
-            "version": "5.0.10",
-            "resolved": "https://registry.npmjs.org/libnpmfund/-/libnpmfund-5.0.10.tgz",
-            "integrity": "sha512-WkjxfGC7sdGD7lXYsVNKi3NogROJMTeIFRgFicd0UxEk2eI0CKSC8Tcn5zuazmZse1/Jg0AWHoSgJWpy+0ZXvg==",
-            "dependencies": {
-                "@npmcli/arborist": "^7.5.2"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/libnpmhook": {
-            "version": "10.0.5",
-            "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-10.0.5.tgz",
-            "integrity": "sha512-XulT+N/s3o9oFlIq6pGRv3OG2qR1NVRbVQOKLchycDwyf16RZA3oXbeEgs2H3oE7hRZPUMBZqsalQXMMPal3cQ==",
-            "dependencies": {
-                "aproba": "^2.0.0",
-                "npm-registry-fetch": "^17.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/libnpmorg": {
-            "version": "6.0.6",
-            "resolved": "https://registry.npmjs.org/libnpmorg/-/libnpmorg-6.0.6.tgz",
-            "integrity": "sha512-4MVxsAS4H2z7su/sU0GsrirfBm4ssfqPRSDvoZ8qmRw58kEWJ0qE0cQ2VilRlFgCWKzKPhfoPeyNPyxBTnOusA==",
-            "dependencies": {
-                "aproba": "^2.0.0",
-                "npm-registry-fetch": "^17.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/libnpmpack": {
-            "version": "7.0.2",
-            "resolved": "https://registry.npmjs.org/libnpmpack/-/libnpmpack-7.0.2.tgz",
-            "integrity": "sha512-hVtWu8P7JIl6SHGoVvECRp2Y+5qHeaUhTLzHpMAPi4iG9dFnY9YgitrAAMfUA/qZhLEvuD+KoYJ04mM7chXt+Q==",
-            "dependencies": {
-                "@npmcli/arborist": "^7.5.2",
-                "@npmcli/run-script": "^8.1.0",
-                "npm-package-arg": "^11.0.2",
-                "pacote": "^18.0.6"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/libnpmpublish": {
-            "version": "9.0.8",
-            "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.8.tgz",
-            "integrity": "sha512-sIsWBSAT7ugDPrV72/Js1vYpZBZuOqlMOOZmpXh2Mn5Tjh4Ycv3qYQGHX19g5wdOuQw4wgluSzF/z7EFSO084g==",
-            "dependencies": {
-                "ci-info": "^4.0.0",
-                "normalize-package-data": "^6.0.1",
-                "npm-package-arg": "^11.0.2",
-                "npm-registry-fetch": "^17.0.1",
-                "proc-log": "^4.2.0",
-                "semver": "^7.3.7",
-                "sigstore": "^2.2.0",
-                "ssri": "^10.0.6"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/libnpmpublish/node_modules/ci-info": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz",
-            "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==",
-            "funding": [
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/sibiraj-s"
-                }
-            ],
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/libnpmpublish/node_modules/semver": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/libnpmsearch": {
-            "version": "7.0.5",
-            "resolved": "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-7.0.5.tgz",
-            "integrity": "sha512-GSwFPsPfHsOgWM1bTArG+zSmax5ghqCKh81296/rWLw9nBgBWwHj1MJSZ68SfkjAXgMcr34dHzlKJZjRDIjSNQ==",
-            "dependencies": {
-                "npm-registry-fetch": "^17.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/libnpmteam": {
-            "version": "6.0.5",
-            "resolved": "https://registry.npmjs.org/libnpmteam/-/libnpmteam-6.0.5.tgz",
-            "integrity": "sha512-iJW4Cq42GMqMwZEV+Mx8ZLj0Np5kGXQ9P/BAekHjIpYC1v3/vJqbmfJkzkwFvGxEhUotmx+xpLChZCDJ7c3rxA==",
-            "dependencies": {
-                "aproba": "^2.0.0",
-                "npm-registry-fetch": "^17.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/libnpmversion": {
-            "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/libnpmversion/-/libnpmversion-6.0.2.tgz",
-            "integrity": "sha512-rbc4saGNaXeLMvby8Ta5sOgOXQTrYIXxg+MaA7Uy2wMhESb5ugIfkXJPfgMwLOxQ3o+xDFzNhul6KLjsCyV4tA==",
-            "dependencies": {
-                "@npmcli/git": "^5.0.7",
-                "@npmcli/run-script": "^8.1.0",
-                "json-parse-even-better-errors": "^3.0.2",
-                "proc-log": "^4.2.0",
-                "semver": "^7.3.7"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/libnpmversion/node_modules/json-parse-even-better-errors": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
-            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/libnpmversion/node_modules/semver": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
         "node_modules/lie": {
             "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
-            "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+            "license": "MIT",
             "dependencies": {
                 "immediate": "~3.0.5"
             }
         },
         "node_modules/lines-and-columns": {
             "version": "1.2.4",
-            "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
-            "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+            "license": "MIT"
         },
         "node_modules/linkify-it": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
-            "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
+            "license": "MIT",
             "dependencies": {
                 "uc.micro": "^2.0.0"
             }
         },
         "node_modules/load-bmfont": {
             "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz",
-            "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==",
+            "license": "MIT",
             "dependencies": {
                 "buffer-equal": "0.0.1",
                 "mime": "^1.3.4",
@@ -24903,16 +22818,14 @@
         },
         "node_modules/loader-runner": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
-            "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.11.5"
             }
         },
         "node_modules/loader-utils": {
             "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
-            "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+            "license": "MIT",
             "dependencies": {
                 "big.js": "^5.2.2",
                 "emojis-list": "^3.0.0",
@@ -24924,8 +22837,7 @@
         },
         "node_modules/locate-path": {
             "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-            "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+            "license": "MIT",
             "dependencies": {
                 "p-locate": "^5.0.0"
             },
@@ -24938,49 +22850,40 @@
         },
         "node_modules/lodash": {
             "version": "4.17.21",
-            "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-            "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+            "license": "MIT"
         },
         "node_modules/lodash-es": {
             "version": "4.17.21",
-            "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
-            "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+            "license": "MIT"
         },
         "node_modules/lodash.chunk": {
             "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz",
-            "integrity": "sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w=="
+            "license": "MIT"
         },
         "node_modules/lodash.clonedeep": {
             "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
-            "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
+            "license": "MIT"
         },
         "node_modules/lodash.debounce": {
             "version": "4.0.8",
-            "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
-            "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
+            "license": "MIT"
         },
         "node_modules/lodash.get": {
             "version": "4.4.2",
-            "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
-            "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="
+            "license": "MIT"
         },
         "node_modules/lodash.merge": {
             "version": "4.6.2",
-            "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-            "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+            "license": "MIT"
         },
         "node_modules/lodash.padend": {
             "version": "4.6.1",
-            "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
-            "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw=="
+            "license": "MIT"
         },
         "node_modules/log-symbols": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
-            "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "chalk": "^4.1.0",
                 "is-unicode-supported": "^0.1.0"
@@ -24994,9 +22897,8 @@
         },
         "node_modules/log-symbols/node_modules/ansi-styles": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "color-convert": "^2.0.1"
             },
@@ -25009,9 +22911,8 @@
         },
         "node_modules/log-symbols/node_modules/chalk": {
             "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-            "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^4.1.0",
                 "supports-color": "^7.1.0"
@@ -25025,9 +22926,8 @@
         },
         "node_modules/log-symbols/node_modules/color-convert": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "color-name": "~1.1.4"
             },
@@ -25037,24 +22937,21 @@
         },
         "node_modules/log-symbols/node_modules/color-name": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/log-symbols/node_modules/has-flag": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/log-symbols/node_modules/supports-color": {
             "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-            "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "has-flag": "^4.0.0"
             },
@@ -25064,8 +22961,7 @@
         },
         "node_modules/longest-streak": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
-            "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -25073,8 +22969,7 @@
         },
         "node_modules/loose-envify": {
             "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-            "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+            "license": "MIT",
             "dependencies": {
                 "js-tokens": "^3.0.0 || ^4.0.0"
             },
@@ -25084,25 +22979,22 @@
         },
         "node_modules/loupe": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz",
-            "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "get-func-name": "^2.0.1"
             }
         },
         "node_modules/lower-case": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
-            "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
+            "license": "MIT",
             "dependencies": {
                 "tslib": "^2.0.3"
             }
         },
         "node_modules/lowercase-keys": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
-            "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==",
+            "license": "MIT",
             "engines": {
                 "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
             },
@@ -25112,24 +23004,21 @@
         },
         "node_modules/lru-cache": {
             "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
-            "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+            "license": "ISC",
             "dependencies": {
                 "yallist": "^3.0.2"
             }
         },
         "node_modules/magic-string": {
             "version": "0.30.10",
-            "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
-            "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+            "license": "MIT",
             "dependencies": {
                 "@jridgewell/sourcemap-codec": "^1.4.15"
             }
         },
         "node_modules/magicli": {
             "version": "0.0.8",
-            "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.8.tgz",
-            "integrity": "sha512-x/eBenweAHF+DsYy172sK4doRxZl0yrJnfxhLJiN7H6hPM3Ya0PfI6uBZshZ3ScFFSQD7HXgBqMdbnXKEZsO1g==",
+            "license": "MIT",
             "dependencies": {
                 "cliss": "0.0.2",
                 "find-up": "^2.1.0",
@@ -25139,8 +23028,7 @@
         },
         "node_modules/magicli/node_modules/find-up": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-            "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
+            "license": "MIT",
             "dependencies": {
                 "locate-path": "^2.0.0"
             },
@@ -25150,8 +23038,7 @@
         },
         "node_modules/magicli/node_modules/locate-path": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-            "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
+            "license": "MIT",
             "dependencies": {
                 "p-locate": "^2.0.0",
                 "path-exists": "^3.0.0"
@@ -25162,8 +23049,7 @@
         },
         "node_modules/magicli/node_modules/p-limit": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-            "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+            "license": "MIT",
             "dependencies": {
                 "p-try": "^1.0.0"
             },
@@ -25173,8 +23059,7 @@
         },
         "node_modules/magicli/node_modules/p-locate": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-            "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
+            "license": "MIT",
             "dependencies": {
                 "p-limit": "^1.1.0"
             },
@@ -25184,24 +23069,21 @@
         },
         "node_modules/magicli/node_modules/p-try": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-            "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/magicli/node_modules/path-exists": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-            "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/make-dir": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-            "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+            "license": "MIT",
             "dependencies": {
                 "semver": "^6.0.0"
             },
@@ -25214,14 +23096,12 @@
         },
         "node_modules/make-error": {
             "version": "1.3.6",
-            "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
-            "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
-            "dev": true
+            "dev": true,
+            "license": "ISC"
         },
         "node_modules/make-fetch-happen": {
             "version": "13.0.1",
-            "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz",
-            "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==",
+            "license": "ISC",
             "dependencies": {
                 "@npmcli/agent": "^2.0.0",
                 "cacache": "^18.0.0",
@@ -25242,7 +23122,7 @@
         },
         "node_modules/mapbox-gl": {
             "version": "3.4.0",
-            "integrity": "sha512-QWgL28zg/zuIOHeF8DXPvHy1UHTgO5p4Oy6ifCAHwI9/hoI9/Fruya0yI4HkDtX1OgzTLO6SHO13A781BGJvyw==",
+            "license": "SEE LICENSE IN LICENSE.txt",
             "dependencies": {
                 "@mapbox/jsonlint-lines-primitives": "^2.0.2",
                 "@mapbox/mapbox-gl-supported": "^3.0.0",
@@ -25275,7 +23155,7 @@
         },
         "node_modules/markdown-it": {
             "version": "14.1.0",
-            "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
+            "license": "MIT",
             "dependencies": {
                 "argparse": "^2.0.1",
                 "entities": "^4.4.0",
@@ -25290,13 +23170,11 @@
         },
         "node_modules/markdown-it/node_modules/argparse": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+            "license": "Python-2.0"
         },
         "node_modules/markdown-table": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz",
-            "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -25304,13 +23182,11 @@
         },
         "node_modules/material-colors": {
             "version": "1.2.6",
-            "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz",
-            "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg=="
+            "license": "ISC"
         },
         "node_modules/math-codegen": {
             "version": "0.3.5",
-            "resolved": "https://registry.npmjs.org/math-codegen/-/math-codegen-0.3.5.tgz",
-            "integrity": "sha512-SsFYMv33FxMKYxI1PBiaZT+8AeDITK+k/PKhbHNlOPHIz5FIPF4wy78yWqanN6luXdsXENUZgCIC6xH6bfUq1g==",
+            "license": "MIT",
             "dependencies": {
                 "extend": "^3.0.0",
                 "mr-parser": "^0.2.1"
@@ -25318,8 +23194,7 @@
         },
         "node_modules/mathjax-full": {
             "version": "3.2.2",
-            "resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz",
-            "integrity": "sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "esm": "^3.2.25",
                 "mhchemparser": "^4.1.0",
@@ -25329,21 +23204,18 @@
         },
         "node_modules/mathquill": {
             "version": "0.10.1-a",
-            "resolved": "https://registry.npmjs.org/mathquill/-/mathquill-0.10.1-a.tgz",
-            "integrity": "sha512-snSAEwAtwdwBFSor+nVBnWWQtTw67kgAgKMyAIxuz4ZPboy0qkWZmd7BL3lfOXp/INihhRlU1PcfaAtDaRhmzA==",
+            "license": "MPL-2.0",
             "dependencies": {
                 "jquery": "^1.12.3"
             }
         },
         "node_modules/mathquill/node_modules/jquery": {
             "version": "1.12.4",
-            "resolved": "https://registry.npmjs.org/jquery/-/jquery-1.12.4.tgz",
-            "integrity": "sha512-UEVp7PPK9xXYSk8xqXCJrkXnKZtlgWkd2GsAQbMRFK6S/ePU2JN5G2Zum8hIVjzR3CpdfSqdqAzId/xd4TJHeg=="
+            "license": "MIT"
         },
         "node_modules/md5-file": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz",
-            "integrity": "sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==",
+            "license": "MIT",
             "bin": {
                 "md5-file": "cli.js"
             },
@@ -25353,8 +23225,7 @@
         },
         "node_modules/mdast-util-find-and-replace": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz",
-            "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "escape-string-regexp": "^5.0.0",
@@ -25368,16 +23239,14 @@
         },
         "node_modules/mdast-util-find-and-replace/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
-            "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=12"
             },
@@ -25387,8 +23256,7 @@
         },
         "node_modules/mdast-util-from-markdown": {
             "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz",
-            "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^3.0.0",
                 "@types/unist": "^2.0.0",
@@ -25410,8 +23278,7 @@
         },
         "node_modules/mdast-util-gfm": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz",
-            "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==",
+            "license": "MIT",
             "dependencies": {
                 "mdast-util-from-markdown": "^2.0.0",
                 "mdast-util-gfm-autolink-literal": "^2.0.0",
@@ -25428,8 +23295,7 @@
         },
         "node_modules/mdast-util-gfm-autolink-literal": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz",
-            "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "ccount": "^2.0.0",
@@ -25444,16 +23310,13 @@
         },
         "node_modules/mdast-util-gfm-autolink-literal/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25464,6 +23327,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -25471,8 +23335,6 @@
         },
         "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25482,12 +23344,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25497,12 +23358,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-footnote": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz",
-            "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "devlop": "^1.1.0",
@@ -25517,16 +23378,14 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
-            "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "@types/unist": "^3.0.0",
@@ -25548,13 +23407,11 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
-            "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0"
             },
@@ -25565,8 +23422,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
-            "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25577,6 +23432,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "@types/debug": "^4.0.0",
                 "debug": "^4.0.0",
@@ -25599,8 +23455,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-core-commonmark": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
-            "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25611,6 +23465,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "devlop": "^1.0.0",
@@ -25632,8 +23487,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-factory-destination": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
-            "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25644,6 +23497,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -25652,8 +23506,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-factory-label": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
-            "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25664,6 +23516,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -25673,8 +23526,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25685,6 +23536,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -25692,8 +23544,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-factory-title": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
-            "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25704,6 +23554,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -25713,8 +23564,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-factory-whitespace": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
-            "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25725,6 +23574,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -25734,8 +23584,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25746,6 +23594,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -25753,8 +23602,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25765,14 +23612,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-classify-character": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
-            "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25783,6 +23629,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -25791,8 +23638,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-combine-extensions": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
-            "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25803,6 +23648,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -25810,8 +23656,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-decode-numeric-character-reference": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
-            "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25822,14 +23666,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-decode-string": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
-            "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25840,6 +23683,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -25849,8 +23693,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25860,12 +23702,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-html-tag-name": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
-            "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25875,12 +23716,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-normalize-identifier": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
-            "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25891,14 +23731,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-resolve-all": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
-            "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25909,14 +23748,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25927,6 +23765,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -25935,8 +23774,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-subtokenize": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
-            "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25947,6 +23784,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-chunked": "^2.0.0",
@@ -25956,8 +23794,6 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25967,12 +23803,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -25982,12 +23817,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/unist-util-stringify-position": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-            "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -25998,13 +23833,11 @@
         },
         "node_modules/mdast-util-gfm-footnote/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-strikethrough": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
-            "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "mdast-util-from-markdown": "^2.0.0",
@@ -26017,16 +23850,14 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
-            "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "@types/unist": "^3.0.0",
@@ -26048,13 +23879,11 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
-            "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0"
             },
@@ -26065,8 +23894,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
-            "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26077,6 +23904,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "@types/debug": "^4.0.0",
                 "debug": "^4.0.0",
@@ -26099,8 +23927,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-core-commonmark": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
-            "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26111,6 +23937,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "devlop": "^1.0.0",
@@ -26132,8 +23959,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-factory-destination": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
-            "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26144,6 +23969,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -26152,8 +23978,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-factory-label": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
-            "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26164,6 +23988,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -26173,8 +23998,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26185,6 +24008,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -26192,8 +24016,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-factory-title": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
-            "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26204,6 +24026,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -26213,8 +24036,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-factory-whitespace": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
-            "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26225,6 +24046,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -26234,8 +24056,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26246,6 +24066,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -26253,8 +24074,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26265,14 +24084,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-classify-character": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
-            "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26283,6 +24101,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -26291,8 +24110,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-combine-extensions": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
-            "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26303,6 +24120,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -26310,8 +24128,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-decode-numeric-character-reference": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
-            "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26322,14 +24138,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-decode-string": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
-            "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26340,6 +24155,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -26349,8 +24165,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26360,12 +24174,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-html-tag-name": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
-            "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26375,12 +24188,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-normalize-identifier": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
-            "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26391,14 +24203,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-resolve-all": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
-            "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26409,14 +24220,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26427,6 +24237,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -26435,8 +24246,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-subtokenize": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
-            "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26447,6 +24256,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-chunked": "^2.0.0",
@@ -26456,8 +24266,6 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26467,12 +24275,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26482,12 +24289,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/unist-util-stringify-position": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-            "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -26498,13 +24305,11 @@
         },
         "node_modules/mdast-util-gfm-strikethrough/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-table": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
-            "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "devlop": "^1.0.0",
@@ -26519,16 +24324,14 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-gfm-table/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
-            "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "@types/unist": "^3.0.0",
@@ -26550,13 +24353,11 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
-            "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0"
             },
@@ -26567,8 +24368,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
-            "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26579,6 +24378,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "@types/debug": "^4.0.0",
                 "debug": "^4.0.0",
@@ -26601,8 +24401,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-core-commonmark": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
-            "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26613,6 +24411,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "devlop": "^1.0.0",
@@ -26634,8 +24433,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-factory-destination": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
-            "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26646,6 +24443,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -26654,8 +24452,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-factory-label": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
-            "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26666,6 +24462,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -26675,8 +24472,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26687,6 +24482,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -26694,8 +24490,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-factory-title": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
-            "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26706,6 +24500,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -26715,8 +24510,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-factory-whitespace": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
-            "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26727,6 +24520,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -26736,8 +24530,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26748,6 +24540,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -26755,8 +24548,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26767,14 +24558,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-classify-character": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
-            "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26785,6 +24575,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -26793,8 +24584,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-combine-extensions": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
-            "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26805,6 +24594,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -26812,8 +24602,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-decode-numeric-character-reference": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
-            "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26824,14 +24612,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-decode-string": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
-            "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26842,6 +24629,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -26851,8 +24639,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26862,12 +24648,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-html-tag-name": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
-            "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26877,12 +24662,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-normalize-identifier": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
-            "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26893,14 +24677,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-resolve-all": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
-            "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26911,14 +24694,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26929,6 +24711,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -26937,8 +24720,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-subtokenize": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
-            "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26949,6 +24730,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-chunked": "^2.0.0",
@@ -26958,8 +24740,6 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26969,12 +24749,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-table/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -26984,12 +24763,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-table/node_modules/unist-util-stringify-position": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-            "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -27000,13 +24779,11 @@
         },
         "node_modules/mdast-util-gfm-table/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-task-list-item": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
-            "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "devlop": "^1.0.0",
@@ -27020,16 +24797,14 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
-            "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "@types/unist": "^3.0.0",
@@ -27051,13 +24826,11 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
-            "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0"
             },
@@ -27068,8 +24841,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
-            "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27080,6 +24851,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "@types/debug": "^4.0.0",
                 "debug": "^4.0.0",
@@ -27102,8 +24874,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-core-commonmark": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
-            "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27114,6 +24884,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "devlop": "^1.0.0",
@@ -27135,8 +24906,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-factory-destination": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
-            "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27147,6 +24916,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -27155,8 +24925,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-factory-label": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
-            "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27167,6 +24935,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -27176,8 +24945,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27188,6 +24955,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -27195,8 +24963,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-factory-title": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
-            "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27207,6 +24973,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -27216,8 +24983,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-factory-whitespace": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
-            "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27228,6 +24993,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -27237,8 +25003,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27249,6 +25013,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -27256,8 +25021,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27268,14 +25031,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-classify-character": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
-            "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27286,6 +25048,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -27294,8 +25057,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-combine-extensions": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
-            "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27306,6 +25067,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -27313,8 +25075,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-decode-numeric-character-reference": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
-            "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27325,14 +25085,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-decode-string": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
-            "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27343,6 +25102,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -27352,8 +25112,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27363,12 +25121,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-html-tag-name": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
-            "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27378,12 +25135,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-normalize-identifier": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
-            "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27394,14 +25150,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-resolve-all": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
-            "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27412,14 +25167,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27430,6 +25184,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -27438,8 +25193,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-subtokenize": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
-            "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27450,6 +25203,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-chunked": "^2.0.0",
@@ -27459,8 +25213,6 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27470,12 +25222,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27485,12 +25236,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-stringify-position": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-            "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -27501,26 +25252,22 @@
         },
         "node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-gfm/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
-            "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "@types/unist": "^3.0.0",
@@ -27542,8 +25289,7 @@
         },
         "node_modules/mdast-util-gfm/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
-            "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0"
             },
@@ -27554,8 +25300,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
-            "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27566,6 +25310,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "@types/debug": "^4.0.0",
                 "debug": "^4.0.0",
@@ -27588,8 +25333,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-core-commonmark": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
-            "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27600,6 +25343,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "devlop": "^1.0.0",
@@ -27621,8 +25365,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-factory-destination": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
-            "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27633,6 +25375,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -27641,8 +25384,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-factory-label": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
-            "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27653,6 +25394,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -27662,8 +25404,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27674,6 +25414,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -27681,8 +25422,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-factory-title": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
-            "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27693,6 +25432,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -27702,8 +25442,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-factory-whitespace": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
-            "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27714,6 +25452,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -27723,8 +25462,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27735,6 +25472,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -27742,8 +25480,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27754,14 +25490,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-classify-character": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
-            "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27772,6 +25507,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -27780,8 +25516,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-combine-extensions": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
-            "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27792,6 +25526,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -27799,8 +25534,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-decode-numeric-character-reference": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
-            "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27811,14 +25544,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-decode-string": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
-            "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27829,6 +25561,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -27838,8 +25571,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27849,12 +25580,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-html-tag-name": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
-            "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27864,12 +25594,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-normalize-identifier": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
-            "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27880,14 +25609,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-resolve-all": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
-            "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27898,14 +25626,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             }
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27916,6 +25643,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -27924,8 +25652,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-subtokenize": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
-            "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27936,6 +25662,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-chunked": "^2.0.0",
@@ -27945,8 +25672,6 @@
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27956,12 +25681,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -27971,12 +25695,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-gfm/node_modules/unist-util-stringify-position": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-            "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -27987,8 +25711,7 @@
         },
         "node_modules/mdast-util-math": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz",
-            "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "@types/mdast": "^4.0.0",
@@ -28005,16 +25728,14 @@
         },
         "node_modules/mdast-util-math/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-math/node_modules/mdast-util-from-markdown": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz",
-            "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "@types/unist": "^3.0.0",
@@ -28036,13 +25757,11 @@
         },
         "node_modules/mdast-util-math/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-math/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
-            "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0"
             },
@@ -28053,8 +25772,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
-            "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28065,6 +25782,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "@types/debug": "^4.0.0",
                 "debug": "^4.0.0",
@@ -28087,8 +25805,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-core-commonmark": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
-            "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28099,6 +25815,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "devlop": "^1.0.0",
@@ -28120,8 +25837,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-factory-destination": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
-            "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28132,6 +25847,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -28140,8 +25856,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-factory-label": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
-            "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28152,6 +25866,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -28161,8 +25876,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28173,6 +25886,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -28180,8 +25894,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-factory-title": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
-            "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28192,6 +25904,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -28201,8 +25914,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-factory-whitespace": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
-            "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28213,6 +25924,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -28222,8 +25934,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28234,6 +25944,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -28241,8 +25952,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28253,14 +25962,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-classify-character": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
-            "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28271,6 +25979,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -28279,8 +25988,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-combine-extensions": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
-            "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28291,6 +25998,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -28298,8 +26006,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-decode-numeric-character-reference": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
-            "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28310,14 +26016,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-decode-string": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
-            "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28328,6 +26033,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -28337,8 +26043,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28348,12 +26052,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-html-tag-name": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
-            "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28363,12 +26066,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-normalize-identifier": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
-            "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28379,14 +26081,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-resolve-all": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
-            "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28397,14 +26098,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             }
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28415,6 +26115,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -28423,8 +26124,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-subtokenize": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
-            "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28435,6 +26134,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-chunked": "^2.0.0",
@@ -28444,8 +26144,6 @@
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28455,12 +26153,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-math/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28470,12 +26167,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-math/node_modules/unist-util-stringify-position": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-            "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -28486,13 +26183,11 @@
         },
         "node_modules/mdast-util-math/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdx-expression": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz",
-            "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/estree-jsx": "^1.0.0",
                 "@types/hast": "^3.0.0",
@@ -28508,16 +26203,14 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
-            "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "@types/unist": "^3.0.0",
@@ -28539,13 +26232,11 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
-            "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0"
             },
@@ -28556,8 +26247,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
-            "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28568,6 +26257,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "@types/debug": "^4.0.0",
                 "debug": "^4.0.0",
@@ -28590,8 +26280,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-core-commonmark": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
-            "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28602,6 +26290,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "devlop": "^1.0.0",
@@ -28623,8 +26312,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-factory-destination": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
-            "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28635,6 +26322,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -28643,8 +26331,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-factory-label": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
-            "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28655,6 +26341,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -28664,8 +26351,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28676,6 +26361,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -28683,8 +26369,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-factory-title": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
-            "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28695,6 +26379,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -28704,8 +26389,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-factory-whitespace": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
-            "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28716,6 +26399,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -28725,8 +26409,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28737,6 +26419,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -28744,8 +26427,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28756,14 +26437,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-classify-character": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
-            "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28774,6 +26454,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -28782,8 +26463,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-combine-extensions": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
-            "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28794,6 +26473,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -28801,8 +26481,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-decode-numeric-character-reference": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
-            "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28813,14 +26491,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-decode-string": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
-            "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28831,6 +26508,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -28840,8 +26518,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28851,12 +26527,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-html-tag-name": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
-            "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28866,12 +26541,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-normalize-identifier": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
-            "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28882,14 +26556,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-resolve-all": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
-            "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28900,14 +26573,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             }
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28918,6 +26590,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -28926,8 +26599,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-subtokenize": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
-            "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28938,6 +26609,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-chunked": "^2.0.0",
@@ -28947,8 +26619,6 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28958,12 +26628,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -28973,12 +26642,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdx-expression/node_modules/unist-util-stringify-position": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-            "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -28989,13 +26658,11 @@
         },
         "node_modules/mdast-util-mdx-expression/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdx-jsx": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz",
-            "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/estree-jsx": "^1.0.0",
                 "@types/hast": "^3.0.0",
@@ -29018,21 +26685,18 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
-            "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "@types/unist": "^3.0.0",
@@ -29054,8 +26718,7 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
-            "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0"
             },
@@ -29066,8 +26729,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
-            "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29078,6 +26739,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "@types/debug": "^4.0.0",
                 "debug": "^4.0.0",
@@ -29100,8 +26762,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-core-commonmark": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
-            "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29112,6 +26772,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "devlop": "^1.0.0",
@@ -29133,8 +26794,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-factory-destination": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
-            "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29145,6 +26804,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -29153,8 +26813,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-factory-label": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
-            "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29165,6 +26823,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -29174,8 +26833,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29186,6 +26843,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -29193,8 +26851,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-factory-title": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
-            "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29205,6 +26861,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -29214,8 +26871,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-factory-whitespace": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
-            "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29226,6 +26881,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -29235,8 +26891,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29247,6 +26901,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -29254,8 +26909,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29266,14 +26919,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-classify-character": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
-            "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29284,6 +26936,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -29292,8 +26945,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-combine-extensions": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
-            "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29304,6 +26955,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -29311,8 +26963,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-decode-numeric-character-reference": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
-            "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29323,14 +26973,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-decode-string": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
-            "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29341,6 +26990,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -29350,8 +27000,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29361,12 +27009,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-html-tag-name": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
-            "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29376,12 +27023,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-normalize-identifier": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
-            "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29392,14 +27038,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-resolve-all": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
-            "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29410,14 +27055,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             }
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29428,6 +27072,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -29436,8 +27081,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-subtokenize": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
-            "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29448,6 +27091,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-chunked": "^2.0.0",
@@ -29457,8 +27101,6 @@
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29468,12 +27110,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29483,12 +27124,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-stringify-position": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-            "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -29499,8 +27140,7 @@
         },
         "node_modules/mdast-util-mdxjs-esm": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
-            "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/estree-jsx": "^1.0.0",
                 "@types/hast": "^3.0.0",
@@ -29516,16 +27156,14 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
-            "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "@types/unist": "^3.0.0",
@@ -29547,13 +27185,11 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
-            "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0"
             },
@@ -29564,8 +27200,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
-            "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29576,6 +27210,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "@types/debug": "^4.0.0",
                 "debug": "^4.0.0",
@@ -29598,8 +27233,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-core-commonmark": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
-            "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29610,6 +27243,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "devlop": "^1.0.0",
@@ -29631,8 +27265,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-factory-destination": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
-            "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29643,6 +27275,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -29651,8 +27284,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-factory-label": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
-            "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29663,6 +27294,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -29672,8 +27304,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29684,6 +27314,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -29691,8 +27322,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-factory-title": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
-            "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29703,6 +27332,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -29712,8 +27342,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-factory-whitespace": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
-            "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29724,6 +27352,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -29733,8 +27362,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29745,6 +27372,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -29752,8 +27380,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29764,14 +27390,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-classify-character": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
-            "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29782,6 +27407,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -29790,8 +27416,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-combine-extensions": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
-            "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29802,6 +27426,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -29809,8 +27434,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-decode-numeric-character-reference": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
-            "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29821,14 +27444,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-decode-string": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
-            "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29839,6 +27461,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -29848,8 +27471,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29859,12 +27480,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-html-tag-name": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
-            "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29874,12 +27494,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-normalize-identifier": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
-            "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29890,14 +27509,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-resolve-all": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
-            "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29908,14 +27526,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             }
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29926,6 +27543,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -29934,8 +27552,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-subtokenize": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
-            "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29946,6 +27562,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-chunked": "^2.0.0",
@@ -29955,8 +27572,6 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29966,12 +27581,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -29981,12 +27595,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/unist-util-stringify-position": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-            "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -29997,13 +27611,11 @@
         },
         "node_modules/mdast-util-mdxjs-esm/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-phrasing": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
-            "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "unist-util-is": "^6.0.0"
@@ -30015,16 +27627,14 @@
         },
         "node_modules/mdast-util-phrasing/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-to-hast": {
             "version": "13.1.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz",
-            "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "@types/mdast": "^4.0.0",
@@ -30043,16 +27653,13 @@
         },
         "node_modules/mdast-util-to-hast/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-to-hast/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30063,6 +27670,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -30070,8 +27678,6 @@
         },
         "node_modules/mdast-util-to-hast/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30081,12 +27687,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-to-hast/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30097,6 +27702,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -30105,8 +27711,6 @@
         },
         "node_modules/mdast-util-to-hast/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30116,12 +27720,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-to-hast/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30131,12 +27734,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-to-markdown": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz",
-            "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "@types/unist": "^3.0.0",
@@ -30154,21 +27757,18 @@
         },
         "node_modules/mdast-util-to-markdown/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/mdast-util-to-markdown/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
-            "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0"
             },
@@ -30179,8 +27779,6 @@
         },
         "node_modules/mdast-util-to-markdown/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30191,6 +27789,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -30198,8 +27797,6 @@
         },
         "node_modules/mdast-util-to-markdown/node_modules/micromark-util-decode-numeric-character-reference": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
-            "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30210,14 +27807,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/mdast-util-to-markdown/node_modules/micromark-util-decode-string": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
-            "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30228,6 +27824,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -30237,8 +27834,6 @@
         },
         "node_modules/mdast-util-to-markdown/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30248,12 +27843,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-to-markdown/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30263,12 +27857,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/mdast-util-to-string": {
             "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
-            "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^3.0.0"
             },
@@ -30279,21 +27873,18 @@
         },
         "node_modules/mdurl": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
-            "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="
+            "license": "MIT"
         },
         "node_modules/media-typer": {
             "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
-            "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/memfs": {
             "version": "3.5.3",
-            "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz",
-            "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==",
+            "license": "Unlicense",
             "dependencies": {
                 "fs-monkey": "^1.0.4"
             },
@@ -30303,43 +27894,36 @@
         },
         "node_modules/memoize-one": {
             "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
-            "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
+            "license": "MIT"
         },
         "node_modules/memory-pager": {
             "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
-            "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="
+            "license": "MIT"
         },
         "node_modules/memorystream": {
             "version": "0.3.1",
-            "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
-            "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
             "engines": {
                 "node": ">= 0.10.0"
             }
         },
         "node_modules/merge-descriptors": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
-            "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+            "license": "MIT"
         },
         "node_modules/merge-stream": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-            "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+            "license": "MIT"
         },
         "node_modules/merge2": {
             "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-            "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 8"
             }
         },
         "node_modules/mermaid": {
             "version": "10.9.1",
-            "integrity": "sha512-Mx45Obds5W1UkW1nv/7dHRsbfMM1aOKA2+Pxs/IGHNonygDHwmng8xTHyS9z4KWVi0rbko8gjiBmuwwXQ7tiNA==",
+            "license": "MIT",
             "dependencies": {
                 "@braintree/sanitize-url": "^6.0.1",
                 "@types/d3-scale": "^4.0.3",
@@ -30365,21 +27949,17 @@
         },
         "node_modules/methods": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-            "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/mhchemparser": {
             "version": "4.2.1",
-            "resolved": "https://registry.npmjs.org/mhchemparser/-/mhchemparser-4.2.1.tgz",
-            "integrity": "sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ=="
+            "license": "Apache-2.0"
         },
         "node_modules/micromark": {
             "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz",
-            "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30390,6 +27970,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "@types/debug": "^4.0.0",
                 "debug": "^4.0.0",
@@ -30412,8 +27993,6 @@
         },
         "node_modules/micromark-core-commonmark": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz",
-            "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30424,6 +28003,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-factory-destination": "^1.0.0",
@@ -30445,8 +28025,7 @@
         },
         "node_modules/micromark-extension-gfm": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
-            "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
+            "license": "MIT",
             "dependencies": {
                 "micromark-extension-gfm-autolink-literal": "^2.0.0",
                 "micromark-extension-gfm-footnote": "^2.0.0",
@@ -30464,8 +28043,7 @@
         },
         "node_modules/micromark-extension-gfm-autolink-literal": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz",
-            "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==",
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-sanitize-uri": "^2.0.0",
@@ -30479,8 +28057,6 @@
         },
         "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30491,6 +28067,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -30498,8 +28075,6 @@
         },
         "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30509,12 +28084,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30525,6 +28099,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -30533,8 +28108,6 @@
         },
         "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30544,12 +28117,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30559,12 +28131,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-footnote": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz",
-            "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==",
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-core-commonmark": "^2.0.0",
@@ -30582,8 +28154,6 @@
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-core-commonmark": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
-            "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30594,6 +28164,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "devlop": "^1.0.0",
@@ -30615,8 +28186,6 @@
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-destination": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
-            "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30627,6 +28196,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -30635,8 +28205,6 @@
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-label": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
-            "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30647,6 +28215,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -30656,8 +28225,6 @@
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30668,6 +28235,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -30675,8 +28243,6 @@
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-title": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
-            "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30687,6 +28253,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -30696,8 +28263,6 @@
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-whitespace": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
-            "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30708,6 +28273,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -30717,8 +28283,6 @@
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30729,6 +28293,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -30736,8 +28301,6 @@
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30748,14 +28311,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-classify-character": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
-            "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30766,6 +28328,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -30774,8 +28337,6 @@
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30785,12 +28346,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-html-tag-name": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
-            "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30800,12 +28360,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-normalize-identifier": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
-            "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30816,14 +28375,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-resolve-all": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
-            "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30834,14 +28392,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             }
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30852,6 +28409,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -30860,8 +28418,6 @@
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-subtokenize": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
-            "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30872,6 +28428,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-chunked": "^2.0.0",
@@ -30881,8 +28438,6 @@
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30892,12 +28447,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30907,12 +28461,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-strikethrough": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz",
-            "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==",
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-chunked": "^2.0.0",
@@ -30928,8 +28482,6 @@
         },
         "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30940,6 +28492,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -30947,8 +28500,6 @@
         },
         "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30959,14 +28510,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-classify-character": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
-            "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30977,6 +28527,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -30985,8 +28536,6 @@
         },
         "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-resolve-all": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
-            "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -30997,14 +28546,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             }
         },
         "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31014,12 +28562,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31029,12 +28576,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-table": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz",
-            "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==",
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-factory-space": "^2.0.0",
@@ -31049,8 +28596,6 @@
         },
         "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31061,6 +28606,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -31068,8 +28614,6 @@
         },
         "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31080,6 +28624,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -31087,8 +28632,6 @@
         },
         "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31098,12 +28641,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31113,12 +28655,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-tagfilter": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
-            "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             },
@@ -31129,8 +28671,6 @@
         },
         "node_modules/micromark-extension-gfm-tagfilter/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31140,12 +28680,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-task-list-item": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz",
-            "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==",
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-factory-space": "^2.0.0",
@@ -31160,8 +28700,6 @@
         },
         "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31172,6 +28710,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -31179,8 +28718,6 @@
         },
         "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31191,6 +28728,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -31198,8 +28736,6 @@
         },
         "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31209,12 +28745,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31224,12 +28759,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31240,14 +28774,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/micromark-extension-gfm/node_modules/micromark-util-combine-extensions": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
-            "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31258,6 +28791,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -31265,8 +28799,6 @@
         },
         "node_modules/micromark-extension-gfm/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31276,12 +28808,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-gfm/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31291,12 +28822,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-math": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.0.0.tgz",
-            "integrity": "sha512-iJ2Q28vBoEovLN5o3GO12CpqorQRYDPT+p4zW50tGwTfJB+iv/VnB6Ini+gqa24K97DwptMBBIvVX6Bjk49oyQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/katex": "^0.16.0",
                 "devlop": "^1.0.0",
@@ -31313,8 +28844,6 @@
         },
         "node_modules/micromark-extension-math/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31325,6 +28854,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -31332,8 +28862,6 @@
         },
         "node_modules/micromark-extension-math/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31344,6 +28872,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -31351,8 +28880,6 @@
         },
         "node_modules/micromark-extension-math/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31362,12 +28889,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-extension-math/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31377,12 +28903,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-factory-destination": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz",
-            "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31393,6 +28918,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^1.0.0",
                 "micromark-util-symbol": "^1.0.0",
@@ -31401,8 +28927,6 @@
         },
         "node_modules/micromark-factory-label": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz",
-            "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31413,6 +28937,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^1.0.0",
                 "micromark-util-symbol": "^1.0.0",
@@ -31422,8 +28947,6 @@
         },
         "node_modules/micromark-factory-space": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz",
-            "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31434,6 +28957,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^1.0.0",
                 "micromark-util-types": "^1.0.0"
@@ -31441,8 +28965,6 @@
         },
         "node_modules/micromark-factory-title": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz",
-            "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31453,6 +28975,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^1.0.0",
                 "micromark-util-character": "^1.0.0",
@@ -31462,8 +28985,6 @@
         },
         "node_modules/micromark-factory-whitespace": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz",
-            "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31474,6 +28995,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^1.0.0",
                 "micromark-util-character": "^1.0.0",
@@ -31483,8 +29005,6 @@
         },
         "node_modules/micromark-util-character": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz",
-            "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31495,6 +29015,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^1.0.0",
                 "micromark-util-types": "^1.0.0"
@@ -31502,8 +29023,6 @@
         },
         "node_modules/micromark-util-chunked": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz",
-            "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31514,14 +29033,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^1.0.0"
             }
         },
         "node_modules/micromark-util-classify-character": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz",
-            "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31532,6 +29050,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^1.0.0",
                 "micromark-util-symbol": "^1.0.0",
@@ -31540,8 +29059,6 @@
         },
         "node_modules/micromark-util-combine-extensions": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz",
-            "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31552,6 +29069,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^1.0.0",
                 "micromark-util-types": "^1.0.0"
@@ -31559,8 +29077,6 @@
         },
         "node_modules/micromark-util-decode-numeric-character-reference": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz",
-            "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31571,14 +29087,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^1.0.0"
             }
         },
         "node_modules/micromark-util-decode-string": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz",
-            "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31589,6 +29104,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-util-character": "^1.0.0",
@@ -31598,8 +29114,6 @@
         },
         "node_modules/micromark-util-encode": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz",
-            "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31609,12 +29123,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-util-html-tag-name": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz",
-            "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31624,12 +29137,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-util-normalize-identifier": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz",
-            "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31640,14 +29152,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^1.0.0"
             }
         },
         "node_modules/micromark-util-resolve-all": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz",
-            "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31658,14 +29169,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^1.0.0"
             }
         },
         "node_modules/micromark-util-sanitize-uri": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz",
-            "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31676,6 +29186,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^1.0.0",
                 "micromark-util-encode": "^1.0.0",
@@ -31684,8 +29195,6 @@
         },
         "node_modules/micromark-util-subtokenize": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz",
-            "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31696,6 +29205,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^1.0.0",
                 "micromark-util-symbol": "^1.0.0",
@@ -31705,8 +29215,6 @@
         },
         "node_modules/micromark-util-symbol": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz",
-            "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31716,12 +29224,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromark-util-types": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz",
-            "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -31731,12 +29238,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/micromatch": {
             "version": "4.0.7",
-            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
-            "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+            "license": "MIT",
             "dependencies": {
                 "braces": "^3.0.3",
                 "picomatch": "^2.3.1"
@@ -31747,8 +29254,7 @@
         },
         "node_modules/mime": {
             "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
-            "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+            "license": "MIT",
             "bin": {
                 "mime": "cli.js"
             },
@@ -31758,16 +29264,14 @@
         },
         "node_modules/mime-db": {
             "version": "1.52.0",
-            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-            "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/mime-types": {
             "version": "2.1.35",
-            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-            "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+            "license": "MIT",
             "dependencies": {
                 "mime-db": "1.52.0"
             },
@@ -31777,17 +29281,15 @@
         },
         "node_modules/mimic-fn": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-            "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/mimic-response": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz",
-            "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==",
+            "license": "MIT",
             "engines": {
                 "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
             },
@@ -31797,21 +29299,17 @@
         },
         "node_modules/min-document": {
             "version": "2.19.0",
-            "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
-            "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==",
             "dependencies": {
                 "dom-walk": "^0.1.0"
             }
         },
         "node_modules/minimalistic-assert": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
-            "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+            "license": "ISC"
         },
         "node_modules/minimatch": {
             "version": "9.0.4",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
-            "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^2.0.1"
             },
@@ -31824,24 +29322,21 @@
         },
         "node_modules/minimist": {
             "version": "1.2.8",
-            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
-            "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+            "license": "MIT",
             "funding": {
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
         "node_modules/minipass": {
             "version": "7.1.2",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
-            "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+            "license": "ISC",
             "engines": {
                 "node": ">=16 || 14 >=14.17"
             }
         },
         "node_modules/minipass-collect": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz",
-            "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==",
+            "license": "ISC",
             "dependencies": {
                 "minipass": "^7.0.3"
             },
@@ -31851,8 +29346,7 @@
         },
         "node_modules/minipass-fetch": {
             "version": "3.0.5",
-            "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz",
-            "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==",
+            "license": "MIT",
             "dependencies": {
                 "minipass": "^7.0.3",
                 "minipass-sized": "^1.0.3",
@@ -31867,8 +29361,7 @@
         },
         "node_modules/minipass-flush": {
             "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
-            "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+            "license": "ISC",
             "dependencies": {
                 "minipass": "^3.0.0"
             },
@@ -31878,8 +29371,7 @@
         },
         "node_modules/minipass-flush/node_modules/minipass": {
             "version": "3.3.6",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+            "license": "ISC",
             "dependencies": {
                 "yallist": "^4.0.0"
             },
@@ -31889,13 +29381,11 @@
         },
         "node_modules/minipass-flush/node_modules/yallist": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+            "license": "ISC"
         },
         "node_modules/minipass-json-stream": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz",
-            "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==",
+            "license": "MIT",
             "dependencies": {
                 "jsonparse": "^1.3.1",
                 "minipass": "^3.0.0"
@@ -31903,8 +29393,7 @@
         },
         "node_modules/minipass-json-stream/node_modules/minipass": {
             "version": "3.3.6",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+            "license": "ISC",
             "dependencies": {
                 "yallist": "^4.0.0"
             },
@@ -31914,13 +29403,11 @@
         },
         "node_modules/minipass-json-stream/node_modules/yallist": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+            "license": "ISC"
         },
         "node_modules/minipass-pipeline": {
             "version": "1.2.4",
-            "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
-            "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+            "license": "ISC",
             "dependencies": {
                 "minipass": "^3.0.0"
             },
@@ -31930,8 +29417,7 @@
         },
         "node_modules/minipass-pipeline/node_modules/minipass": {
             "version": "3.3.6",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+            "license": "ISC",
             "dependencies": {
                 "yallist": "^4.0.0"
             },
@@ -31941,13 +29427,11 @@
         },
         "node_modules/minipass-pipeline/node_modules/yallist": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+            "license": "ISC"
         },
         "node_modules/minipass-sized": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
-            "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+            "license": "ISC",
             "dependencies": {
                 "minipass": "^3.0.0"
             },
@@ -31957,8 +29441,7 @@
         },
         "node_modules/minipass-sized/node_modules/minipass": {
             "version": "3.3.6",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+            "license": "ISC",
             "dependencies": {
                 "yallist": "^4.0.0"
             },
@@ -31968,13 +29451,11 @@
         },
         "node_modules/minipass-sized/node_modules/yallist": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+            "license": "ISC"
         },
         "node_modules/minizlib": {
             "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
-            "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+            "license": "MIT",
             "dependencies": {
                 "minipass": "^3.0.0",
                 "yallist": "^4.0.0"
@@ -31985,8 +29466,7 @@
         },
         "node_modules/minizlib/node_modules/minipass": {
             "version": "3.3.6",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+            "license": "ISC",
             "dependencies": {
                 "yallist": "^4.0.0"
             },
@@ -31996,18 +29476,15 @@
         },
         "node_modules/minizlib/node_modules/yallist": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+            "license": "ISC"
         },
         "node_modules/mj-context-menu": {
             "version": "0.6.1",
-            "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.6.1.tgz",
-            "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA=="
+            "license": "Apache-2.0"
         },
         "node_modules/mkdirp": {
             "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-            "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+            "license": "MIT",
             "bin": {
                 "mkdirp": "bin/cmd.js"
             },
@@ -32017,13 +29494,11 @@
         },
         "node_modules/mobile-detect": {
             "version": "1.4.5",
-            "resolved": "https://registry.npmjs.org/mobile-detect/-/mobile-detect-1.4.5.tgz",
-            "integrity": "sha512-yc0LhH6tItlvfLBugVUEtgawwFU2sIe+cSdmRJJCTMZ5GEJyLxNyC/NIOAOGk67Fa8GNpOttO3Xz/1bHpXFD/g=="
+            "license": "MIT"
         },
         "node_modules/mobx": {
             "version": "6.12.3",
-            "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.12.3.tgz",
-            "integrity": "sha512-c8NKkO4R2lShkSXZ2Ongj1ycjugjzFFo/UswHBnS62y07DMcTc9Rvo03/3nRyszIvwPNljlkd4S828zIBv/piw==",
+            "license": "MIT",
             "funding": {
                 "type": "opencollective",
                 "url": "https://opencollective.com/mobx"
@@ -32031,8 +29506,7 @@
         },
         "node_modules/mobx-react": {
             "version": "9.1.1",
-            "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-9.1.1.tgz",
-            "integrity": "sha512-gVV7AdSrAAxqXOJ2bAbGa5TkPqvITSzaPiiEkzpW4rRsMhSec7C2NBCJYILADHKp2tzOAIETGRsIY0UaCV5aEw==",
+            "license": "MIT",
             "dependencies": {
                 "mobx-react-lite": "^4.0.7"
             },
@@ -32055,8 +29529,7 @@
         },
         "node_modules/mobx-react-lite": {
             "version": "4.0.7",
-            "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-4.0.7.tgz",
-            "integrity": "sha512-RjwdseshK9Mg8On5tyJZHtGD+J78ZnCnRaxeQDSiciKVQDUbfZcXhmld0VMxAwvcTnPEHZySGGewm467Fcpreg==",
+            "license": "MIT",
             "dependencies": {
                 "use-sync-external-store": "^1.2.0"
             },
@@ -32079,17 +29552,15 @@
         },
         "node_modules/mobx-utils": {
             "version": "6.0.8",
-            "resolved": "https://registry.npmjs.org/mobx-utils/-/mobx-utils-6.0.8.tgz",
-            "integrity": "sha512-fPNt0vJnHwbQx9MojJFEnJLfM3EMGTtpy4/qOOW6xueh1mPofMajrbYAUvByMYAvCJnpy1A5L0t+ZVB5niKO4g==",
+            "license": "MIT",
             "peerDependencies": {
                 "mobx": "^6.0.0"
             }
         },
         "node_modules/mocha": {
             "version": "10.4.0",
-            "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz",
-            "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-colors": "4.1.1",
                 "browser-stdout": "1.3.1",
@@ -32122,14 +29593,11 @@
         },
         "node_modules/mocha/node_modules/argparse": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-            "dev": true
+            "dev": true,
+            "license": "Python-2.0"
         },
         "node_modules/mocha/node_modules/chokidar": {
             "version": "3.5.3",
-            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
-            "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
             "dev": true,
             "funding": [
                 {
@@ -32137,6 +29605,7 @@
                     "url": "https://paulmillr.com/funding/"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "anymatch": "~3.1.2",
                 "braces": "~3.0.2",
@@ -32155,19 +29624,17 @@
         },
         "node_modules/mocha/node_modules/diff": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
-            "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
             "dev": true,
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">=0.3.1"
             }
         },
         "node_modules/mocha/node_modules/glob": {
             "version": "8.1.0",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-            "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
             "deprecated": "Glob versions prior to v9 are no longer supported",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -32184,9 +29651,8 @@
         },
         "node_modules/mocha/node_modules/glob-parent": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "is-glob": "^4.0.1"
             },
@@ -32196,18 +29662,16 @@
         },
         "node_modules/mocha/node_modules/has-flag": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/mocha/node_modules/js-yaml": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-            "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "argparse": "^2.0.1"
             },
@@ -32217,9 +29681,8 @@
         },
         "node_modules/mocha/node_modules/minimatch": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
-            "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^2.0.1"
             },
@@ -32229,15 +29692,13 @@
         },
         "node_modules/mocha/node_modules/ms": {
             "version": "2.1.3",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/mocha/node_modules/supports-color": {
             "version": "8.1.1",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-            "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "has-flag": "^4.0.0"
             },
@@ -32250,16 +29711,15 @@
         },
         "node_modules/mocha/node_modules/yargs-parser": {
             "version": "20.2.4",
-            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
-            "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
             "dev": true,
+            "license": "ISC",
             "engines": {
                 "node": ">=10"
             }
         },
         "node_modules/mongodb": {
             "version": "6.7.0",
-            "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@mongodb-js/saslprep": "^1.1.5",
                 "bson": "^6.7.0",
@@ -32303,8 +29763,7 @@
         },
         "node_modules/mongodb-connection-string-url": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz",
-            "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@types/whatwg-url": "^11.0.2",
                 "whatwg-url": "^13.0.0"
@@ -32312,8 +29771,7 @@
         },
         "node_modules/mongodb-connection-string-url/node_modules/tr46": {
             "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz",
-            "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==",
+            "license": "MIT",
             "dependencies": {
                 "punycode": "^2.3.0"
             },
@@ -32323,8 +29781,7 @@
         },
         "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": {
             "version": "13.0.0",
-            "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz",
-            "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==",
+            "license": "MIT",
             "dependencies": {
                 "tr46": "^4.1.1",
                 "webidl-conversions": "^7.0.0"
@@ -32335,7 +29792,7 @@
         },
         "node_modules/mongoose": {
             "version": "8.4.0",
-            "integrity": "sha512-fgqRMwVEP1qgRYfh+tUe2YBBFnPO35FIg2lfFH+w9IhRGg1/ataWGIqvf/MjwM29cZ60D5vSnqtN2b8Qp0sOZA==",
+            "license": "MIT",
             "dependencies": {
                 "bson": "^6.7.0",
                 "kareem": "2.6.3",
@@ -32355,8 +29812,7 @@
         },
         "node_modules/mongoose/node_modules/mongodb": {
             "version": "6.6.2",
-            "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz",
-            "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@mongodb-js/saslprep": "^1.1.5",
                 "bson": "^6.7.0",
@@ -32400,21 +29856,18 @@
         },
         "node_modules/mongoose/node_modules/ms": {
             "version": "2.1.3",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+            "license": "MIT"
         },
         "node_modules/mpath": {
             "version": "0.9.0",
-            "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz",
-            "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4.0.0"
             }
         },
         "node_modules/mquery": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
-            "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "4.x"
             },
@@ -32424,27 +29877,23 @@
         },
         "node_modules/mr-parser": {
             "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/mr-parser/-/mr-parser-0.2.1.tgz",
-            "integrity": "sha512-hug+mpbSSKnH13rFqy3zm+XiG+QTStiDAgMTHK355TIstQE0qBkBtSJsa5YHP94AuarVX9b/4dcebdTRZ9YiEw=="
+            "license": "MIT"
         },
         "node_modules/mri": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
-            "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/ms": {
             "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-            "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+            "license": "MIT"
         },
         "node_modules/multicast-dns": {
             "version": "7.2.5",
-            "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
-            "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "dns-packet": "^5.2.2",
                 "thunky": "^1.0.2"
@@ -32455,8 +29904,7 @@
         },
         "node_modules/multimatch": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz",
-            "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/minimatch": "^3.0.3",
                 "array-differ": "^3.0.0",
@@ -32473,13 +29921,11 @@
         },
         "node_modules/multimatch/node_modules/@types/minimatch": {
             "version": "3.0.5",
-            "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
-            "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ=="
+            "license": "MIT"
         },
         "node_modules/multimatch/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -32487,8 +29933,7 @@
         },
         "node_modules/multimatch/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -32498,30 +29943,26 @@
         },
         "node_modules/murmurhash-js": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz",
-            "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw=="
+            "license": "MIT"
         },
         "node_modules/mute-stream": {
             "version": "0.0.8",
-            "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
-            "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
-            "dev": true
+            "dev": true,
+            "license": "ISC"
         },
         "node_modules/nan": {
             "version": "2.19.0",
-            "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz",
-            "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw=="
+            "license": "MIT"
         },
         "node_modules/nanoid": {
             "version": "3.3.7",
-            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
-            "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
             "funding": [
                 {
                     "type": "github",
                     "url": "https://github.com/sponsors/ai"
                 }
             ],
+            "license": "MIT",
             "bin": {
                 "nanoid": "bin/nanoid.cjs"
             },
@@ -32531,13 +29972,11 @@
         },
         "node_modules/natural-compare": {
             "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-            "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
+            "license": "MIT"
         },
         "node_modules/needle": {
             "version": "2.9.1",
-            "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz",
-            "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "^3.2.6",
                 "iconv-lite": "^0.4.4",
@@ -32552,43 +29991,37 @@
         },
         "node_modules/needle/node_modules/debug": {
             "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+            "license": "MIT",
             "dependencies": {
                 "ms": "^2.1.1"
             }
         },
         "node_modules/negotiator": {
             "version": "0.6.3",
-            "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
-            "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/neo-async": {
             "version": "2.6.2",
-            "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
-            "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
+            "license": "MIT"
         },
         "node_modules/nextafter": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/nextafter/-/nextafter-1.0.0.tgz",
-            "integrity": "sha512-7PO+A89Tll2rSEfyrjtqO0MaI37+nnxBdnQcPypfbEYYuGaJxWGCqaOwQX4a3GHNTS08l1kazuiLEWZniZjMUQ==",
+            "license": "MIT",
             "dependencies": {
                 "double-bits": "^1.1.0"
             }
         },
         "node_modules/nice-try": {
             "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-            "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/no-case": {
             "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
-            "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
+            "license": "MIT",
             "dependencies": {
                 "lower-case": "^2.0.2",
                 "tslib": "^2.0.3"
@@ -32596,13 +30029,10 @@
         },
         "node_modules/node-abort-controller": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
-            "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ=="
+            "license": "MIT"
         },
         "node_modules/node-domexception": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
-            "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
             "funding": [
                 {
                     "type": "github",
@@ -32613,19 +30043,18 @@
                     "url": "https://paypal.me/jimmywarting"
                 }
             ],
+            "license": "MIT",
             "engines": {
                 "node": ">=10.5.0"
             }
         },
         "node_modules/node-ensure": {
             "version": "0.0.0",
-            "resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz",
-            "integrity": "sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw=="
+            "license": "MIT"
         },
         "node_modules/node-fetch": {
             "version": "2.7.0",
-            "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
-            "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+            "license": "MIT",
             "dependencies": {
                 "whatwg-url": "^5.0.0"
             },
@@ -32643,18 +30072,15 @@
         },
         "node_modules/node-fetch/node_modules/tr46": {
             "version": "0.0.3",
-            "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-            "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+            "license": "MIT"
         },
         "node_modules/node-fetch/node_modules/webidl-conversions": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-            "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+            "license": "BSD-2-Clause"
         },
         "node_modules/node-fetch/node_modules/whatwg-url": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
-            "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+            "license": "MIT",
             "dependencies": {
                 "tr46": "~0.0.3",
                 "webidl-conversions": "^3.0.0"
@@ -32662,17 +30088,15 @@
         },
         "node_modules/node-forge": {
             "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
-            "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
             "dev": true,
+            "license": "(BSD-3-Clause OR GPL-2.0)",
             "engines": {
                 "node": ">= 6.13.0"
             }
         },
         "node_modules/node-gyp": {
             "version": "10.1.0",
-            "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz",
-            "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==",
+            "license": "MIT",
             "dependencies": {
                 "env-paths": "^2.2.0",
                 "exponential-backoff": "^3.1.1",
@@ -32694,24 +30118,21 @@
         },
         "node_modules/node-gyp/node_modules/abbrev": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
-            "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/node-gyp/node_modules/isexe": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
-            "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+            "license": "ISC",
             "engines": {
                 "node": ">=16"
             }
         },
         "node_modules/node-gyp/node_modules/nopt": {
             "version": "7.2.1",
-            "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
-            "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+            "license": "ISC",
             "dependencies": {
                 "abbrev": "^2.0.0"
             },
@@ -32724,16 +30145,14 @@
         },
         "node_modules/node-gyp/node_modules/proc-log": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz",
-            "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/node-gyp/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -32743,8 +30162,7 @@
         },
         "node_modules/node-gyp/node_modules/which": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
-            "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+            "license": "ISC",
             "dependencies": {
                 "isexe": "^3.1.1"
             },
@@ -32757,13 +30175,11 @@
         },
         "node_modules/node-releases": {
             "version": "2.0.14",
-            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
-            "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
+            "license": "MIT"
         },
         "node_modules/node-stream-zip": {
             "version": "1.15.0",
-            "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz",
-            "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.12.0"
             },
@@ -32774,15 +30190,14 @@
         },
         "node_modules/nodemailer": {
             "version": "6.9.13",
-            "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.13.tgz",
-            "integrity": "sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA==",
+            "license": "MIT-0",
             "engines": {
                 "node": ">=6.0.0"
             }
         },
         "node_modules/nodemon": {
             "version": "3.1.0",
-            "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==",
+            "license": "MIT",
             "dependencies": {
                 "chokidar": "^3.5.2",
                 "debug": "^4",
@@ -32808,8 +30223,7 @@
         },
         "node_modules/nodemon/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -32817,8 +30231,7 @@
         },
         "node_modules/nodemon/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -32828,8 +30241,7 @@
         },
         "node_modules/nodemon/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -32839,13 +30251,11 @@
         },
         "node_modules/non-layered-tidy-tree-layout": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz",
-            "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw=="
+            "license": "MIT"
         },
         "node_modules/nopt": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
-            "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+            "license": "ISC",
             "dependencies": {
                 "abbrev": "1"
             },
@@ -32858,8 +30268,7 @@
         },
         "node_modules/normalize-package-data": {
             "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz",
-            "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "hosted-git-info": "^7.0.0",
                 "is-core-module": "^2.8.1",
@@ -32872,8 +30281,7 @@
         },
         "node_modules/normalize-package-data/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -32883,16 +30291,14 @@
         },
         "node_modules/normalize-path": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-            "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/normalize-url": {
             "version": "8.0.1",
-            "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
-            "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==",
+            "license": "MIT",
             "engines": {
                 "node": ">=14.16"
             },
@@ -32902,7 +30308,6 @@
         },
         "node_modules/npm": {
             "version": "10.8.0",
-            "integrity": "sha512-wh93uRczgp7HDnPMiLXcCkv2hagdJS0zJ9KT/31d0FoXP02+qgN2AOwpaW85fxRWkinl2rELfPw+CjBXW48/jQ==",
             "bundleDependencies": [
                 "@isaacs/string-locale-compare",
                 "@npmcli/arborist",
@@ -32973,6 +30378,14 @@
                 "which",
                 "write-file-atomic"
             ],
+            "license": "Artistic-2.0",
+            "workspaces": [
+                "docs",
+                "smoke-tests",
+                "mock-globals",
+                "mock-registry",
+                "workspaces/*"
+            ],
             "dependencies": {
                 "@isaacs/string-locale-compare": "^1.1.0",
                 "@npmcli/arborist": "^7.5.2",
@@ -33051,18 +30464,9 @@
                 "node": "^18.17.0 || >=20.5.0"
             }
         },
-        "node_modules/npm-audit-report": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-5.0.0.tgz",
-            "integrity": "sha512-EkXrzat7zERmUhHaoren1YhTxFwsOu5jypE84k6632SXTHcQE1z8V51GC6GVZt8LxkC+tbBcKMUBZAgk8SUSbw==",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/npm-bundled": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz",
-            "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==",
+            "license": "ISC",
             "dependencies": {
                 "npm-normalize-package-bin": "^3.0.0"
             },
@@ -33072,8 +30476,7 @@
         },
         "node_modules/npm-install-checks": {
             "version": "6.3.0",
-            "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz",
-            "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "semver": "^7.1.1"
             },
@@ -33083,8 +30486,7 @@
         },
         "node_modules/npm-install-checks/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -33094,16 +30496,14 @@
         },
         "node_modules/npm-normalize-package-bin": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz",
-            "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/npm-package-arg": {
             "version": "11.0.2",
-            "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz",
-            "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==",
+            "license": "ISC",
             "dependencies": {
                 "hosted-git-info": "^7.0.0",
                 "proc-log": "^4.0.0",
@@ -33116,8 +30516,7 @@
         },
         "node_modules/npm-package-arg/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -33127,8 +30526,7 @@
         },
         "node_modules/npm-packlist": {
             "version": "8.0.2",
-            "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz",
-            "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==",
+            "license": "ISC",
             "dependencies": {
                 "ignore-walk": "^6.0.4"
             },
@@ -33138,8 +30536,7 @@
         },
         "node_modules/npm-pick-manifest": {
             "version": "9.0.1",
-            "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz",
-            "integrity": "sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==",
+            "license": "ISC",
             "dependencies": {
                 "npm-install-checks": "^6.0.0",
                 "npm-normalize-package-bin": "^3.0.0",
@@ -33152,8 +30549,7 @@
         },
         "node_modules/npm-pick-manifest/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -33161,22 +30557,9 @@
                 "node": ">=10"
             }
         },
-        "node_modules/npm-profile": {
-            "version": "10.0.0",
-            "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-10.0.0.tgz",
-            "integrity": "sha512-DXnge3nHYnEnPxmVd/kPmgcXKXwVUqFihGnU+EJUiu5mIOs3awq6zEm0rRp3kSQNhFsoqdLu8L1TIfRyeBOCog==",
-            "dependencies": {
-                "npm-registry-fetch": "^17.0.1",
-                "proc-log": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=18.0.0"
-            }
-        },
         "node_modules/npm-registry-fetch": {
             "version": "17.0.1",
-            "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.0.1.tgz",
-            "integrity": "sha512-fLu9MTdZTlJAHUek/VLklE6EpIiP3VZpTiuN7OOMCt2Sd67NCpSEetMaxHHEZiZxllp8ZLsUpvbEszqTFEc+wA==",
+            "license": "ISC",
             "dependencies": {
                 "@npmcli/redact": "^2.0.0",
                 "make-fetch-happen": "^13.0.0",
@@ -33193,9 +30576,8 @@
         },
         "node_modules/npm-run-path": {
             "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
-            "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "path-key": "^3.0.0"
             },
@@ -33203,28 +30585,111 @@
                 "node": ">=8"
             }
         },
-        "node_modules/npm-user-validate": {
+        "node_modules/npm/node_modules/abbrev": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/archy": {
+            "version": "1.0.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/cacache": {
+            "version": "18.0.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/fs": "^3.1.0",
+                "fs-minipass": "^3.0.0",
+                "glob": "^10.2.2",
+                "lru-cache": "^10.0.1",
+                "minipass": "^7.0.3",
+                "minipass-collect": "^2.0.1",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "p-map": "^4.0.0",
+                "ssri": "^10.0.0",
+                "tar": "^6.1.11",
+                "unique-filename": "^3.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/cacache/node_modules/imurmurhash": {
+            "version": "0.1.4",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.8.19"
+            }
+        },
+        "node_modules/npm/node_modules/cacache/node_modules/lru-cache": {
+            "version": "10.4.3",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/cacache/node_modules/minipass-collect": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-2.0.1.tgz",
-            "integrity": "sha512-d17PKaF2h8LSGFl5j4b1gHOJt1fgH7YUcCm1kNSJvaLWWKXlBsuUvx0bBEkr0qhsVA9XP5LtRZ83hdlhm2QkgA==",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^7.0.3"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            }
+        },
+        "node_modules/npm/node_modules/cacache/node_modules/minipass-flush": {
+            "version": "1.0.5",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^3.0.0"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/npm/node_modules/cacache/node_modules/minipass-flush/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/cacache/node_modules/unique-filename": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "unique-slug": "^4.0.0"
+            },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/abbrev": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
-            "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+        "node_modules/npm/node_modules/cacache/node_modules/unique-slug": {
+            "version": "4.0.0",
             "inBundle": true,
             "license": "ISC",
+            "dependencies": {
+                "imurmurhash": "^0.1.4"
+            },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/npm/node_modules/chalk": {
             "version": "5.3.0",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
-            "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
             "inBundle": true,
             "license": "MIT",
             "engines": {
@@ -33236,8 +30701,6 @@
         },
         "node_modules/npm/node_modules/ci-info": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz",
-            "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==",
             "funding": [
                 {
                     "type": "github",
@@ -33250,10 +30713,65 @@
                 "node": ">=8"
             }
         },
+        "node_modules/npm/node_modules/cli-columns": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "string-width": "^4.2.3",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">= 10"
+            }
+        },
+        "node_modules/npm/node_modules/cli-columns/node_modules/ansi-regex": {
+            "version": "5.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/cli-columns/node_modules/emoji-regex": {
+            "version": "8.0.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/cli-columns/node_modules/is-fullwidth-code-point": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/cli-columns/node_modules/string-width": {
+            "version": "4.2.3",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/cli-columns/node_modules/strip-ansi": {
+            "version": "6.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ansi-regex": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
         "node_modules/npm/node_modules/fastest-levenshtein": {
             "version": "1.0.16",
-            "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
-            "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
             "inBundle": true,
             "license": "MIT",
             "engines": {
@@ -33262,8 +30780,6 @@
         },
         "node_modules/npm/node_modules/fs-minipass": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
-            "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
@@ -33275,8 +30791,6 @@
         },
         "node_modules/npm/node_modules/glob": {
             "version": "10.3.15",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz",
-            "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
@@ -33296,27 +30810,240 @@
                 "url": "https://github.com/sponsors/isaacs"
             }
         },
+        "node_modules/npm/node_modules/glob/node_modules/cross-spawn": {
+            "version": "7.0.3",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "path-key": "^3.1.0",
+                "shebang-command": "^2.0.0",
+                "which": "^2.0.1"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/npm/node_modules/glob/node_modules/foreground-child": {
+            "version": "3.2.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "cross-spawn": "^7.0.0",
+                "signal-exit": "^4.0.1"
+            },
+            "engines": {
+                "node": ">=14"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/glob/node_modules/isexe": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/glob/node_modules/lru-cache": {
+            "version": "10.4.3",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/glob/node_modules/path-key": {
+            "version": "3.1.1",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/glob/node_modules/path-scurry": {
+            "version": "1.11.1",
+            "inBundle": true,
+            "license": "BlueOak-1.0.0",
+            "dependencies": {
+                "lru-cache": "^10.2.0",
+                "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/glob/node_modules/shebang-command": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "shebang-regex": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/glob/node_modules/shebang-regex": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/glob/node_modules/signal-exit": {
+            "version": "4.1.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": ">=14"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/glob/node_modules/which": {
+            "version": "2.0.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "isexe": "^2.0.0"
+            },
+            "bin": {
+                "node-which": "bin/node-which"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
         "node_modules/npm/node_modules/graceful-fs": {
             "version": "4.2.11",
-            "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
-            "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/hosted-git-info": {
+            "version": "7.0.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "lru-cache": "^10.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/hosted-git-info/node_modules/lru-cache": {
+            "version": "10.4.3",
             "inBundle": true,
             "license": "ISC"
         },
         "node_modules/npm/node_modules/ini": {
             "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz",
-            "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==",
             "inBundle": true,
             "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
+        "node_modules/npm/node_modules/init-package-json": {
+            "version": "6.0.3",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/package-json": "^5.0.0",
+                "npm-package-arg": "^11.0.0",
+                "promzard": "^1.0.0",
+                "read": "^3.0.1",
+                "semver": "^7.3.5",
+                "validate-npm-package-license": "^3.0.4",
+                "validate-npm-package-name": "^5.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/init-package-json/node_modules/promzard": {
+            "version": "1.0.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "read": "^3.0.1"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/init-package-json/node_modules/spdx-correct": {
+            "version": "3.2.0",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "spdx-expression-parse": "^3.0.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/init-package-json/node_modules/spdx-exceptions": {
+            "version": "2.5.0",
+            "inBundle": true,
+            "license": "CC-BY-3.0"
+        },
+        "node_modules/npm/node_modules/init-package-json/node_modules/spdx-expression-parse": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/init-package-json/node_modules/spdx-license-ids": {
+            "version": "3.0.18",
+            "inBundle": true,
+            "license": "CC0-1.0"
+        },
+        "node_modules/npm/node_modules/init-package-json/node_modules/validate-npm-package-license": {
+            "version": "3.0.4",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "spdx-correct": "^3.0.0",
+                "spdx-expression-parse": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/is-cidr": {
+            "version": "5.1.0",
+            "inBundle": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "cidr-regex": "^4.1.1"
+            },
+            "engines": {
+                "node": ">=14"
+            }
+        },
+        "node_modules/npm/node_modules/is-cidr/node_modules/cidr-regex": {
+            "version": "4.1.1",
+            "inBundle": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "ip-regex": "^5.0.0"
+            },
+            "engines": {
+                "node": ">=14"
+            }
+        },
+        "node_modules/npm/node_modules/is-cidr/node_modules/ip-regex": {
+            "version": "5.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/npm/node_modules/isexe": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
-            "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
             "inBundle": true,
             "license": "ISC",
             "engines": {
@@ -33325,8 +31052,6 @@
         },
         "node_modules/npm/node_modules/jackspeak": {
             "version": "2.3.6",
-            "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
-            "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
             "inBundle": true,
             "license": "BlueOak-1.0.0",
             "dependencies": {
@@ -33344,67 +31069,1609 @@
         },
         "node_modules/npm/node_modules/json-parse-even-better-errors": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
-            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
             "inBundle": true,
             "license": "MIT",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
+        "node_modules/npm/node_modules/libnpmaccess": {
+            "version": "8.0.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "npm-package-arg": "^11.0.2",
+                "npm-registry-fetch": "^17.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff": {
+            "version": "6.1.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/arborist": "^7.5.4",
+                "@npmcli/installed-package-contents": "^2.1.0",
+                "binary-extensions": "^2.3.0",
+                "diff": "^5.1.0",
+                "minimatch": "^9.0.4",
+                "npm-package-arg": "^11.0.2",
+                "pacote": "^18.0.6",
+                "tar": "^6.2.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/@npmcli/arborist": {
+            "version": "7.5.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@isaacs/string-locale-compare": "^1.1.0",
+                "@npmcli/fs": "^3.1.1",
+                "@npmcli/installed-package-contents": "^2.1.0",
+                "@npmcli/map-workspaces": "^3.0.2",
+                "@npmcli/metavuln-calculator": "^7.1.1",
+                "@npmcli/name-from-folder": "^2.0.0",
+                "@npmcli/node-gyp": "^3.0.0",
+                "@npmcli/package-json": "^5.1.0",
+                "@npmcli/query": "^3.1.0",
+                "@npmcli/redact": "^2.0.0",
+                "@npmcli/run-script": "^8.1.0",
+                "bin-links": "^4.0.4",
+                "cacache": "^18.0.3",
+                "common-ancestor-path": "^1.0.1",
+                "hosted-git-info": "^7.0.2",
+                "json-parse-even-better-errors": "^3.0.2",
+                "json-stringify-nice": "^1.1.4",
+                "lru-cache": "^10.2.2",
+                "minimatch": "^9.0.4",
+                "nopt": "^7.2.1",
+                "npm-install-checks": "^6.2.0",
+                "npm-package-arg": "^11.0.2",
+                "npm-pick-manifest": "^9.0.1",
+                "npm-registry-fetch": "^17.0.1",
+                "pacote": "^18.0.6",
+                "parse-conflict-json": "^3.0.0",
+                "proc-log": "^4.2.0",
+                "proggy": "^2.0.0",
+                "promise-all-reject-late": "^1.0.0",
+                "promise-call-limit": "^3.0.1",
+                "read-package-json-fast": "^3.0.2",
+                "semver": "^7.3.7",
+                "ssri": "^10.0.6",
+                "treeverse": "^3.0.0",
+                "walk-up-path": "^3.0.1"
+            },
+            "bin": {
+                "arborist": "bin/index.js"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/bin-links": {
+            "version": "4.0.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "cmd-shim": "^6.0.0",
+                "npm-normalize-package-bin": "^3.0.0",
+                "read-cmd-shim": "^4.0.0",
+                "write-file-atomic": "^5.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/binary-extensions": {
+            "version": "2.3.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/cmd-shim": {
+            "version": "6.0.3",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/common-ancestor-path": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/diff": {
+            "version": "5.2.0",
+            "inBundle": true,
+            "license": "BSD-3-Clause",
+            "engines": {
+                "node": ">=0.3.1"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/json-stringify-nice": {
+            "version": "1.1.4",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/lru-cache": {
+            "version": "10.4.3",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/npm-normalize-package-bin": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/proggy": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/promise-all-reject-late": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/promise-call-limit": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/read-cmd-shim": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/read-package-json-fast": {
+            "version": "3.0.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "json-parse-even-better-errors": "^3.0.0",
+                "npm-normalize-package-bin": "^3.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmdiff/node_modules/walk-up-path": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmexec": {
+            "version": "8.1.3",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/arborist": "^7.5.4",
+                "@npmcli/run-script": "^8.1.0",
+                "ci-info": "^4.0.0",
+                "npm-package-arg": "^11.0.2",
+                "pacote": "^18.0.6",
+                "proc-log": "^4.2.0",
+                "read": "^3.0.1",
+                "read-package-json-fast": "^3.0.2",
+                "semver": "^7.3.7",
+                "walk-up-path": "^3.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/@npmcli/arborist": {
+            "version": "7.5.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@isaacs/string-locale-compare": "^1.1.0",
+                "@npmcli/fs": "^3.1.1",
+                "@npmcli/installed-package-contents": "^2.1.0",
+                "@npmcli/map-workspaces": "^3.0.2",
+                "@npmcli/metavuln-calculator": "^7.1.1",
+                "@npmcli/name-from-folder": "^2.0.0",
+                "@npmcli/node-gyp": "^3.0.0",
+                "@npmcli/package-json": "^5.1.0",
+                "@npmcli/query": "^3.1.0",
+                "@npmcli/redact": "^2.0.0",
+                "@npmcli/run-script": "^8.1.0",
+                "bin-links": "^4.0.4",
+                "cacache": "^18.0.3",
+                "common-ancestor-path": "^1.0.1",
+                "hosted-git-info": "^7.0.2",
+                "json-parse-even-better-errors": "^3.0.2",
+                "json-stringify-nice": "^1.1.4",
+                "lru-cache": "^10.2.2",
+                "minimatch": "^9.0.4",
+                "nopt": "^7.2.1",
+                "npm-install-checks": "^6.2.0",
+                "npm-package-arg": "^11.0.2",
+                "npm-pick-manifest": "^9.0.1",
+                "npm-registry-fetch": "^17.0.1",
+                "pacote": "^18.0.6",
+                "parse-conflict-json": "^3.0.0",
+                "proc-log": "^4.2.0",
+                "proggy": "^2.0.0",
+                "promise-all-reject-late": "^1.0.0",
+                "promise-call-limit": "^3.0.1",
+                "read-package-json-fast": "^3.0.2",
+                "semver": "^7.3.7",
+                "ssri": "^10.0.6",
+                "treeverse": "^3.0.0",
+                "walk-up-path": "^3.0.1"
+            },
+            "bin": {
+                "arborist": "bin/index.js"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/bin-links": {
+            "version": "4.0.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "cmd-shim": "^6.0.0",
+                "npm-normalize-package-bin": "^3.0.0",
+                "read-cmd-shim": "^4.0.0",
+                "write-file-atomic": "^5.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/cmd-shim": {
+            "version": "6.0.3",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/common-ancestor-path": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/json-stringify-nice": {
+            "version": "1.1.4",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/lru-cache": {
+            "version": "10.4.3",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/npm-normalize-package-bin": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/proggy": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/promise-all-reject-late": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/promise-call-limit": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/read-cmd-shim": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/read-package-json-fast": {
+            "version": "3.0.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "json-parse-even-better-errors": "^3.0.0",
+                "npm-normalize-package-bin": "^3.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmexec/node_modules/walk-up-path": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmfund": {
+            "version": "5.0.12",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/arborist": "^7.5.4"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/@npmcli/arborist": {
+            "version": "7.5.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@isaacs/string-locale-compare": "^1.1.0",
+                "@npmcli/fs": "^3.1.1",
+                "@npmcli/installed-package-contents": "^2.1.0",
+                "@npmcli/map-workspaces": "^3.0.2",
+                "@npmcli/metavuln-calculator": "^7.1.1",
+                "@npmcli/name-from-folder": "^2.0.0",
+                "@npmcli/node-gyp": "^3.0.0",
+                "@npmcli/package-json": "^5.1.0",
+                "@npmcli/query": "^3.1.0",
+                "@npmcli/redact": "^2.0.0",
+                "@npmcli/run-script": "^8.1.0",
+                "bin-links": "^4.0.4",
+                "cacache": "^18.0.3",
+                "common-ancestor-path": "^1.0.1",
+                "hosted-git-info": "^7.0.2",
+                "json-parse-even-better-errors": "^3.0.2",
+                "json-stringify-nice": "^1.1.4",
+                "lru-cache": "^10.2.2",
+                "minimatch": "^9.0.4",
+                "nopt": "^7.2.1",
+                "npm-install-checks": "^6.2.0",
+                "npm-package-arg": "^11.0.2",
+                "npm-pick-manifest": "^9.0.1",
+                "npm-registry-fetch": "^17.0.1",
+                "pacote": "^18.0.6",
+                "parse-conflict-json": "^3.0.0",
+                "proc-log": "^4.2.0",
+                "proggy": "^2.0.0",
+                "promise-all-reject-late": "^1.0.0",
+                "promise-call-limit": "^3.0.1",
+                "read-package-json-fast": "^3.0.2",
+                "semver": "^7.3.7",
+                "ssri": "^10.0.6",
+                "treeverse": "^3.0.0",
+                "walk-up-path": "^3.0.1"
+            },
+            "bin": {
+                "arborist": "bin/index.js"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/bin-links": {
+            "version": "4.0.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "cmd-shim": "^6.0.0",
+                "npm-normalize-package-bin": "^3.0.0",
+                "read-cmd-shim": "^4.0.0",
+                "write-file-atomic": "^5.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/cmd-shim": {
+            "version": "6.0.3",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/common-ancestor-path": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/json-stringify-nice": {
+            "version": "1.1.4",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/lru-cache": {
+            "version": "10.4.3",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/npm-normalize-package-bin": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/proggy": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/promise-all-reject-late": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/promise-call-limit": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/read-cmd-shim": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/read-package-json-fast": {
+            "version": "3.0.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "json-parse-even-better-errors": "^3.0.0",
+                "npm-normalize-package-bin": "^3.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmfund/node_modules/walk-up-path": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmhook": {
+            "version": "10.0.5",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "aproba": "^2.0.0",
+                "npm-registry-fetch": "^17.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmhook/node_modules/aproba": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmorg": {
+            "version": "6.0.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "aproba": "^2.0.0",
+                "npm-registry-fetch": "^17.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmorg/node_modules/aproba": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmpack": {
+            "version": "7.0.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/arborist": "^7.5.4",
+                "@npmcli/run-script": "^8.1.0",
+                "npm-package-arg": "^11.0.2",
+                "pacote": "^18.0.6"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/@npmcli/arborist": {
+            "version": "7.5.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@isaacs/string-locale-compare": "^1.1.0",
+                "@npmcli/fs": "^3.1.1",
+                "@npmcli/installed-package-contents": "^2.1.0",
+                "@npmcli/map-workspaces": "^3.0.2",
+                "@npmcli/metavuln-calculator": "^7.1.1",
+                "@npmcli/name-from-folder": "^2.0.0",
+                "@npmcli/node-gyp": "^3.0.0",
+                "@npmcli/package-json": "^5.1.0",
+                "@npmcli/query": "^3.1.0",
+                "@npmcli/redact": "^2.0.0",
+                "@npmcli/run-script": "^8.1.0",
+                "bin-links": "^4.0.4",
+                "cacache": "^18.0.3",
+                "common-ancestor-path": "^1.0.1",
+                "hosted-git-info": "^7.0.2",
+                "json-parse-even-better-errors": "^3.0.2",
+                "json-stringify-nice": "^1.1.4",
+                "lru-cache": "^10.2.2",
+                "minimatch": "^9.0.4",
+                "nopt": "^7.2.1",
+                "npm-install-checks": "^6.2.0",
+                "npm-package-arg": "^11.0.2",
+                "npm-pick-manifest": "^9.0.1",
+                "npm-registry-fetch": "^17.0.1",
+                "pacote": "^18.0.6",
+                "parse-conflict-json": "^3.0.0",
+                "proc-log": "^4.2.0",
+                "proggy": "^2.0.0",
+                "promise-all-reject-late": "^1.0.0",
+                "promise-call-limit": "^3.0.1",
+                "read-package-json-fast": "^3.0.2",
+                "semver": "^7.3.7",
+                "ssri": "^10.0.6",
+                "treeverse": "^3.0.0",
+                "walk-up-path": "^3.0.1"
+            },
+            "bin": {
+                "arborist": "bin/index.js"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/bin-links": {
+            "version": "4.0.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "cmd-shim": "^6.0.0",
+                "npm-normalize-package-bin": "^3.0.0",
+                "read-cmd-shim": "^4.0.0",
+                "write-file-atomic": "^5.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/cmd-shim": {
+            "version": "6.0.3",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/common-ancestor-path": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/json-stringify-nice": {
+            "version": "1.1.4",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/lru-cache": {
+            "version": "10.4.3",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/npm-normalize-package-bin": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/proggy": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/promise-all-reject-late": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/promise-call-limit": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/read-cmd-shim": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/read-package-json-fast": {
+            "version": "3.0.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "json-parse-even-better-errors": "^3.0.0",
+                "npm-normalize-package-bin": "^3.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpack/node_modules/walk-up-path": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmpublish": {
+            "version": "9.0.9",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "ci-info": "^4.0.0",
+                "normalize-package-data": "^6.0.1",
+                "npm-package-arg": "^11.0.2",
+                "npm-registry-fetch": "^17.0.1",
+                "proc-log": "^4.2.0",
+                "semver": "^7.3.7",
+                "sigstore": "^2.2.0",
+                "ssri": "^10.0.6"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpublish/node_modules/@sigstore/tuf": {
+            "version": "2.3.4",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@sigstore/protobuf-specs": "^0.3.2",
+                "tuf-js": "^2.2.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpublish/node_modules/debug": {
+            "version": "4.3.5",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ms": "2.1.2"
+            },
+            "engines": {
+                "node": ">=6.0"
+            },
+            "peerDependenciesMeta": {
+                "supports-color": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpublish/node_modules/ms": {
+            "version": "2.1.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/libnpmpublish/node_modules/sigstore": {
+            "version": "2.3.1",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@sigstore/bundle": "^2.3.2",
+                "@sigstore/core": "^1.0.0",
+                "@sigstore/protobuf-specs": "^0.3.2",
+                "@sigstore/sign": "^2.3.2",
+                "@sigstore/tuf": "^2.3.4",
+                "@sigstore/verify": "^1.2.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmpublish/node_modules/tuf-js": {
+            "version": "2.2.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "@tufjs/models": "2.0.1",
+                "debug": "^4.3.4",
+                "make-fetch-happen": "^13.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmsearch": {
+            "version": "7.0.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "npm-registry-fetch": "^17.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmteam": {
+            "version": "6.0.5",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "aproba": "^2.0.0",
+                "npm-registry-fetch": "^17.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/libnpmteam/node_modules/aproba": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/libnpmversion": {
+            "version": "6.0.3",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/git": "^5.0.7",
+                "@npmcli/run-script": "^8.1.0",
+                "json-parse-even-better-errors": "^3.0.2",
+                "proc-log": "^4.2.0",
+                "semver": "^7.3.7"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen": {
+            "version": "13.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/agent": "^2.0.0",
+                "cacache": "^18.0.0",
+                "http-cache-semantics": "^4.1.1",
+                "is-lambda": "^1.0.1",
+                "minipass": "^7.0.2",
+                "minipass-fetch": "^3.0.0",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "negotiator": "^0.6.3",
+                "proc-log": "^4.2.0",
+                "promise-retry": "^2.0.1",
+                "ssri": "^10.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/encoding": {
+            "version": "0.1.13",
+            "inBundle": true,
+            "license": "MIT",
+            "optional": true,
+            "dependencies": {
+                "iconv-lite": "^0.6.2"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/err-code": {
+            "version": "2.0.3",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/http-cache-semantics": {
+            "version": "4.1.1",
+            "inBundle": true,
+            "license": "BSD-2-Clause"
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/iconv-lite": {
+            "version": "0.6.3",
+            "inBundle": true,
+            "license": "MIT",
+            "optional": true,
+            "dependencies": {
+                "safer-buffer": ">= 2.1.2 < 3.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/is-lambda": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass-fetch": {
+            "version": "3.0.5",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^7.0.3",
+                "minipass-sized": "^1.0.3",
+                "minizlib": "^2.1.2"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            },
+            "optionalDependencies": {
+                "encoding": "^0.1.13"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass-flush": {
+            "version": "1.0.5",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^3.0.0"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass-flush/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass-sized": {
+            "version": "1.0.3",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass-sized/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minizlib": {
+            "version": "2.1.2",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^3.0.0",
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minizlib/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator": {
+            "version": "0.6.3",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/promise-retry": {
+            "version": "2.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "err-code": "^2.0.2",
+                "retry": "^0.12.0"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/retry": {
+            "version": "0.12.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 4"
+            }
+        },
+        "node_modules/npm/node_modules/make-fetch-happen/node_modules/safer-buffer": {
+            "version": "2.1.2",
+            "inBundle": true,
+            "license": "MIT",
+            "optional": true
+        },
         "node_modules/npm/node_modules/minimatch": {
             "version": "9.0.4",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
-            "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "brace-expansion": "^2.0.1"
+                "brace-expansion": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/minimatch/node_modules/balanced-match": {
+            "version": "1.0.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/minimatch/node_modules/brace-expansion": {
+            "version": "2.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "balanced-match": "^1.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/minipass": {
+            "version": "7.1.1",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            }
+        },
+        "node_modules/npm/node_modules/minipass-pipeline": {
+            "version": "1.2.4",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/ms": {
+            "version": "2.1.3",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/node-gyp": {
+            "version": "10.2.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "env-paths": "^2.2.0",
+                "exponential-backoff": "^3.1.1",
+                "glob": "^10.3.10",
+                "graceful-fs": "^4.2.6",
+                "make-fetch-happen": "^13.0.0",
+                "nopt": "^7.0.0",
+                "proc-log": "^4.1.0",
+                "semver": "^7.3.5",
+                "tar": "^6.2.1",
+                "which": "^4.0.0"
+            },
+            "bin": {
+                "node-gyp": "bin/node-gyp.js"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/env-paths": {
+            "version": "2.2.1",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/npm/node_modules/node-gyp/node_modules/exponential-backoff": {
+            "version": "3.1.1",
+            "inBundle": true,
+            "license": "Apache-2.0"
+        },
+        "node_modules/npm/node_modules/nopt": {
+            "version": "7.2.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "abbrev": "^2.0.0"
+            },
+            "bin": {
+                "nopt": "bin/nopt.js"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/normalize-package-data": {
+            "version": "6.0.2",
+            "inBundle": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "hosted-git-info": "^7.0.0",
+                "semver": "^7.3.5",
+                "validate-npm-package-license": "^3.0.4"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/normalize-package-data/node_modules/spdx-correct": {
+            "version": "3.2.0",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "spdx-expression-parse": "^3.0.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/normalize-package-data/node_modules/spdx-exceptions": {
+            "version": "2.5.0",
+            "inBundle": true,
+            "license": "CC-BY-3.0"
+        },
+        "node_modules/npm/node_modules/normalize-package-data/node_modules/spdx-expression-parse": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/normalize-package-data/node_modules/spdx-license-ids": {
+            "version": "3.0.18",
+            "inBundle": true,
+            "license": "CC0-1.0"
+        },
+        "node_modules/npm/node_modules/normalize-package-data/node_modules/validate-npm-package-license": {
+            "version": "3.0.4",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "spdx-correct": "^3.0.0",
+                "spdx-expression-parse": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-audit-report": {
+            "version": "5.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-install-checks": {
+            "version": "6.3.0",
+            "inBundle": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "semver": "^7.1.1"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-package-arg": {
+            "version": "11.0.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "hosted-git-info": "^7.0.0",
+                "proc-log": "^4.0.0",
+                "semver": "^7.3.5",
+                "validate-npm-package-name": "^5.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-pick-manifest": {
+            "version": "9.1.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "npm-install-checks": "^6.0.0",
+                "npm-normalize-package-bin": "^3.0.0",
+                "npm-package-arg": "^11.0.0",
+                "semver": "^7.3.5"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-profile": {
+            "version": "10.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "npm-registry-fetch": "^17.0.1",
+                "proc-log": "^4.0.0"
             },
             "engines": {
-                "node": ">=16 || 14 >=14.17"
+                "node": ">=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-registry-fetch": {
+            "version": "17.1.0",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/redact": "^2.0.0",
+                "jsonparse": "^1.3.1",
+                "make-fetch-happen": "^13.0.0",
+                "minipass": "^7.0.2",
+                "minipass-fetch": "^3.0.0",
+                "minizlib": "^2.1.2",
+                "npm-package-arg": "^11.0.0",
+                "proc-log": "^4.0.0"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/encoding": {
+            "version": "0.1.13",
+            "inBundle": true,
+            "license": "MIT",
+            "optional": true,
+            "dependencies": {
+                "iconv-lite": "^0.6.2"
+            }
+        },
+        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/iconv-lite": {
+            "version": "0.6.3",
+            "inBundle": true,
+            "license": "MIT",
+            "optional": true,
+            "dependencies": {
+                "safer-buffer": ">= 2.1.2 < 3.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/jsonparse": {
+            "version": "1.3.1",
+            "engines": [
+                "node >= 0.2.0"
+            ],
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minipass-fetch": {
+            "version": "3.0.5",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^7.0.3",
+                "minipass-sized": "^1.0.3",
+                "minizlib": "^2.1.2"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            },
+            "optionalDependencies": {
+                "encoding": "^0.1.13"
+            }
+        },
+        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minipass-sized": {
+            "version": "1.0.3",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minipass-sized/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": {
+            "version": "2.1.2",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^3.0.0",
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/safer-buffer": {
+            "version": "2.1.2",
+            "inBundle": true,
+            "license": "MIT",
+            "optional": true
+        },
+        "node_modules/npm/node_modules/npm-user-validate": {
+            "version": "2.0.1",
+            "inBundle": true,
+            "license": "BSD-2-Clause",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/p-map": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "aggregate-error": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=10"
             },
             "funding": {
-                "url": "https://github.com/sponsors/isaacs"
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/npm/node_modules/minipass": {
-            "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz",
-            "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==",
+        "node_modules/npm/node_modules/p-map/node_modules/aggregate-error": {
+            "version": "3.1.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "clean-stack": "^2.0.0",
+                "indent-string": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/p-map/node_modules/clean-stack": {
+            "version": "2.2.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/npm/node_modules/p-map/node_modules/indent-string": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/pacote": {
+            "version": "18.0.6",
             "inBundle": true,
             "license": "ISC",
+            "dependencies": {
+                "@npmcli/git": "^5.0.0",
+                "@npmcli/installed-package-contents": "^2.0.1",
+                "@npmcli/package-json": "^5.1.0",
+                "@npmcli/promise-spawn": "^7.0.0",
+                "@npmcli/run-script": "^8.0.0",
+                "cacache": "^18.0.0",
+                "fs-minipass": "^3.0.0",
+                "minipass": "^7.0.2",
+                "npm-package-arg": "^11.0.0",
+                "npm-packlist": "^8.0.0",
+                "npm-pick-manifest": "^9.0.0",
+                "npm-registry-fetch": "^17.0.0",
+                "proc-log": "^4.0.0",
+                "promise-retry": "^2.0.1",
+                "sigstore": "^2.2.0",
+                "ssri": "^10.0.0",
+                "tar": "^6.1.11"
+            },
+            "bin": {
+                "pacote": "bin/index.js"
+            },
             "engines": {
-                "node": ">=16 || 14 >=14.17"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/ms": {
-            "version": "2.1.3",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+        "node_modules/npm/node_modules/pacote/node_modules/@sigstore/tuf": {
+            "version": "2.3.4",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@sigstore/protobuf-specs": "^0.3.2",
+                "tuf-js": "^2.2.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/pacote/node_modules/debug": {
+            "version": "4.3.5",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ms": "2.1.2"
+            },
+            "engines": {
+                "node": ">=6.0"
+            },
+            "peerDependenciesMeta": {
+                "supports-color": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/npm/node_modules/pacote/node_modules/err-code": {
+            "version": "2.0.3",
             "inBundle": true,
             "license": "MIT"
         },
-        "node_modules/npm/node_modules/nopt": {
-            "version": "7.2.1",
-            "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
-            "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+        "node_modules/npm/node_modules/pacote/node_modules/ignore-walk": {
+            "version": "6.0.5",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "abbrev": "^2.0.0"
+                "minimatch": "^9.0.0"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/pacote/node_modules/ms": {
+            "version": "2.1.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/pacote/node_modules/npm-packlist": {
+            "version": "8.0.2",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "ignore-walk": "^6.0.4"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/pacote/node_modules/promise-retry": {
+            "version": "2.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "err-code": "^2.0.2",
+                "retry": "^0.12.0"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/npm/node_modules/pacote/node_modules/retry": {
+            "version": "0.12.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 4"
+            }
+        },
+        "node_modules/npm/node_modules/pacote/node_modules/sigstore": {
+            "version": "2.3.1",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@sigstore/bundle": "^2.3.2",
+                "@sigstore/core": "^1.0.0",
+                "@sigstore/protobuf-specs": "^0.3.2",
+                "@sigstore/sign": "^2.3.2",
+                "@sigstore/tuf": "^2.3.4",
+                "@sigstore/verify": "^1.2.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/pacote/node_modules/tuf-js": {
+            "version": "2.2.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "@tufjs/models": "2.0.1",
+                "debug": "^4.3.4",
+                "make-fetch-happen": "^13.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/parse-conflict-json": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "json-parse-even-better-errors": "^3.0.0",
+                "just-diff": "^6.0.0",
+                "just-diff-apply": "^5.2.0"
             },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/parse-conflict-json/node_modules/just-diff": {
+            "version": "6.0.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/parse-conflict-json/node_modules/just-diff-apply": {
+            "version": "5.5.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/proc-log": {
+            "version": "4.2.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/qrcode-terminal": {
+            "version": "0.12.0",
+            "inBundle": true,
             "bin": {
-                "nopt": "bin/nopt.js"
+                "qrcode-terminal": "bin/qrcode-terminal.js"
+            }
+        },
+        "node_modules/npm/node_modules/read": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "mute-stream": "^1.0.0"
             },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
+        "node_modules/npm/node_modules/read/node_modules/mute-stream": {
+            "version": "1.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/npm/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
             "inBundle": true,
             "license": "ISC",
             "bin": {
@@ -33414,10 +32681,38 @@
                 "node": ">=10"
             }
         },
+        "node_modules/npm/node_modules/spdx-expression-parse": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/spdx-expression-parse/node_modules/spdx-exceptions": {
+            "version": "2.5.0",
+            "inBundle": true,
+            "license": "CC-BY-3.0"
+        },
+        "node_modules/npm/node_modules/spdx-expression-parse/node_modules/spdx-license-ids": {
+            "version": "3.0.18",
+            "inBundle": true,
+            "license": "CC0-1.0"
+        },
+        "node_modules/npm/node_modules/ssri": {
+            "version": "10.0.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "minipass": "^7.0.3"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/npm/node_modules/supports-color": {
             "version": "9.4.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz",
-            "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==",
             "inBundle": true,
             "license": "MIT",
             "engines": {
@@ -33429,8 +32724,6 @@
         },
         "node_modules/npm/node_modules/tar": {
             "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
-            "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
@@ -33445,10 +32738,16 @@
                 "node": ">=10"
             }
         },
+        "node_modules/npm/node_modules/tar/node_modules/chownr": {
+            "version": "2.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": ">=10"
+            }
+        },
         "node_modules/npm/node_modules/tar/node_modules/fs-minipass": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
-            "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
@@ -33460,8 +32759,6 @@
         },
         "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
             "version": "3.3.6",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
@@ -33473,25 +32770,74 @@
         },
         "node_modules/npm/node_modules/tar/node_modules/minipass": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
-            "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
             "inBundle": true,
             "license": "ISC",
             "engines": {
                 "node": ">=8"
             }
         },
+        "node_modules/npm/node_modules/tar/node_modules/minizlib": {
+            "version": "2.1.2",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "minipass": "^3.0.0",
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/npm/node_modules/tar/node_modules/minizlib/node_modules/minipass": {
+            "version": "3.3.6",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/tar/node_modules/mkdirp": {
+            "version": "1.0.4",
+            "inBundle": true,
+            "license": "MIT",
+            "bin": {
+                "mkdirp": "bin/cmd.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
         "node_modules/npm/node_modules/text-table": {
             "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-            "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
             "inBundle": true,
             "license": "MIT"
         },
+        "node_modules/npm/node_modules/tiny-relative-date": {
+            "version": "1.3.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/treeverse": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/validate-npm-package-name": {
+            "version": "5.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
         "node_modules/npm/node_modules/which": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
-            "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
@@ -33504,18 +32850,45 @@
                 "node": "^16.13.0 || >=18.0.0"
             }
         },
+        "node_modules/npm/node_modules/write-file-atomic": {
+            "version": "5.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "imurmurhash": "^0.1.4",
+                "signal-exit": "^4.0.1"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/write-file-atomic/node_modules/imurmurhash": {
+            "version": "0.1.4",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.8.19"
+            }
+        },
+        "node_modules/npm/node_modules/write-file-atomic/node_modules/signal-exit": {
+            "version": "4.1.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": ">=14"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
         "node_modules/npm/node_modules/yallist": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
             "inBundle": true,
             "license": "ISC"
         },
         "node_modules/npmlog": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
-            "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
-            "deprecated": "This package is no longer supported.",
+            "license": "ISC",
             "dependencies": {
                 "are-we-there-yet": "^2.0.0",
                 "console-control-strings": "^1.1.0",
@@ -33525,8 +32898,7 @@
         },
         "node_modules/nth-check": {
             "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
-            "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "boolbase": "^1.0.0"
             },
@@ -33536,43 +32908,37 @@
         },
         "node_modules/nwsapi": {
             "version": "2.2.10",
-            "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz",
-            "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/oauth": {
             "version": "0.10.0",
-            "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.0.tgz",
-            "integrity": "sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q=="
+            "license": "MIT"
         },
         "node_modules/oauth-sign": {
             "version": "0.9.0",
-            "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-            "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": "*"
             }
         },
         "node_modules/object-assign": {
             "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-            "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/object-inspect": {
             "version": "1.13.1",
-            "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
-            "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+            "license": "MIT",
             "funding": {
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
         "node_modules/object-is": {
             "version": "1.1.6",
-            "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
-            "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1"
@@ -33586,16 +32952,14 @@
         },
         "node_modules/object-keys": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-            "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.4"
             }
         },
         "node_modules/object-to-arguments": {
             "version": "0.0.8",
-            "resolved": "https://registry.npmjs.org/object-to-arguments/-/object-to-arguments-0.0.8.tgz",
-            "integrity": "sha512-BfWfuAwuhdH1bhMG5EG90WE/eckkBhBvnke8eSEkCDXoLE9Jk5JwYGTbCx1ehGwV48HvBkn62VukPBdlMUOY9w==",
+            "license": "MIT",
             "dependencies": {
                 "inspect-parameters-declaration": "0.0.10",
                 "magicli": "0.0.5",
@@ -33609,13 +32973,11 @@
         },
         "node_modules/object-to-arguments/node_modules/commander": {
             "version": "2.20.3",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+            "license": "MIT"
         },
         "node_modules/object-to-arguments/node_modules/inspect-function": {
             "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.2.2.tgz",
-            "integrity": "sha512-becs5gzcHwPrlHawscYkyQ/ShiOiosrXPhA5RVZ3qyWH4aWdD52RnMfXq/dwQXciHwiieD8aIPwdIWYv6eL+sQ==",
+            "license": "MIT",
             "dependencies": {
                 "split-skip": "0.0.1",
                 "unpack-string": "0.0.2"
@@ -33623,13 +32985,11 @@
         },
         "node_modules/object-to-arguments/node_modules/inspect-function/node_modules/split-skip": {
             "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.1.tgz",
-            "integrity": "sha512-7dkvq+gofI4M8zx4iZnEZ3O1s7FP4Y/iaIDHJh5RyWrs8idcPauFi2OZe3TBi36fLvR2j5z3kSzVtz6IhPdncQ=="
+            "license": "MIT"
         },
         "node_modules/object-to-arguments/node_modules/inspect-parameters-declaration": {
             "version": "0.0.10",
-            "resolved": "https://registry.npmjs.org/inspect-parameters-declaration/-/inspect-parameters-declaration-0.0.10.tgz",
-            "integrity": "sha512-L8/Bvt9iDXQTZ63xY5/MAyvzz+FagR/qGh1kIXvUpsno3AAE0Z95d6QO51zrcMGaEGpwh/57idfMxTxbvRmytg==",
+            "license": "MIT",
             "dependencies": {
                 "magicli": "0.0.5",
                 "split-skip": "0.0.2",
@@ -33642,8 +33002,7 @@
         },
         "node_modules/object-to-arguments/node_modules/magicli": {
             "version": "0.0.5",
-            "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz",
-            "integrity": "sha512-wZbMtnl2v1b+Jp3xlqA9FU/O4I6YhGXR8xSY/eU2+gDAvut/F+W3gl4qs61iL4LELC7jqSAE6aAD5668EbmQHA==",
+            "license": "MIT",
             "dependencies": {
                 "commander": "^2.9.0",
                 "get-stdin": "^5.0.1",
@@ -33653,9 +33012,8 @@
         },
         "node_modules/object.assign": {
             "version": "4.1.5",
-            "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
-            "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.5",
                 "define-properties": "^1.2.1",
@@ -33671,9 +33029,8 @@
         },
         "node_modules/object.entries": {
             "version": "1.1.8",
-            "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
-            "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -33685,9 +33042,8 @@
         },
         "node_modules/object.fromentries": {
             "version": "2.0.8",
-            "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
-            "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -33703,9 +33059,8 @@
         },
         "node_modules/object.groupby": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
-            "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -33717,9 +33072,8 @@
         },
         "node_modules/object.hasown": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz",
-            "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "define-properties": "^1.2.1",
                 "es-abstract": "^1.23.2",
@@ -33734,9 +33088,8 @@
         },
         "node_modules/object.values": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
-            "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -33751,19 +33104,16 @@
         },
         "node_modules/obuf": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
-            "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/omggif": {
             "version": "1.0.10",
-            "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz",
-            "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="
+            "license": "MIT"
         },
         "node_modules/on-finished": {
             "version": "2.4.1",
-            "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
-            "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+            "license": "MIT",
             "dependencies": {
                 "ee-first": "1.1.1"
             },
@@ -33773,25 +33123,22 @@
         },
         "node_modules/on-headers": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
-            "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.8"
             }
         },
         "node_modules/once": {
             "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-            "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+            "license": "ISC",
             "dependencies": {
                 "wrappy": "1"
             }
         },
         "node_modules/onetime": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
-            "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "mimic-fn": "^2.1.0"
             },
@@ -33804,9 +33151,8 @@
         },
         "node_modules/open": {
             "version": "10.1.0",
-            "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz",
-            "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "default-browser": "^5.2.1",
                 "define-lazy-prop": "^3.0.0",
@@ -33822,7 +33168,7 @@
         },
         "node_modules/openai": {
             "version": "4.47.1",
-            "integrity": "sha512-WWSxhC/69ZhYWxH/OBsLEirIjUcfpQ5+ihkXKp06hmeYXgBBIUCa9IptMzYx6NdkiOCsSGYCnTIsxaic3AjRCQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@types/node": "^18.11.18",
                 "@types/node-fetch": "^2.6.4",
@@ -33839,21 +33185,25 @@
         },
         "node_modules/openai/node_modules/@types/node": {
             "version": "18.19.33",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz",
-            "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==",
+            "license": "MIT",
             "dependencies": {
                 "undici-types": "~5.26.4"
             }
         },
         "node_modules/openai/node_modules/form-data-encoder": {
             "version": "1.7.2",
-            "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz",
-            "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A=="
+            "license": "MIT"
+        },
+        "node_modules/opencollective-postinstall": {
+            "version": "2.0.3",
+            "license": "MIT",
+            "bin": {
+                "opencollective-postinstall": "index.js"
+            }
         },
         "node_modules/opentype.js": {
             "version": "1.3.4",
-            "resolved": "https://registry.npmjs.org/opentype.js/-/opentype.js-1.3.4.tgz",
-            "integrity": "sha512-d2JE9RP/6uagpQAVtJoF0pJJA/fgai89Cc50Yp0EJHk+eLp6QQ7gBoblsnubRULNY132I0J1QKMJ+JTbMqz4sw==",
+            "license": "MIT",
             "dependencies": {
                 "string.prototype.codepointat": "^0.2.1",
                 "tiny-inflate": "^1.0.3"
@@ -33867,8 +33217,7 @@
         },
         "node_modules/optionator": {
             "version": "0.9.4",
-            "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
-            "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+            "license": "MIT",
             "dependencies": {
                 "deep-is": "^0.1.3",
                 "fast-levenshtein": "^2.0.6",
@@ -33883,30 +33232,26 @@
         },
         "node_modules/orderedmap": {
             "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz",
-            "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g=="
+            "license": "MIT"
         },
         "node_modules/os-tmpdir": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-            "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/p-cancelable": {
             "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz",
-            "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=14.16"
             }
         },
         "node_modules/p-limit": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz",
-            "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==",
+            "license": "MIT",
             "dependencies": {
                 "yocto-queue": "^1.0.0"
             },
@@ -33919,8 +33264,7 @@
         },
         "node_modules/p-locate": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
-            "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+            "license": "MIT",
             "dependencies": {
                 "p-limit": "^3.0.2"
             },
@@ -33933,8 +33277,7 @@
         },
         "node_modules/p-locate/node_modules/p-limit": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-            "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+            "license": "MIT",
             "dependencies": {
                 "yocto-queue": "^0.1.0"
             },
@@ -33947,8 +33290,7 @@
         },
         "node_modules/p-locate/node_modules/yocto-queue": {
             "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
-            "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10"
             },
@@ -33958,8 +33300,7 @@
         },
         "node_modules/p-map": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
-            "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+            "license": "MIT",
             "dependencies": {
                 "aggregate-error": "^3.0.0"
             },
@@ -33972,9 +33313,8 @@
         },
         "node_modules/p-retry": {
             "version": "6.2.0",
-            "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz",
-            "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/retry": "0.12.2",
                 "is-network-error": "^1.0.0",
@@ -33989,8 +33329,7 @@
         },
         "node_modules/pacote": {
             "version": "18.0.6",
-            "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz",
-            "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==",
+            "license": "ISC",
             "dependencies": {
                 "@npmcli/git": "^5.0.0",
                 "@npmcli/installed-package-contents": "^2.0.1",
@@ -34019,8 +33358,7 @@
         },
         "node_modules/pacote/node_modules/fs-minipass": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
-            "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
+            "license": "ISC",
             "dependencies": {
                 "minipass": "^7.0.3"
             },
@@ -34030,13 +33368,11 @@
         },
         "node_modules/pako": {
             "version": "1.0.11",
-            "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
-            "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+            "license": "(MIT AND Zlib)"
         },
         "node_modules/param-case": {
             "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
-            "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
+            "license": "MIT",
             "dependencies": {
                 "dot-case": "^3.0.4",
                 "tslib": "^2.0.3"
@@ -34044,8 +33380,7 @@
         },
         "node_modules/parent-module": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-            "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+            "license": "MIT",
             "dependencies": {
                 "callsites": "^3.0.0"
             },
@@ -34055,18 +33390,15 @@
         },
         "node_modules/parse-bmfont-ascii": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
-            "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA=="
+            "license": "MIT"
         },
         "node_modules/parse-bmfont-binary": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
-            "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA=="
+            "license": "MIT"
         },
         "node_modules/parse-bmfont-xml": {
             "version": "1.1.6",
-            "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz",
-            "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==",
+            "license": "MIT",
             "dependencies": {
                 "xml-parse-from-string": "^1.0.0",
                 "xml2js": "^0.5.0"
@@ -34074,8 +33406,7 @@
         },
         "node_modules/parse-conflict-json": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz",
-            "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==",
+            "license": "ISC",
             "dependencies": {
                 "json-parse-even-better-errors": "^3.0.0",
                 "just-diff": "^6.0.0",
@@ -34087,16 +33418,14 @@
         },
         "node_modules/parse-conflict-json/node_modules/json-parse-even-better-errors": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
-            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+            "license": "MIT",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/parse-entities": {
             "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz",
-            "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^2.0.0",
                 "character-entities": "^2.0.0",
@@ -34114,13 +33443,11 @@
         },
         "node_modules/parse-headers": {
             "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz",
-            "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="
+            "license": "MIT"
         },
         "node_modules/parse-json": {
             "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
-            "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/code-frame": "^7.0.0",
                 "error-ex": "^1.3.1",
@@ -34136,16 +33463,14 @@
         },
         "node_modules/parse-passwd": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
-            "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/parse5": {
             "version": "7.1.2",
-            "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
-            "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+            "license": "MIT",
             "dependencies": {
                 "entities": "^4.4.0"
             },
@@ -34155,8 +33480,7 @@
         },
         "node_modules/parseley": {
             "version": "0.12.1",
-            "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz",
-            "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==",
+            "license": "MIT",
             "dependencies": {
                 "leac": "^0.6.0",
                 "peberminta": "^0.9.0"
@@ -34167,16 +33491,14 @@
         },
         "node_modules/parseurl": {
             "version": "1.3.3",
-            "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-            "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.8"
             }
         },
         "node_modules/pascal-case": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
-            "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
+            "license": "MIT",
             "dependencies": {
                 "no-case": "^3.0.4",
                 "tslib": "^2.0.3"
@@ -34184,8 +33506,7 @@
         },
         "node_modules/passport": {
             "version": "0.7.0",
-            "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz",
-            "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==",
+            "license": "MIT",
             "dependencies": {
                 "passport-strategy": "1.x.x",
                 "pause": "0.0.1",
@@ -34201,8 +33522,7 @@
         },
         "node_modules/passport-google-oauth20": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",
-            "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==",
+            "license": "MIT",
             "dependencies": {
                 "passport-oauth2": "1.x.x"
             },
@@ -34212,8 +33532,6 @@
         },
         "node_modules/passport-local": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz",
-            "integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==",
             "dependencies": {
                 "passport-strategy": "1.x.x"
             },
@@ -34223,8 +33541,7 @@
         },
         "node_modules/passport-oauth2": {
             "version": "1.8.0",
-            "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.8.0.tgz",
-            "integrity": "sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA==",
+            "license": "MIT",
             "dependencies": {
                 "base64url": "3.x.x",
                 "oauth": "0.10.x",
@@ -34242,50 +33559,42 @@
         },
         "node_modules/passport-strategy": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
-            "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==",
             "engines": {
                 "node": ">= 0.4.0"
             }
         },
         "node_modules/path-browserify": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
-            "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
+            "license": "MIT"
         },
         "node_modules/path-exists": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-            "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/path-is-absolute": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-            "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/path-key": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-            "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/path-parse": {
             "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-            "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+            "license": "MIT"
         },
         "node_modules/path-scurry": {
             "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
-            "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+            "license": "BlueOak-1.0.0",
             "dependencies": {
                 "lru-cache": "^10.2.0",
                 "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
@@ -34299,29 +33608,25 @@
         },
         "node_modules/path-scurry/node_modules/lru-cache": {
             "version": "10.2.2",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
-            "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+            "license": "ISC",
             "engines": {
                 "node": "14 || >=16.14"
             }
         },
         "node_modules/path-to-regexp": {
             "version": "0.1.7",
-            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
-            "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+            "license": "MIT"
         },
         "node_modules/path-type": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-            "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/path2d": {
             "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.0.tgz",
-            "integrity": "sha512-KdPAykQX6kmLSOO6Jpu2KNcCED7CKjmaBNGGNuctOsG0hgYO1OdYQaan6cYXJiG0WmXOwZZPILPBimu5QAIw3A==",
+            "license": "MIT",
             "optional": true,
             "engines": {
                 "node": ">=6"
@@ -34329,22 +33634,18 @@
         },
         "node_modules/pathval": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
-            "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 14.16"
             }
         },
         "node_modules/pause": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
-            "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
+            "version": "0.0.1"
         },
         "node_modules/pbf": {
             "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz",
-            "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "ieee754": "^1.1.12",
                 "resolve-protobuf-schema": "^2.1.0"
@@ -34355,8 +33656,7 @@
         },
         "node_modules/pdf-parse": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/pdf-parse/-/pdf-parse-1.1.1.tgz",
-            "integrity": "sha512-v6ZJ/efsBpGrGGknjtq9J/oC8tZWq0KWL5vQrk2GlzLEQPUDB1ex+13Rmidl1neNN358Jn9EHZw5y07FFtaC7A==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "^3.1.0",
                 "node-ensure": "^0.0.0"
@@ -34367,16 +33667,14 @@
         },
         "node_modules/pdf-parse/node_modules/debug": {
             "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+            "license": "MIT",
             "dependencies": {
                 "ms": "^2.1.1"
             }
         },
         "node_modules/pdfjs": {
             "version": "2.5.3",
-            "resolved": "https://registry.npmjs.org/pdfjs/-/pdfjs-2.5.3.tgz",
-            "integrity": "sha512-XSFh7/znM7gJAVABFvrtIkxi6TcHyHUCYpwaRUv1h0ln2ZQel0s8nKgsvmo+D7IKkkXKEQNtMU/hdmF/MUeaHg==",
+            "license": "MIT",
             "dependencies": {
                 "@rkusa/linebreak": "^1.0.0",
                 "opentype.js": "^1.3.3",
@@ -34391,7 +33689,7 @@
         },
         "node_modules/pdfjs-dist": {
             "version": "4.2.67",
-            "integrity": "sha512-rJmuBDFpD7cqC8WIkQUEClyB4UAH05K4AsyewToMTp2gSy3Rrx8c1ydAVqlJlGv3yZSOrhEERQU/4ScQQFlLHA==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=18"
             },
@@ -34402,13 +33700,11 @@
         },
         "node_modules/pdfjs/node_modules/pako": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz",
-            "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
+            "license": "(MIT AND Zlib)"
         },
         "node_modules/pdfjs/node_modules/readable-stream": {
             "version": "3.6.2",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-            "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+            "license": "MIT",
             "dependencies": {
                 "inherits": "^2.0.3",
                 "string_decoder": "^1.1.1",
@@ -34420,24 +33716,21 @@
         },
         "node_modules/pdfjs/node_modules/uuid": {
             "version": "8.3.2",
-            "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-            "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+            "license": "MIT",
             "bin": {
                 "uuid": "dist/bin/uuid"
             }
         },
         "node_modules/peberminta": {
             "version": "0.9.0",
-            "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz",
-            "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==",
+            "license": "MIT",
             "funding": {
                 "url": "https://ko-fi.com/killymxi"
             }
         },
         "node_modules/peek-readable": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
-            "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             },
@@ -34448,24 +33741,20 @@
         },
         "node_modules/performance-now": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-            "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+            "license": "MIT"
         },
         "node_modules/phin": {
             "version": "2.9.3",
-            "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz",
-            "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==",
-            "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."
+            "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
+            "license": "MIT"
         },
         "node_modules/picocolors": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
-            "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
+            "license": "ISC"
         },
         "node_modules/picomatch": {
             "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-            "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8.6"
             },
@@ -34475,18 +33764,15 @@
         },
         "node_modules/piexifjs": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/piexifjs/-/piexifjs-1.0.6.tgz",
-            "integrity": "sha512-0wVyH0cKohzBQ5Gi2V1BuxYpxWfxF3cSqfFXfPIpl5tl9XLS5z4ogqhUCD20AbHi0h9aJkqXNJnkVev6gwh2ag=="
+            "license": "MIT"
         },
         "node_modules/pipe-functions": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/pipe-functions/-/pipe-functions-1.3.0.tgz",
-            "integrity": "sha512-6Rtbp7criZRwedlvWbUYxqlqJoAlMvYHo2UcRWq79xZ54vZcaNHpVBOcWkX3ErT2aUA69tv+uiv4zKJbhD/Wgg=="
+            "license": "MIT"
         },
         "node_modules/pixelmatch": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz",
-            "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==",
+            "license": "ISC",
             "dependencies": {
                 "pngjs": "^3.0.0"
             },
@@ -34496,16 +33782,14 @@
         },
         "node_modules/pixelmatch/node_modules/pngjs": {
             "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
-            "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4.0.0"
             }
         },
         "node_modules/pkg-dir": {
             "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
-            "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
+            "license": "MIT",
             "dependencies": {
                 "find-up": "^6.3.0"
             },
@@ -34518,8 +33802,7 @@
         },
         "node_modules/pkg-dir/node_modules/find-up": {
             "version": "6.3.0",
-            "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
-            "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
+            "license": "MIT",
             "dependencies": {
                 "locate-path": "^7.1.0",
                 "path-exists": "^5.0.0"
@@ -34533,8 +33816,7 @@
         },
         "node_modules/pkg-dir/node_modules/locate-path": {
             "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
-            "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
+            "license": "MIT",
             "dependencies": {
                 "p-locate": "^6.0.0"
             },
@@ -34547,8 +33829,7 @@
         },
         "node_modules/pkg-dir/node_modules/p-limit": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
-            "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+            "license": "MIT",
             "dependencies": {
                 "yocto-queue": "^1.0.0"
             },
@@ -34561,8 +33842,7 @@
         },
         "node_modules/pkg-dir/node_modules/p-locate": {
             "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
-            "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
+            "license": "MIT",
             "dependencies": {
                 "p-limit": "^4.0.0"
             },
@@ -34575,37 +33855,32 @@
         },
         "node_modules/pkg-dir/node_modules/path-exists": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
-            "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+            "license": "MIT",
             "engines": {
                 "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
             }
         },
         "node_modules/please-upgrade-node": {
             "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
-            "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
+            "license": "MIT",
             "dependencies": {
                 "semver-compare": "^1.0.0"
             }
         },
         "node_modules/pngjs": {
             "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz",
-            "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=12.13.0"
             }
         },
         "node_modules/point-in-polygon": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz",
-            "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw=="
+            "license": "MIT"
         },
         "node_modules/polygon-clipping": {
             "version": "0.15.7",
-            "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.7.tgz",
-            "integrity": "sha512-nhfdr83ECBg6xtqOAJab1tbksbBAOMUltN60bU+llHVOL0e5Onm1WpAXXWXVB39L8AJFssoIhEVuy/S90MmotA==",
+            "license": "MIT",
             "dependencies": {
                 "robust-predicates": "^3.0.2",
                 "splaytree": "^3.1.0"
@@ -34613,21 +33888,17 @@
         },
         "node_modules/polygon-clipping/node_modules/robust-predicates": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",
-            "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="
+            "license": "Unlicense"
         },
         "node_modules/possible-typed-array-names": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
-            "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.4"
             }
         },
         "node_modules/postcss": {
             "version": "8.4.38",
-            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
-            "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
             "funding": [
                 {
                     "type": "opencollective",
@@ -34642,6 +33913,7 @@
                     "url": "https://github.com/sponsors/ai"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "nanoid": "^3.3.7",
                 "picocolors": "^1.0.0",
@@ -34653,8 +33925,7 @@
         },
         "node_modules/postcss-modules-extract-imports": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
-            "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
+            "license": "ISC",
             "engines": {
                 "node": "^10 || ^12 || >= 14"
             },
@@ -34664,8 +33935,7 @@
         },
         "node_modules/postcss-modules-local-by-default": {
             "version": "4.0.5",
-            "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz",
-            "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==",
+            "license": "MIT",
             "dependencies": {
                 "icss-utils": "^5.0.0",
                 "postcss-selector-parser": "^6.0.2",
@@ -34680,8 +33950,7 @@
         },
         "node_modules/postcss-modules-scope": {
             "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz",
-            "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==",
+            "license": "ISC",
             "dependencies": {
                 "postcss-selector-parser": "^6.0.4"
             },
@@ -34694,8 +33963,7 @@
         },
         "node_modules/postcss-modules-values": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
-            "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
+            "license": "ISC",
             "dependencies": {
                 "icss-utils": "^5.0.0"
             },
@@ -34708,8 +33976,7 @@
         },
         "node_modules/postcss-selector-parser": {
             "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
-            "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
+            "license": "MIT",
             "dependencies": {
                 "cssesc": "^3.0.0",
                 "util-deprecate": "^1.0.2"
@@ -34720,18 +33987,15 @@
         },
         "node_modules/postcss-value-parser": {
             "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-            "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+            "license": "MIT"
         },
         "node_modules/potpack": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz",
-            "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw=="
+            "license": "ISC"
         },
         "node_modules/preact": {
             "version": "10.12.1",
-            "resolved": "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz",
-            "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==",
+            "license": "MIT",
             "funding": {
                 "type": "opencollective",
                 "url": "https://opencollective.com/preact"
@@ -34739,16 +34003,15 @@
         },
         "node_modules/prelude-ls": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-            "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.8.0"
             }
         },
         "node_modules/prettier": {
             "version": "3.2.5",
-            "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
             "dev": true,
+            "license": "MIT",
             "bin": {
                 "prettier": "bin/prettier.cjs"
             },
@@ -34761,9 +34024,8 @@
         },
         "node_modules/prettier-linter-helpers": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
-            "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "fast-diff": "^1.1.2"
             },
@@ -34773,8 +34035,7 @@
         },
         "node_modules/pretty-error": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz",
-            "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==",
+            "license": "MIT",
             "dependencies": {
                 "lodash": "^4.17.20",
                 "renderkid": "^3.0.0"
@@ -34782,8 +34043,7 @@
         },
         "node_modules/probe-image-size": {
             "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz",
-            "integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==",
+            "license": "MIT",
             "dependencies": {
                 "lodash.merge": "^4.6.2",
                 "needle": "^2.5.2",
@@ -34792,75 +34052,65 @@
         },
         "node_modules/proc-log": {
             "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
-            "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/process": {
             "version": "0.11.10",
-            "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
-            "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6.0"
             }
         },
         "node_modules/process-nextick-args": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-            "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+            "license": "MIT"
         },
         "node_modules/proggy": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/proggy/-/proggy-2.0.0.tgz",
-            "integrity": "sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/progress": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
-            "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=0.4.0"
             }
         },
         "node_modules/promise": {
             "version": "7.3.1",
-            "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
-            "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+            "license": "MIT",
             "dependencies": {
                 "asap": "~2.0.3"
             }
         },
         "node_modules/promise-all-reject-late": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz",
-            "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==",
+            "license": "ISC",
             "funding": {
                 "url": "https://github.com/sponsors/isaacs"
             }
         },
         "node_modules/promise-call-limit": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.1.tgz",
-            "integrity": "sha512-utl+0x8gIDasV5X+PI5qWEPqH6fJS0pFtQ/4gZ95xfEFb/89dmh+/b895TbFDBLiafBvxD/PGTKfvxl4kH/pQg==",
+            "license": "ISC",
             "funding": {
                 "url": "https://github.com/sponsors/isaacs"
             }
         },
         "node_modules/promise-inflight": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
-            "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="
+            "license": "ISC"
         },
         "node_modules/promise-retry": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
-            "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+            "license": "MIT",
             "dependencies": {
                 "err-code": "^2.0.2",
                 "retry": "^0.12.0"
@@ -34871,27 +34121,14 @@
         },
         "node_modules/promise-retry/node_modules/retry": {
             "version": "0.12.0",
-            "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
-            "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 4"
             }
         },
-        "node_modules/promzard": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz",
-            "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==",
-            "dependencies": {
-                "read": "^3.0.1"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/prop-types": {
             "version": "15.8.1",
-            "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
-            "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+            "license": "MIT",
             "dependencies": {
                 "loose-envify": "^1.4.0",
                 "object-assign": "^4.1.1",
@@ -34900,13 +34137,11 @@
         },
         "node_modules/prop-types/node_modules/react-is": {
             "version": "16.13.1",
-            "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-            "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+            "license": "MIT"
         },
         "node_modules/property-information": {
             "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
-            "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -34921,8 +34156,7 @@
         },
         "node_modules/prosemirror-commands": {
             "version": "1.5.2",
-            "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.5.2.tgz",
-            "integrity": "sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==",
+            "license": "MIT",
             "dependencies": {
                 "prosemirror-model": "^1.0.0",
                 "prosemirror-state": "^1.0.0",
@@ -34931,16 +34165,14 @@
         },
         "node_modules/prosemirror-find-replace": {
             "version": "0.9.0",
-            "resolved": "https://registry.npmjs.org/prosemirror-find-replace/-/prosemirror-find-replace-0.9.0.tgz",
-            "integrity": "sha512-LfhQ/Zr0PkkJpCsr9vTJ5ZPYh49mSVVG+hHJ6djT+chlCW+t2ilSxBpBG+2IeE/I5nlbcvuLLAbxeI1g3pTCpA==",
+            "license": "MIT",
             "peerDependencies": {
                 "prosemirror": ">= 0.7.0"
             }
         },
         "node_modules/prosemirror-history": {
             "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.0.tgz",
-            "integrity": "sha512-UUiGzDVcqo1lovOPdi9YxxUps3oBFWAIYkXLu3Ot+JPv1qzVogRbcizxK3LhHmtaUxclohgiOVesRw5QSlMnbQ==",
+            "license": "MIT",
             "dependencies": {
                 "prosemirror-state": "^1.2.2",
                 "prosemirror-transform": "^1.0.0",
@@ -34950,8 +34182,7 @@
         },
         "node_modules/prosemirror-inputrules": {
             "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz",
-            "integrity": "sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==",
+            "license": "MIT",
             "dependencies": {
                 "prosemirror-state": "^1.0.0",
                 "prosemirror-transform": "^1.0.0"
@@ -34959,25 +34190,23 @@
         },
         "node_modules/prosemirror-keymap": {
             "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz",
-            "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==",
+            "license": "MIT",
             "dependencies": {
                 "prosemirror-state": "^1.0.0",
                 "w3c-keyname": "^2.2.0"
             }
         },
         "node_modules/prosemirror-model": {
-            "version": "1.21.1",
-            "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.21.1.tgz",
-            "integrity": "sha512-IVBAuMqOfltTr7yPypwpfdGT+6rGAteVOw2FO6GEvCGGa1ZwxLseqC1Eax/EChDvG/xGquB2d/hLdgh3THpsYg==",
+            "version": "1.22.1",
+            "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.22.1.tgz",
+            "integrity": "sha512-gMrxal+F3higDFxCkBK5iQXckRVYvIu/3dopERJ6b20xfwZ9cbYvQvuldqaN+v/XytNPGyURYUpUU23kBRxWCQ==",
             "dependencies": {
                 "orderedmap": "^2.0.0"
             }
         },
         "node_modules/prosemirror-schema-list": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.3.0.tgz",
-            "integrity": "sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==",
+            "license": "MIT",
             "dependencies": {
                 "prosemirror-model": "^1.0.0",
                 "prosemirror-state": "^1.0.0",
@@ -34986,8 +34215,7 @@
         },
         "node_modules/prosemirror-state": {
             "version": "1.4.3",
-            "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz",
-            "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==",
+            "license": "MIT",
             "dependencies": {
                 "prosemirror-model": "^1.0.0",
                 "prosemirror-transform": "^1.0.0",
@@ -35014,13 +34242,11 @@
         },
         "node_modules/protocol-buffers-schema": {
             "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz",
-            "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw=="
+            "license": "MIT"
         },
         "node_modules/proxy-addr": {
             "version": "2.0.7",
-            "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
-            "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+            "license": "MIT",
             "dependencies": {
                 "forwarded": "0.2.0",
                 "ipaddr.js": "1.9.1"
@@ -35031,22 +34257,19 @@
         },
         "node_modules/proxy-from-env": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
-            "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+            "license": "MIT"
         },
         "node_modules/psl": {
             "version": "1.9.0",
-            "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
-            "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+            "license": "MIT"
         },
         "node_modules/pstree.remy": {
             "version": "1.1.8",
-            "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
-            "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="
+            "license": "MIT"
         },
         "node_modules/pug": {
             "version": "3.0.2",
-            "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
+            "license": "MIT",
             "dependencies": {
                 "pug-code-gen": "^3.0.2",
                 "pug-filters": "^4.0.0",
@@ -35060,8 +34283,7 @@
         },
         "node_modules/pug-attrs": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
-            "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
+            "license": "MIT",
             "dependencies": {
                 "constantinople": "^4.0.1",
                 "js-stringify": "^1.0.2",
@@ -35070,8 +34292,7 @@
         },
         "node_modules/pug-code-gen": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz",
-            "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==",
+            "license": "MIT",
             "dependencies": {
                 "constantinople": "^4.0.1",
                 "doctypes": "^1.1.0",
@@ -35085,13 +34306,11 @@
         },
         "node_modules/pug-error": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
-            "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ=="
+            "license": "MIT"
         },
         "node_modules/pug-filters": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
-            "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
+            "license": "MIT",
             "dependencies": {
                 "constantinople": "^4.0.1",
                 "jstransformer": "1.0.0",
@@ -35102,8 +34321,7 @@
         },
         "node_modules/pug-lexer": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
-            "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
+            "license": "MIT",
             "dependencies": {
                 "character-parser": "^2.2.0",
                 "is-expression": "^4.0.0",
@@ -35112,8 +34330,7 @@
         },
         "node_modules/pug-linker": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
-            "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
+            "license": "MIT",
             "dependencies": {
                 "pug-error": "^2.0.0",
                 "pug-walk": "^2.0.0"
@@ -35121,8 +34338,7 @@
         },
         "node_modules/pug-load": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
-            "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
+            "license": "MIT",
             "dependencies": {
                 "object-assign": "^4.1.1",
                 "pug-walk": "^2.0.0"
@@ -35130,8 +34346,7 @@
         },
         "node_modules/pug-parser": {
             "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
-            "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
+            "license": "MIT",
             "dependencies": {
                 "pug-error": "^2.0.0",
                 "token-stream": "1.0.0"
@@ -35139,60 +34354,44 @@
         },
         "node_modules/pug-runtime": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
-            "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg=="
+            "license": "MIT"
         },
         "node_modules/pug-strip-comments": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
-            "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
+            "license": "MIT",
             "dependencies": {
                 "pug-error": "^2.0.0"
             }
         },
         "node_modules/pug-walk": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
-            "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ=="
+            "license": "MIT"
         },
         "node_modules/punycode": {
             "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
-            "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/punycode.js": {
             "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
-            "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/q": {
             "version": "1.5.1",
-            "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
-            "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
-            "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.6.0",
                 "teleport": ">=0.2.0"
             }
         },
-        "node_modules/qrcode-terminal": {
-            "version": "0.12.0",
-            "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
-            "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==",
-            "bin": {
-                "qrcode-terminal": "bin/qrcode-terminal.js"
-            }
-        },
         "node_modules/qs": {
             "version": "6.11.0",
-            "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
-            "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "side-channel": "^1.0.4"
             },
@@ -35205,8 +34404,7 @@
         },
         "node_modules/query-string": {
             "version": "7.1.3",
-            "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz",
-            "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==",
+            "license": "MIT",
             "dependencies": {
                 "decode-uri-component": "^0.2.2",
                 "filter-obj": "^1.1.0",
@@ -35222,29 +34420,23 @@
         },
         "node_modules/querystring-es3": {
             "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
-            "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
             "engines": {
                 "node": ">=0.4.x"
             }
         },
         "node_modules/querystringify": {
             "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
-            "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
+            "license": "MIT"
         },
         "node_modules/queue": {
             "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
-            "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
+            "license": "MIT",
             "dependencies": {
                 "inherits": "~2.0.3"
             }
         },
         "node_modules/queue-microtask": {
             "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-            "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
             "funding": [
                 {
                     "type": "github",
@@ -35258,17 +34450,16 @@
                     "type": "consulting",
                     "url": "https://feross.org/support"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/queue-tick": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
-            "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
+            "license": "MIT"
         },
         "node_modules/quick-lru": {
             "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
-            "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10"
             },
@@ -35278,37 +34469,32 @@
         },
         "node_modules/quickselect": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
-            "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
+            "license": "ISC"
         },
         "node_modules/random-bytes": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
-            "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.8"
             }
         },
         "node_modules/randombytes": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
-            "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+            "license": "MIT",
             "dependencies": {
                 "safe-buffer": "^5.1.0"
             }
         },
         "node_modules/range-parser": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-            "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/raw-body": {
             "version": "2.5.2",
-            "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
-            "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+            "license": "MIT",
             "dependencies": {
                 "bytes": "3.1.2",
                 "http-errors": "2.0.0",
@@ -35321,8 +34507,7 @@
         },
         "node_modules/raw-loader": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz",
-            "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==",
+            "license": "MIT",
             "dependencies": {
                 "loader-utils": "^2.0.0",
                 "schema-utils": "^3.0.0"
@@ -35340,8 +34525,7 @@
         },
         "node_modules/raw-loader/node_modules/schema-utils": {
             "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
-            "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/json-schema": "^7.0.8",
                 "ajv": "^6.12.5",
@@ -35357,21 +34541,18 @@
         },
         "node_modules/rbush": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz",
-            "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==",
+            "license": "MIT",
             "dependencies": {
                 "quickselect": "^1.0.1"
             }
         },
         "node_modules/rbush/node_modules/quickselect": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz",
-            "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ=="
+            "license": "ISC"
         },
         "node_modules/rc-switch": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-4.1.0.tgz",
-            "integrity": "sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.21.0",
                 "classnames": "^2.2.1",
@@ -35384,8 +34565,7 @@
         },
         "node_modules/rc-util": {
             "version": "5.41.0",
-            "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.41.0.tgz",
-            "integrity": "sha512-xtlCim9RpmVv0Ar2Nnc3WfJCxjQkTf3xHPWoFdjp1fSs2NirQwqiQrfqdU9HUe0kdfb168M/T8Dq0IaX50xeKg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.18.3",
                 "react-is": "^18.2.0"
@@ -35397,7 +34577,7 @@
         },
         "node_modules/react": {
             "version": "18.3.1",
-            "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+            "license": "MIT",
             "dependencies": {
                 "loose-envify": "^1.1.0"
             },
@@ -35407,8 +34587,7 @@
         },
         "node_modules/react-aria": {
             "version": "3.33.1",
-            "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.33.1.tgz",
-            "integrity": "sha512-hFC3K/UA+90Krlx2IgRTgzFbC6FSPi4pUwHT+STperPLK+cTEHkI+3Lu0YYwQSBatkgxnIv9+GtFuVbps2kROw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/string": "^3.2.3",
                 "@react-aria/breadcrumbs": "^3.5.13",
@@ -35455,8 +34634,7 @@
         },
         "node_modules/react-aria-components": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/react-aria-components/-/react-aria-components-1.2.1.tgz",
-            "integrity": "sha512-iGIdDjbTyLLn0/tGUyBQxxu+E1bw4/H4AU89d0cRcu8yIdw6MXG29YElmRHn0ugiyrERrk/YQALihstnns5kRQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@internationalized/date": "^3.5.4",
                 "@internationalized/string": "^3.2.3",
@@ -35489,8 +34667,7 @@
         },
         "node_modules/react-autosuggest": {
             "version": "10.1.0",
-            "resolved": "https://registry.npmjs.org/react-autosuggest/-/react-autosuggest-10.1.0.tgz",
-            "integrity": "sha512-/azBHmc6z/31s/lBf6irxPf/7eejQdR0IqnZUzjdSibtlS8+Rw/R79pgDAo6Ft5QqCUTyEQ+f0FhL+1olDQ8OA==",
+            "license": "MIT",
             "dependencies": {
                 "es6-promise": "^4.2.8",
                 "prop-types": "^15.7.2",
@@ -35504,7 +34681,6 @@
         },
         "node_modules/react-awesome-reveal": {
             "version": "4.2.11",
-            "integrity": "sha512-BXdU3nzZkRYf6h2lIx4SCMEERhIQd7wKheHKRH8U9601m1U2W4LrwEpKbpUxIPWSjcUwci4w7EotdfF+9ZQHhQ==",
             "funding": [
                 {
                     "type": "github",
@@ -35515,6 +34691,7 @@
                     "url": "https://opencollective.com/react-awesome-reveal"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "react-intersection-observer": "^9.10.2",
                 "react-is": "^18.3.1"
@@ -35526,8 +34703,7 @@
         },
         "node_modules/react-color": {
             "version": "2.19.3",
-            "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz",
-            "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==",
+            "license": "MIT",
             "dependencies": {
                 "@icons/material": "^0.2.4",
                 "lodash": "^4.17.15",
@@ -35543,8 +34719,7 @@
         },
         "node_modules/react-compound-slider": {
             "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/react-compound-slider/-/react-compound-slider-3.4.0.tgz",
-            "integrity": "sha512-KSje/rB0xSvvcb7YV0+82hkiXTV5ljSS7axKrNiXLf9AEO+rrr1Xq4MJWA+6v030YNNo/RoSoEB6D6fnoy+8ng==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.12.5",
                 "d3-array": "^2.8.0",
@@ -35556,20 +34731,18 @@
         },
         "node_modules/react-compound-slider/node_modules/d3-array": {
             "version": "2.12.1",
-            "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
-            "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "internmap": "^1.0.0"
             }
         },
         "node_modules/react-compound-slider/node_modules/internmap": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
-            "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="
+            "license": "ISC"
         },
         "node_modules/react-datepicker": {
             "version": "6.9.0",
-            "integrity": "sha512-QTxuzeem7BUfVFWv+g5WuvzT0c5BPo+XTCNbMTZKSZQLU+cMMwSUHwspaxuIcDlwNcOH0tiJ+bh1fJ2yxOGYWA==",
+            "license": "MIT",
             "dependencies": {
                 "@floating-ui/react": "^0.26.2",
                 "clsx": "^2.1.0",
@@ -35584,7 +34757,7 @@
         },
         "node_modules/react-dom": {
             "version": "18.3.1",
-            "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+            "license": "MIT",
             "dependencies": {
                 "loose-envify": "^1.1.0",
                 "scheduler": "^0.23.2"
@@ -35595,8 +34768,7 @@
         },
         "node_modules/react-draggable": {
             "version": "4.4.6",
-            "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.6.tgz",
-            "integrity": "sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw==",
+            "license": "MIT",
             "dependencies": {
                 "clsx": "^1.1.1",
                 "prop-types": "^15.8.1"
@@ -35608,16 +34780,14 @@
         },
         "node_modules/react-draggable/node_modules/clsx": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
-            "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/react-grid-layout": {
             "version": "1.4.4",
-            "resolved": "https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-1.4.4.tgz",
-            "integrity": "sha512-7+Lg8E8O8HfOH5FrY80GCIR1SHTn2QnAYKh27/5spoz+OHhMmEhU/14gIkRzJOtympDPaXcVRX/nT1FjmeOUmQ==",
+            "license": "MIT",
             "dependencies": {
                 "clsx": "^2.0.0",
                 "fast-equals": "^4.0.3",
@@ -35633,15 +34803,14 @@
         },
         "node_modules/react-icons": {
             "version": "5.2.1",
-            "integrity": "sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw==",
+            "license": "MIT",
             "peerDependencies": {
                 "react": "*"
             }
         },
         "node_modules/react-intersection-observer": {
             "version": "9.10.2",
-            "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.10.2.tgz",
-            "integrity": "sha512-j2hGADK2hCbAlfaq6L3tVLb4iqngoN7B1fT16MwJ4J16YW/vWLcmAIinLsw0lgpZeMi4UDUWtHC9QDde0/P1yQ==",
+            "license": "MIT",
             "peerDependencies": {
                 "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
                 "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -35654,13 +34823,12 @@
         },
         "node_modules/react-is": {
             "version": "18.3.1",
-            "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
-            "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
+            "license": "MIT"
         },
         "node_modules/react-jsx-parser": {
             "version": "1.29.0",
-            "integrity": "sha512-u0svZd0UsPffRrIK0sTbox54jhEbTmg6ED9ob5FQahp1DeOpd2Rq+KiSTIFNYkZUL+WZi4Ntia/Oj5T4lDJafQ==",
             "hasInstallScript": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/jsdom": "^16.2.6",
                 "acorn": "^8.0.5",
@@ -35679,8 +34847,7 @@
         },
         "node_modules/react-jsx-parser/node_modules/@types/react": {
             "version": "17.0.80",
-            "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz",
-            "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==",
+            "license": "MIT",
             "optional": true,
             "dependencies": {
                 "@types/prop-types": "*",
@@ -35690,8 +34857,7 @@
         },
         "node_modules/react-jsx-parser/node_modules/@types/react-dom": {
             "version": "17.0.25",
-            "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.25.tgz",
-            "integrity": "sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA==",
+            "license": "MIT",
             "optional": true,
             "dependencies": {
                 "@types/react": "^17"
@@ -35699,13 +34865,12 @@
         },
         "node_modules/react-jsx-parser/node_modules/@types/react/node_modules/@types/scheduler": {
             "version": "0.16.8",
-            "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
-            "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
+            "license": "MIT",
             "optional": true
         },
         "node_modules/react-latex-next": {
             "version": "3.0.0",
-            "integrity": "sha512-x70f1b1G7TronVigsRgKHKYYVUNfZk/3bciFyYX1lYLQH2y3/TXku3+5Vap8MDbJhtopePSYBsYWS6jhzIdz+g==",
+            "license": "MIT",
             "dependencies": {
                 "katex": "^0.16.0"
             },
@@ -35720,8 +34885,7 @@
         },
         "node_modules/react-loading": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/react-loading/-/react-loading-2.0.3.tgz",
-            "integrity": "sha512-Vdqy79zq+bpeWJqC+xjltUjuGApyoItPgL0vgVfcJHhqwU7bAMKzysfGW/ADu6i0z0JiOCRJjo+IkFNkRNbA3A==",
+            "license": "MIT",
             "peerDependencies": {
                 "prop-types": "^15.6.0",
                 "react": ">=0.14.0"
@@ -35729,8 +34893,7 @@
         },
         "node_modules/react-map-gl": {
             "version": "7.1.7",
-            "resolved": "https://registry.npmjs.org/react-map-gl/-/react-map-gl-7.1.7.tgz",
-            "integrity": "sha512-mwjc0obkBJOXCcoXQr3VoLqmqwo9vS4bXfbGsdxXzEgVCv/PM0v+1QggL7W0d/ccIy+VCjbXNlGij+PENz6VNg==",
+            "license": "MIT",
             "dependencies": {
                 "@maplibre/maplibre-gl-style-spec": "^19.2.1",
                 "@types/mapbox-gl": ">=1.0.0"
@@ -35752,8 +34915,7 @@
         },
         "node_modules/react-markdown": {
             "version": "9.0.1",
-            "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.1.tgz",
-            "integrity": "sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "devlop": "^1.0.0",
@@ -35777,8 +34939,7 @@
         },
         "node_modules/react-measure": {
             "version": "2.5.2",
-            "resolved": "https://registry.npmjs.org/react-measure/-/react-measure-2.5.2.tgz",
-            "integrity": "sha512-M+rpbTLWJ3FD6FXvYV6YEGvQ5tMayQ3fGrZhRPHrE9bVlBYfDCLuDcgNttYfk8IqfOI03jz6cbpqMRTUclQnaA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.2.0",
                 "get-node-dimensions": "^1.2.1",
@@ -35792,8 +34953,7 @@
         },
         "node_modules/react-onclickoutside": {
             "version": "6.13.1",
-            "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.13.1.tgz",
-            "integrity": "sha512-LdrrxK/Yh9zbBQdFbMTXPp3dTSN9B+9YJQucdDu3JNKRrbdU+H+/TVONJoWtOwy4II8Sqf1y/DTI6w/vGPYW0w==",
+            "license": "MIT",
             "funding": {
                 "type": "individual",
                 "url": "https://github.com/Pomax/react-onclickoutside/blob/master/FUNDING.md"
@@ -35805,8 +34965,7 @@
         },
         "node_modules/react-resizable": {
             "version": "3.0.5",
-            "resolved": "https://registry.npmjs.org/react-resizable/-/react-resizable-3.0.5.tgz",
-            "integrity": "sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w==",
+            "license": "MIT",
             "dependencies": {
                 "prop-types": "15.x",
                 "react-draggable": "^4.0.3"
@@ -35817,8 +34976,7 @@
         },
         "node_modules/react-select": {
             "version": "5.8.0",
-            "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz",
-            "integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.12.0",
                 "@emotion/cache": "^11.4.0",
@@ -35837,8 +34995,7 @@
         },
         "node_modules/react-smooth": {
             "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz",
-            "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==",
+            "license": "MIT",
             "dependencies": {
                 "fast-equals": "^5.0.1",
                 "prop-types": "^15.8.1",
@@ -35851,24 +35008,21 @@
         },
         "node_modules/react-smooth/node_modules/fast-equals": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz",
-            "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.0.0"
             }
         },
         "node_modules/react-speech-recognition": {
             "version": "3.10.0",
-            "resolved": "https://registry.npmjs.org/react-speech-recognition/-/react-speech-recognition-3.10.0.tgz",
-            "integrity": "sha512-EVSr4Ik8l9urwdPiK2r0+ADrLyDDrjB0qBRdUWO+w2MfwEBrj6NuRmy1GD3x7BU/V6/hab0pl8Lupen0zwlJyw==",
+            "license": "MIT",
             "peerDependencies": {
                 "react": ">=16.8.0"
             }
         },
         "node_modules/react-stately": {
             "version": "3.31.1",
-            "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.31.1.tgz",
-            "integrity": "sha512-wuq673NHkYSdoceGryjtMJJvB9iQgyDkQDsnTN0t2v91pXjGDsN/EcOvnUrxXSBtY9eLdIw74R54z9GX5cJNEg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@react-stately/calendar": "^3.5.1",
                 "@react-stately/checkbox": "^3.6.5",
@@ -35900,7 +35054,7 @@
         },
         "node_modules/react-textarea-autosize": {
             "version": "8.5.3",
-            "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.20.13",
                 "use-composed-ref": "^1.3.0",
@@ -35915,24 +35069,21 @@
         },
         "node_modules/react-themeable": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/react-themeable/-/react-themeable-1.1.0.tgz",
-            "integrity": "sha512-kl5tQ8K+r9IdQXZd8WLa+xxYN04lLnJXRVhHfdgwsUJr/SlKJxIejoc9z9obEkx1mdqbTw1ry43fxEUwyD9u7w==",
+            "license": "MIT",
             "dependencies": {
                 "object-assign": "^3.0.0"
             }
         },
         "node_modules/react-themeable/node_modules/object-assign": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
-            "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/react-transition-group": {
             "version": "4.4.5",
-            "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
-            "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "@babel/runtime": "^7.5.5",
                 "dom-helpers": "^5.0.1",
@@ -35946,8 +35097,7 @@
         },
         "node_modules/react-type-animation": {
             "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/react-type-animation/-/react-type-animation-3.2.0.tgz",
-            "integrity": "sha512-WXTe0i3rRNKjmggPvT5ntye1QBt0ATGbijeW6V3cQe2W0jaMABXXlPPEdtofnS9tM7wSRHchEvI9SUw+0kUohw==",
+            "license": "MIT",
             "peerDependencies": {
                 "prop-types": "^15.5.4",
                 "react": ">= 15.0.0",
@@ -35956,8 +35106,7 @@
         },
         "node_modules/react-xarrows": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/react-xarrows/-/react-xarrows-2.0.2.tgz",
-            "integrity": "sha512-tDlAqaxHNmy0vegW/6NdhoWyXJq1LANX/WUAlHyzoHe9BwFVnJPPDghmDjYeVr7XWFmBrVTUrHsrW7GKYI6HtQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/prop-types": "^15.7.3",
                 "lodash": "^4.17.21",
@@ -35973,35 +35122,21 @@
         },
         "node_modules/reactcss": {
             "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz",
-            "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==",
+            "license": "MIT",
             "dependencies": {
                 "lodash": "^4.0.1"
             }
         },
-        "node_modules/read": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz",
-            "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==",
-            "dependencies": {
-                "mute-stream": "^1.0.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/read-cmd-shim": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz",
-            "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/read-package-json-fast": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz",
-            "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==",
+            "license": "ISC",
             "dependencies": {
                 "json-parse-even-better-errors": "^3.0.0",
                 "npm-normalize-package-bin": "^3.0.0"
@@ -36012,24 +35147,14 @@
         },
         "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
-            "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/read/node_modules/mute-stream": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
-            "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
+            "license": "MIT",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/readable-stream": {
             "version": "4.5.2",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
-            "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
+            "license": "MIT",
             "dependencies": {
                 "abort-controller": "^3.0.0",
                 "buffer": "^6.0.3",
@@ -36043,8 +35168,6 @@
         },
         "node_modules/readable-stream/node_modules/buffer": {
             "version": "6.0.3",
-            "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
-            "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
             "funding": [
                 {
                     "type": "github",
@@ -36059,6 +35182,7 @@
                     "url": "https://feross.org/support"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "base64-js": "^1.3.1",
                 "ieee754": "^1.2.1"
@@ -36066,16 +35190,14 @@
         },
         "node_modules/readable-stream/node_modules/string_decoder": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-            "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+            "license": "MIT",
             "dependencies": {
                 "safe-buffer": "~5.2.0"
             }
         },
         "node_modules/readable-web-to-node-stream": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
-            "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
+            "license": "MIT",
             "dependencies": {
                 "readable-stream": "^3.6.0"
             },
@@ -36089,8 +35211,7 @@
         },
         "node_modules/readable-web-to-node-stream/node_modules/readable-stream": {
             "version": "3.6.2",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-            "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+            "license": "MIT",
             "dependencies": {
                 "inherits": "^2.0.3",
                 "string_decoder": "^1.1.1",
@@ -36102,24 +35223,21 @@
         },
         "node_modules/readable-web-to-node-stream/node_modules/readable-stream/node_modules/string_decoder": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-            "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+            "license": "MIT",
             "dependencies": {
                 "safe-buffer": "~5.2.0"
             }
         },
         "node_modules/readdir-glob": {
             "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
-            "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "minimatch": "^5.1.0"
             }
         },
         "node_modules/readdir-glob/node_modules/minimatch": {
             "version": "5.1.6",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
-            "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^2.0.1"
             },
@@ -36129,8 +35247,7 @@
         },
         "node_modules/readdirp": {
             "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+            "license": "MIT",
             "dependencies": {
                 "picomatch": "^2.2.1"
             },
@@ -36140,12 +35257,11 @@
         },
         "node_modules/readline": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz",
-            "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg=="
+            "license": "BSD"
         },
         "node_modules/recharts": {
             "version": "2.12.7",
-            "integrity": "sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==",
+            "license": "MIT",
             "dependencies": {
                 "clsx": "^2.0.0",
                 "eventemitter3": "^4.0.1",
@@ -36166,21 +35282,17 @@
         },
         "node_modules/recharts-scale": {
             "version": "0.4.5",
-            "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
-            "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
+            "license": "MIT",
             "dependencies": {
                 "decimal.js-light": "^2.4.1"
             }
         },
         "node_modules/recharts/node_modules/react-is": {
             "version": "16.13.1",
-            "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-            "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+            "license": "MIT"
         },
         "node_modules/rechoir": {
             "version": "0.6.2",
-            "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
-            "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
             "dependencies": {
                 "resolve": "^1.1.6"
             },
@@ -36190,17 +35302,15 @@
         },
         "node_modules/reduce-flatten": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
-            "integrity": "sha512-j5WfFJfc9CoXv/WbwVLHq74i/hdTUpy+iNC534LxczMRP67vJeK3V9JOdnL0N1cIRbn9mYhE2yVjvvKXDxvNXQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/reflect.getprototypeof": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
-            "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -36219,13 +35329,11 @@
         },
         "node_modules/regenerate": {
             "version": "1.4.2",
-            "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
-            "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
+            "license": "MIT"
         },
         "node_modules/regenerate-unicode-properties": {
             "version": "10.1.1",
-            "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
-            "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
+            "license": "MIT",
             "dependencies": {
                 "regenerate": "^1.4.2"
             },
@@ -36235,21 +35343,18 @@
         },
         "node_modules/regenerator-runtime": {
             "version": "0.14.1",
-            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
-            "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+            "license": "MIT"
         },
         "node_modules/regenerator-transform": {
             "version": "0.15.2",
-            "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
-            "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime": "^7.8.4"
             }
         },
         "node_modules/regexp.prototype.flags": {
             "version": "1.5.2",
-            "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
-            "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.6",
                 "define-properties": "^1.2.1",
@@ -36265,9 +35370,8 @@
         },
         "node_modules/regexpp": {
             "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-            "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             },
@@ -36277,8 +35381,7 @@
         },
         "node_modules/regexpu-core": {
             "version": "5.3.2",
-            "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
-            "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/regjsgen": "^0.8.0",
                 "regenerate": "^1.4.2",
@@ -36293,8 +35396,7 @@
         },
         "node_modules/regjsparser": {
             "version": "0.9.1",
-            "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
-            "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "jsesc": "~0.5.0"
             },
@@ -36304,15 +35406,13 @@
         },
         "node_modules/regjsparser/node_modules/jsesc": {
             "version": "0.5.0",
-            "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-            "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
             "bin": {
                 "jsesc": "bin/jsesc"
             }
         },
         "node_modules/rehype-katex": {
             "version": "7.0.0",
-            "integrity": "sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "@types/katex": "^0.16.0",
@@ -36329,8 +35429,7 @@
         },
         "node_modules/rehype-raw": {
             "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
-            "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "hast-util-raw": "^9.0.0",
@@ -36343,16 +35442,14 @@
         },
         "node_modules/relateurl": {
             "version": "0.2.7",
-            "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
-            "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.10"
             }
         },
         "node_modules/remark-gfm": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz",
-            "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "mdast-util-gfm": "^3.0.0",
@@ -36368,15 +35465,14 @@
         },
         "node_modules/remark-gfm/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/remark-math": {
             "version": "6.0.0",
-            "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "mdast-util-math": "^3.0.0",
@@ -36390,16 +35486,14 @@
         },
         "node_modules/remark-math/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/remark-parse": {
             "version": "11.0.0",
-            "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
-            "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "mdast-util-from-markdown": "^2.0.0",
@@ -36413,16 +35507,14 @@
         },
         "node_modules/remark-parse/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/remark-parse/node_modules/mdast-util-from-markdown": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
-            "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "@types/unist": "^3.0.0",
@@ -36444,13 +35536,11 @@
         },
         "node_modules/remark-parse/node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/remark-parse/node_modules/mdast-util-to-string": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
-            "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0"
             },
@@ -36461,8 +35551,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
-            "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36473,6 +35561,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "@types/debug": "^4.0.0",
                 "debug": "^4.0.0",
@@ -36495,8 +35584,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-core-commonmark": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
-            "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36507,6 +35594,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "devlop": "^1.0.0",
@@ -36528,8 +35616,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-factory-destination": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
-            "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36540,6 +35626,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -36548,8 +35635,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-factory-label": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
-            "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36560,6 +35645,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -36569,8 +35655,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-factory-space": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
-            "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36581,6 +35665,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -36588,8 +35673,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-factory-title": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
-            "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36600,6 +35683,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -36609,8 +35693,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-factory-whitespace": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
-            "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36621,6 +35703,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-factory-space": "^2.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -36630,8 +35713,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-util-character": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
-            "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36642,6 +35723,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -36649,8 +35731,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-util-chunked": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
-            "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36661,14 +35741,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/remark-parse/node_modules/micromark-util-classify-character": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
-            "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36679,6 +35758,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-symbol": "^2.0.0",
@@ -36687,8 +35767,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-util-combine-extensions": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
-            "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36699,6 +35777,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-chunked": "^2.0.0",
                 "micromark-util-types": "^2.0.0"
@@ -36706,8 +35785,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-util-decode-numeric-character-reference": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
-            "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36718,14 +35795,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/remark-parse/node_modules/micromark-util-decode-string": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
-            "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36736,6 +35812,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "decode-named-character-reference": "^1.0.0",
                 "micromark-util-character": "^2.0.0",
@@ -36745,8 +35822,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-util-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
-            "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36756,12 +35831,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/remark-parse/node_modules/micromark-util-html-tag-name": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
-            "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36771,12 +35845,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/remark-parse/node_modules/micromark-util-normalize-identifier": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
-            "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36787,14 +35860,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-symbol": "^2.0.0"
             }
         },
         "node_modules/remark-parse/node_modules/micromark-util-resolve-all": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
-            "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36805,14 +35877,13 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-types": "^2.0.0"
             }
         },
         "node_modules/remark-parse/node_modules/micromark-util-sanitize-uri": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
-            "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36823,6 +35894,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "micromark-util-character": "^2.0.0",
                 "micromark-util-encode": "^2.0.0",
@@ -36831,8 +35903,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-util-subtokenize": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
-            "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36843,6 +35913,7 @@
                     "url": "https://opencollective.com/unified"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "devlop": "^1.0.0",
                 "micromark-util-chunked": "^2.0.0",
@@ -36852,8 +35923,6 @@
         },
         "node_modules/remark-parse/node_modules/micromark-util-symbol": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
-            "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36863,12 +35932,11 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/remark-parse/node_modules/micromark-util-types": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
-            "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
             "funding": [
                 {
                     "type": "GitHub Sponsors",
@@ -36878,12 +35946,12 @@
                     "type": "OpenCollective",
                     "url": "https://opencollective.com/unified"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/remark-parse/node_modules/unist-util-stringify-position": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-            "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -36894,13 +35962,11 @@
         },
         "node_modules/remark-parse/node_modules/unist-util-stringify-position/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/remark-rehype": {
             "version": "11.1.0",
-            "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz",
-            "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==",
+            "license": "MIT",
             "dependencies": {
                 "@types/hast": "^3.0.0",
                 "@types/mdast": "^4.0.0",
@@ -36915,16 +35981,14 @@
         },
         "node_modules/remark-rehype/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/remark-stringify": {
             "version": "11.0.0",
-            "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
-            "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/mdast": "^4.0.0",
                 "mdast-util-to-markdown": "^2.0.0",
@@ -36937,16 +36001,14 @@
         },
         "node_modules/remark-stringify/node_modules/@types/mdast": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
-            "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "*"
             }
         },
         "node_modules/renderkid": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz",
-            "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==",
+            "license": "MIT",
             "dependencies": {
                 "css-select": "^4.1.3",
                 "dom-converter": "^0.2.0",
@@ -36957,8 +36019,7 @@
         },
         "node_modules/renderkid/node_modules/dom-serializer": {
             "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
-            "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+            "license": "MIT",
             "dependencies": {
                 "domelementtype": "^2.0.1",
                 "domhandler": "^4.2.0",
@@ -36970,8 +36031,7 @@
         },
         "node_modules/renderkid/node_modules/domhandler": {
             "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
-            "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "domelementtype": "^2.2.0"
             },
@@ -36984,8 +36044,7 @@
         },
         "node_modules/renderkid/node_modules/domutils": {
             "version": "2.8.0",
-            "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
-            "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "dom-serializer": "^1.0.1",
                 "domelementtype": "^2.2.0",
@@ -36997,16 +36056,13 @@
         },
         "node_modules/renderkid/node_modules/entities": {
             "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
-            "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+            "license": "BSD-2-Clause",
             "funding": {
                 "url": "https://github.com/fb55/entities?sponsor=1"
             }
         },
         "node_modules/renderkid/node_modules/htmlparser2": {
             "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
-            "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
             "funding": [
                 "https://github.com/fb55/htmlparser2?sponsor=1",
                 {
@@ -37014,6 +36070,7 @@
                     "url": "https://github.com/sponsors/fb55"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "domelementtype": "^2.0.1",
                 "domhandler": "^4.0.0",
@@ -37023,9 +36080,8 @@
         },
         "node_modules/request": {
             "version": "2.88.2",
-            "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
-            "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
             "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+            "license": "Apache-2.0",
             "dependencies": {
                 "aws-sign2": "~0.7.0",
                 "aws4": "^1.8.0",
@@ -37054,9 +36110,8 @@
         },
         "node_modules/request-promise": {
             "version": "4.2.6",
-            "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz",
-            "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==",
             "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142",
+            "license": "ISC",
             "dependencies": {
                 "bluebird": "^3.5.0",
                 "request-promise-core": "1.1.4",
@@ -37072,8 +36127,7 @@
         },
         "node_modules/request-promise-core": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
-            "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
+            "license": "ISC",
             "dependencies": {
                 "lodash": "^4.17.19"
             },
@@ -37086,8 +36140,7 @@
         },
         "node_modules/request-promise/node_modules/tough-cookie": {
             "version": "2.5.0",
-            "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-            "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "psl": "^1.1.28",
                 "punycode": "^2.1.1"
@@ -37098,8 +36151,7 @@
         },
         "node_modules/request/node_modules/form-data": {
             "version": "2.3.3",
-            "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
-            "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+            "license": "MIT",
             "dependencies": {
                 "asynckit": "^0.4.0",
                 "combined-stream": "^1.0.6",
@@ -37111,16 +36163,14 @@
         },
         "node_modules/request/node_modules/qs": {
             "version": "6.5.3",
-            "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
-            "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">=0.6"
             }
         },
         "node_modules/request/node_modules/tough-cookie": {
             "version": "2.5.0",
-            "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-            "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "psl": "^1.1.28",
                 "punycode": "^2.1.1"
@@ -37131,48 +36181,41 @@
         },
         "node_modules/request/node_modules/uuid": {
             "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-            "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
             "deprecated": "Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.",
+            "license": "MIT",
             "bin": {
                 "uuid": "bin/uuid"
             }
         },
         "node_modules/require-directory": {
             "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-            "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/require-from-string": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
-            "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/require-package-name": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz",
-            "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q=="
+            "license": "MIT"
         },
         "node_modules/requires-port": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-            "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
+            "license": "MIT"
         },
         "node_modules/resize-observer-polyfill": {
             "version": "1.5.1",
-            "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
-            "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+            "license": "MIT"
         },
         "node_modules/resolve": {
             "version": "1.22.8",
-            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
-            "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+            "license": "MIT",
             "dependencies": {
                 "is-core-module": "^2.13.0",
                 "path-parse": "^1.0.7",
@@ -37187,13 +36230,11 @@
         },
         "node_modules/resolve-alpn": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
-            "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
+            "license": "MIT"
         },
         "node_modules/resolve-cwd": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
-            "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+            "license": "MIT",
             "dependencies": {
                 "resolve-from": "^5.0.0"
             },
@@ -37203,8 +36244,7 @@
         },
         "node_modules/resolve-dir": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
-            "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==",
+            "license": "MIT",
             "dependencies": {
                 "expand-tilde": "^2.0.0",
                 "global-modules": "^1.0.0"
@@ -37215,33 +36255,29 @@
         },
         "node_modules/resolve-from": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-            "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/resolve-pkg-maps": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
-            "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
             "dev": true,
+            "license": "MIT",
             "funding": {
                 "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
             }
         },
         "node_modules/resolve-protobuf-schema": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
-            "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
+            "license": "MIT",
             "dependencies": {
                 "protocol-buffers-schema": "^3.3.1"
             }
         },
         "node_modules/responselike": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
-            "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
+            "license": "MIT",
             "dependencies": {
                 "lowercase-keys": "^3.0.0"
             },
@@ -37254,9 +36290,8 @@
         },
         "node_modules/restore-cursor": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
-            "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "onetime": "^5.1.0",
                 "signal-exit": "^3.0.2"
@@ -37267,23 +36302,20 @@
         },
         "node_modules/restore-cursor/node_modules/signal-exit": {
             "version": "3.0.7",
-            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-            "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-            "dev": true
+            "dev": true,
+            "license": "ISC"
         },
         "node_modules/retry": {
             "version": "0.13.1",
-            "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
-            "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 4"
             }
         },
         "node_modules/reusify": {
             "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-            "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+            "license": "MIT",
             "engines": {
                 "iojs": ">=1.0.0",
                 "node": ">=0.10.0"
@@ -37291,16 +36323,15 @@
         },
         "node_modules/reveal.js": {
             "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/reveal.js/-/reveal.js-5.1.0.tgz",
-            "integrity": "sha512-KDt7m0+xwKV6nAZt4CNPVFBf42sTKRQapg0bGGKB5PKO5XvChnMfwlZkybydHiQJ7p5+6LbHKRGrhXODdoNIaA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=18.0.0"
             }
         },
         "node_modules/rimraf": {
-            "version": "5.0.7",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz",
-            "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==",
+            "version": "5.0.9",
+            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.9.tgz",
+            "integrity": "sha512-3i7b8OcswU6CpU8Ej89quJD4O98id7TtVM5U4Mybh84zQXdrFmDLouWBEEaD/QfO3gDDfH+AGFCGsR7kngzQnA==",
             "dependencies": {
                 "glob": "^10.3.7"
             },
@@ -37308,7 +36339,7 @@
                 "rimraf": "dist/esm/bin.mjs"
             },
             "engines": {
-                "node": ">=14.18"
+                "node": "14 >=14.20 || 16 >=16.20 || >=18"
             },
             "funding": {
                 "url": "https://github.com/sponsors/isaacs"
@@ -37316,25 +36347,21 @@
         },
         "node_modules/robust-predicates": {
             "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz",
-            "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg=="
+            "license": "Unlicense"
         },
         "node_modules/rope-sequence": {
             "version": "1.3.4",
-            "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz",
-            "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ=="
+            "license": "MIT"
         },
         "node_modules/rrweb-cssom": {
             "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
-            "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/run-applescript": {
             "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
-            "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=18"
             },
@@ -37344,17 +36371,14 @@
         },
         "node_modules/run-async": {
             "version": "2.4.1",
-            "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
-            "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=0.12.0"
             }
         },
         "node_modules/run-parallel": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-            "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
             "funding": [
                 {
                     "type": "github",
@@ -37369,20 +36393,19 @@
                     "url": "https://feross.org/support"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "queue-microtask": "^1.2.2"
             }
         },
         "node_modules/rw": {
             "version": "1.3.3",
-            "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
-            "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
+            "license": "BSD-3-Clause"
         },
         "node_modules/rxjs": {
             "version": "6.6.7",
-            "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
-            "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
             "dev": true,
+            "license": "Apache-2.0",
             "dependencies": {
                 "tslib": "^1.9.0"
             },
@@ -37392,14 +36415,12 @@
         },
         "node_modules/rxjs/node_modules/tslib": {
             "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-            "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-            "dev": true
+            "dev": true,
+            "license": "0BSD"
         },
         "node_modules/sade": {
             "version": "1.8.1",
-            "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
-            "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
+            "license": "MIT",
             "dependencies": {
                 "mri": "^1.1.0"
             },
@@ -37409,9 +36430,8 @@
         },
         "node_modules/safe-array-concat": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
-            "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "get-intrinsic": "^1.2.4",
@@ -37427,8 +36447,6 @@
         },
         "node_modules/safe-buffer": {
             "version": "5.2.1",
-            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-            "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
             "funding": [
                 {
                     "type": "github",
@@ -37442,13 +36460,13 @@
                     "type": "consulting",
                     "url": "https://feross.org/support"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/safe-regex-test": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
-            "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.6",
                 "es-errors": "^1.3.0",
@@ -37463,12 +36481,11 @@
         },
         "node_modules/safer-buffer": {
             "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-            "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+            "license": "MIT"
         },
         "node_modules/sass": {
             "version": "1.77.2",
-            "integrity": "sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==",
+            "license": "MIT",
             "dependencies": {
                 "chokidar": ">=3.0.0 <4.0.0",
                 "immutable": "^4.0.0",
@@ -37483,7 +36500,7 @@
         },
         "node_modules/sass-loader": {
             "version": "14.2.1",
-            "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==",
+            "license": "MIT",
             "dependencies": {
                 "neo-async": "^2.6.2"
             },
@@ -37521,14 +36538,12 @@
         },
         "node_modules/sax": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
-            "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
+            "license": "ISC"
         },
         "node_modules/saxes": {
             "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
-            "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "xmlchars": "^2.2.0"
             },
@@ -37538,16 +36553,14 @@
         },
         "node_modules/scheduler": {
             "version": "0.23.2",
-            "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
-            "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+            "license": "MIT",
             "dependencies": {
                 "loose-envify": "^1.1.0"
             }
         },
         "node_modules/schema-utils": {
             "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
-            "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/json-schema": "^7.0.9",
                 "ajv": "^8.9.0",
@@ -37564,8 +36577,7 @@
         },
         "node_modules/schema-utils/node_modules/ajv": {
             "version": "8.16.0",
-            "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
-            "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
+            "license": "MIT",
             "dependencies": {
                 "fast-deep-equal": "^3.1.3",
                 "json-schema-traverse": "^1.0.0",
@@ -37579,8 +36591,7 @@
         },
         "node_modules/schema-utils/node_modules/ajv-keywords": {
             "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-            "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+            "license": "MIT",
             "dependencies": {
                 "fast-deep-equal": "^3.1.3"
             },
@@ -37590,24 +36601,20 @@
         },
         "node_modules/schema-utils/node_modules/json-schema-traverse": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-            "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+            "license": "MIT"
         },
         "node_modules/scss-loader": {
             "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/scss-loader/-/scss-loader-0.0.1.tgz",
-            "integrity": "sha512-SbT/smRJjkvvdHSEdAYAplosVkrtaSwwgUlnQCOuDS5sOKNjrS/eYCMvKeV6+YxK5cCOCsOJZd3vltrXatFp+g==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/section-iterator": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/section-iterator/-/section-iterator-2.0.0.tgz",
-            "integrity": "sha512-xvTNwcbeDayXotnV32zLb3duQsP+4XosHpb/F+tu6VzEZFmIjzPdNk6/O+QOOx5XTh08KL2ufdXeCO33p380pQ=="
+            "license": "MIT"
         },
         "node_modules/selderee": {
             "version": "0.11.0",
-            "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz",
-            "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==",
+            "license": "MIT",
             "dependencies": {
                 "parseley": "^0.12.0"
             },
@@ -37617,15 +36624,13 @@
         },
         "node_modules/select-hose": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
-            "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/selfsigned": {
             "version": "2.4.1",
-            "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
-            "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node-forge": "^1.3.0",
                 "node-forge": "^1"
@@ -37636,21 +36641,18 @@
         },
         "node_modules/semver": {
             "version": "6.3.1",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-            "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             }
         },
         "node_modules/semver-compare": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
-            "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="
+            "license": "MIT"
         },
         "node_modules/send": {
             "version": "0.18.0",
-            "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
-            "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "2.6.9",
                 "depd": "2.0.0",
@@ -37672,49 +36674,42 @@
         },
         "node_modules/send/node_modules/debug": {
             "version": "2.6.9",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "license": "MIT",
             "dependencies": {
                 "ms": "2.0.0"
             }
         },
         "node_modules/send/node_modules/debug/node_modules/ms": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+            "license": "MIT"
         },
         "node_modules/send/node_modules/ms": {
             "version": "2.1.3",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+            "license": "MIT"
         },
         "node_modules/serialize-javascript": {
             "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
-            "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
             "dev": true,
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "randombytes": "^2.1.0"
             }
         },
         "node_modules/serialize-to-js": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-3.1.2.tgz",
-            "integrity": "sha512-owllqNuDDEimQat7EPG0tH7JjO090xKNzUtYz6X+Sk2BXDnOCilDdNLwjWeFywG9xkJul1ULvtUQa9O4pUaY0w==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4.0.0"
             }
         },
         "node_modules/serializr": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/serializr/-/serializr-3.0.2.tgz",
-            "integrity": "sha512-bCACTuCiAEjtk1NxkATc3yz2j/8OoaWYxRkC4D5yq0ikZeLO7KLmmI/owmvJ/N4vS9SX4fZTXgSmsNzWtxDJ/Q=="
+            "license": "MIT"
         },
         "node_modules/serve-index": {
             "version": "1.9.1",
-            "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
-            "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "accepts": "~1.3.4",
                 "batch": "0.6.1",
@@ -37730,27 +36725,24 @@
         },
         "node_modules/serve-index/node_modules/debug": {
             "version": "2.6.9",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ms": "2.0.0"
             }
         },
         "node_modules/serve-index/node_modules/depd": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-            "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/serve-index/node_modules/http-errors": {
             "version": "1.6.3",
-            "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-            "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "depd": "~1.1.2",
                 "inherits": "2.0.3",
@@ -37763,35 +36755,30 @@
         },
         "node_modules/serve-index/node_modules/inherits": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-            "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
-            "dev": true
+            "dev": true,
+            "license": "ISC"
         },
         "node_modules/serve-index/node_modules/ms": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/serve-index/node_modules/setprototypeof": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
-            "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
-            "dev": true
+            "dev": true,
+            "license": "ISC"
         },
         "node_modules/serve-index/node_modules/statuses": {
             "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-            "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.6"
             }
         },
         "node_modules/serve-static": {
             "version": "1.15.0",
-            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
-            "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+            "license": "MIT",
             "dependencies": {
                 "encodeurl": "~1.0.2",
                 "escape-html": "~1.0.3",
@@ -37804,13 +36791,11 @@
         },
         "node_modules/set-blocking": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-            "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
+            "license": "ISC"
         },
         "node_modules/set-function-length": {
             "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
-            "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+            "license": "MIT",
             "dependencies": {
                 "define-data-property": "^1.1.4",
                 "es-errors": "^1.3.0",
@@ -37825,8 +36810,7 @@
         },
         "node_modules/set-function-name": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
-            "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+            "license": "MIT",
             "dependencies": {
                 "define-data-property": "^1.1.4",
                 "es-errors": "^1.3.0",
@@ -37839,8 +36823,7 @@
         },
         "node_modules/set-value": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
-            "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+            "license": "MIT",
             "dependencies": {
                 "extend-shallow": "^2.0.1",
                 "is-extendable": "^0.1.1",
@@ -37853,18 +36836,15 @@
         },
         "node_modules/setimmediate": {
             "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
-            "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
+            "license": "MIT"
         },
         "node_modules/setprototypeof": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
-            "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+            "license": "ISC"
         },
         "node_modules/shallow-clone": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
-            "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+            "license": "MIT",
             "dependencies": {
                 "kind-of": "^6.0.2"
             },
@@ -37874,18 +36854,15 @@
         },
         "node_modules/shallow-equal": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz",
-            "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="
+            "license": "MIT"
         },
         "node_modules/shallowequal": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
-            "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
+            "license": "MIT"
         },
         "node_modules/shebang-command": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-            "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+            "license": "MIT",
             "dependencies": {
                 "shebang-regex": "^3.0.0"
             },
@@ -37895,25 +36872,22 @@
         },
         "node_modules/shebang-regex": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-            "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/shell-quote": {
             "version": "1.8.1",
-            "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
-            "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
             "dev": true,
+            "license": "MIT",
             "funding": {
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
         "node_modules/shelljs": {
             "version": "0.8.5",
-            "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
-            "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "glob": "^7.0.0",
                 "interpret": "^1.0.0",
@@ -37928,8 +36902,7 @@
         },
         "node_modules/shelljs/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -37937,9 +36910,7 @@
         },
         "node_modules/shelljs/node_modules/glob": {
             "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "deprecated": "Glob versions prior to v9 are no longer supported",
+            "license": "ISC",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -37957,8 +36928,7 @@
         },
         "node_modules/shelljs/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -37968,8 +36938,7 @@
         },
         "node_modules/side-channel": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
-            "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "es-errors": "^1.3.0",
@@ -37985,13 +36954,11 @@
         },
         "node_modules/sift": {
             "version": "17.1.3",
-            "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz",
-            "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ=="
+            "license": "MIT"
         },
         "node_modules/signal-exit": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
-            "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+            "license": "ISC",
             "engines": {
                 "node": ">=14"
             },
@@ -38001,8 +36968,7 @@
         },
         "node_modules/sigstore": {
             "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz",
-            "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@sigstore/bundle": "^2.3.2",
                 "@sigstore/core": "^1.0.0",
@@ -38017,8 +36983,7 @@
         },
         "node_modules/sigstore/node_modules/@sigstore/tuf": {
             "version": "2.3.4",
-            "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz",
-            "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@sigstore/protobuf-specs": "^0.3.2",
                 "tuf-js": "^2.2.1"
@@ -38029,8 +36994,6 @@
         },
         "node_modules/simple-concat": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
-            "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
             "funding": [
                 {
                     "type": "github",
@@ -38044,12 +37007,12 @@
                     "type": "consulting",
                     "url": "https://feross.org/support"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/simple-get": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
-            "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
+            "license": "MIT",
             "dependencies": {
                 "decompress-response": "^4.2.0",
                 "once": "^1.3.1",
@@ -38058,8 +37021,7 @@
         },
         "node_modules/simple-get/node_modules/decompress-response": {
             "version": "4.2.1",
-            "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
-            "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
+            "license": "MIT",
             "dependencies": {
                 "mimic-response": "^2.0.0"
             },
@@ -38069,8 +37031,7 @@
         },
         "node_modules/simple-get/node_modules/mimic-response": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
-            "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             },
@@ -38080,21 +37041,18 @@
         },
         "node_modules/simple-swizzle": {
             "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
-            "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+            "license": "MIT",
             "dependencies": {
                 "is-arrayish": "^0.3.1"
             }
         },
         "node_modules/simple-swizzle/node_modules/is-arrayish": {
             "version": "0.3.2",
-            "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
-            "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+            "license": "MIT"
         },
         "node_modules/simple-update-notifier": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
-            "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
+            "license": "MIT",
             "dependencies": {
                 "semver": "^7.5.3"
             },
@@ -38104,8 +37062,7 @@
         },
         "node_modules/simple-update-notifier/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -38115,22 +37072,19 @@
         },
         "node_modules/skmeans": {
             "version": "0.9.7",
-            "resolved": "https://registry.npmjs.org/skmeans/-/skmeans-0.9.7.tgz",
-            "integrity": "sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg=="
+            "license": "MIT"
         },
         "node_modules/slash": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-            "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/slice-ansi": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
-            "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^3.2.0",
                 "astral-regex": "^1.0.0",
@@ -38142,17 +37096,15 @@
         },
         "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-            "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/smart-buffer": {
             "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
-            "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 6.0.0",
                 "npm": ">= 3.0.0"
@@ -38160,8 +37112,7 @@
         },
         "node_modules/socket.io": {
             "version": "4.7.5",
-            "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz",
-            "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==",
+            "license": "MIT",
             "dependencies": {
                 "accepts": "~1.3.4",
                 "base64id": "~2.0.0",
@@ -38177,8 +37128,7 @@
         },
         "node_modules/socket.io-adapter": {
             "version": "2.5.4",
-            "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz",
-            "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "~4.3.4",
                 "ws": "~8.11.0"
@@ -38186,8 +37136,7 @@
         },
         "node_modules/socket.io-adapter/node_modules/ws": {
             "version": "8.11.0",
-            "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
-            "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10.0.0"
             },
@@ -38206,8 +37155,7 @@
         },
         "node_modules/socket.io-client": {
             "version": "4.7.5",
-            "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz",
-            "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==",
+            "license": "MIT",
             "dependencies": {
                 "@socket.io/component-emitter": "~3.1.0",
                 "debug": "~4.3.2",
@@ -38220,8 +37168,7 @@
         },
         "node_modules/socket.io-parser": {
             "version": "4.2.4",
-            "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
-            "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
+            "license": "MIT",
             "dependencies": {
                 "@socket.io/component-emitter": "~3.1.0",
                 "debug": "~4.3.1"
@@ -38232,9 +37179,8 @@
         },
         "node_modules/sockjs": {
             "version": "0.3.24",
-            "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
-            "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "faye-websocket": "^0.11.3",
                 "uuid": "^8.3.2",
@@ -38243,17 +37189,15 @@
         },
         "node_modules/sockjs/node_modules/uuid": {
             "version": "8.3.2",
-            "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-            "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
             "dev": true,
+            "license": "MIT",
             "bin": {
                 "uuid": "dist/bin/uuid"
             }
         },
         "node_modules/socks": {
             "version": "2.8.3",
-            "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
-            "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
+            "license": "MIT",
             "dependencies": {
                 "ip-address": "^9.0.5",
                 "smart-buffer": "^4.2.0"
@@ -38265,8 +37209,7 @@
         },
         "node_modules/socks-proxy-agent": {
             "version": "8.0.3",
-            "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz",
-            "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==",
+            "license": "MIT",
             "dependencies": {
                 "agent-base": "^7.1.1",
                 "debug": "^4.3.4",
@@ -38278,8 +37221,7 @@
         },
         "node_modules/socks-proxy-agent/node_modules/agent-base": {
             "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
-            "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "^4.3.4"
             },
@@ -38289,24 +37231,21 @@
         },
         "node_modules/sort-asc": {
             "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz",
-            "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/sort-desc": {
             "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz",
-            "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/sort-object": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz",
-            "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==",
+            "license": "MIT",
             "dependencies": {
                 "bytewise": "^1.1.0",
                 "get-value": "^2.0.2",
@@ -38321,24 +37260,21 @@
         },
         "node_modules/source-map": {
             "version": "0.5.7",
-            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-            "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/source-map-js": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
-            "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/source-map-support": {
             "version": "0.5.21",
-            "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
-            "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+            "license": "MIT",
             "dependencies": {
                 "buffer-from": "^1.0.0",
                 "source-map": "^0.6.0"
@@ -38346,16 +37282,14 @@
         },
         "node_modules/source-map-support/node_modules/source-map": {
             "version": "0.6.1",
-            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-            "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/space-separated-tokens": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
-            "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -38363,16 +37297,14 @@
         },
         "node_modules/sparse-bitfield": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
-            "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
+            "license": "MIT",
             "dependencies": {
                 "memory-pager": "^1.0.2"
             }
         },
         "node_modules/spdx-correct": {
             "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
-            "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "spdx-expression-parse": "^3.0.0",
                 "spdx-license-ids": "^3.0.0"
@@ -38380,8 +37312,7 @@
         },
         "node_modules/spdx-correct/node_modules/spdx-expression-parse": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-            "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+            "license": "MIT",
             "dependencies": {
                 "spdx-exceptions": "^2.1.0",
                 "spdx-license-ids": "^3.0.0"
@@ -38389,28 +37320,16 @@
         },
         "node_modules/spdx-exceptions": {
             "version": "2.5.0",
-            "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
-            "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="
-        },
-        "node_modules/spdx-expression-parse": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
-            "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
-            "dependencies": {
-                "spdx-exceptions": "^2.1.0",
-                "spdx-license-ids": "^3.0.0"
-            }
+            "license": "CC-BY-3.0"
         },
         "node_modules/spdx-license-ids": {
             "version": "3.0.18",
-            "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
-            "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ=="
+            "license": "CC0-1.0"
         },
         "node_modules/spdy": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
-            "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "debug": "^4.1.0",
                 "handle-thing": "^2.0.0",
@@ -38424,9 +37343,8 @@
         },
         "node_modules/spdy-transport": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
-            "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "debug": "^4.1.0",
                 "detect-node": "^2.0.4",
@@ -38438,9 +37356,8 @@
         },
         "node_modules/spdy-transport/node_modules/readable-stream": {
             "version": "3.6.2",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-            "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "inherits": "^2.0.3",
                 "string_decoder": "^1.1.1",
@@ -38452,8 +37369,7 @@
         },
         "node_modules/speech-rule-engine": {
             "version": "4.0.7",
-            "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz",
-            "integrity": "sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "commander": "9.2.0",
                 "wicked-good-xpath": "1.3.0",
@@ -38465,34 +37381,29 @@
         },
         "node_modules/speech-rule-engine/node_modules/commander": {
             "version": "9.2.0",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz",
-            "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==",
+            "license": "MIT",
             "engines": {
                 "node": "^12.20.0 || >=14"
             }
         },
         "node_modules/splaytree": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.2.tgz",
-            "integrity": "sha512-4OM2BJgC5UzrhVnnJA4BkHKGtjXNzzUfpQjCO8I05xYPsfS/VuQDwjCGGMi8rYQilHEV4j8NBqTFbls/PZEE7A=="
+            "license": "MIT"
         },
         "node_modules/split-on-first": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz",
-            "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/split-skip": {
             "version": "0.0.2",
-            "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.2.tgz",
-            "integrity": "sha512-weHOi8BolsDnGIwhhWHbA+wKSuSpvWwjRrdj8SdbIIis2vSwOE37CQP8x3EleuzxanUr3AK8BdUy4MkiOULPZg=="
+            "license": "MIT"
         },
         "node_modules/split-string": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
-            "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+            "license": "MIT",
             "dependencies": {
                 "extend-shallow": "^3.0.0"
             },
@@ -38502,8 +37413,7 @@
         },
         "node_modules/split-string/node_modules/extend-shallow": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
-            "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+            "license": "MIT",
             "dependencies": {
                 "assign-symbols": "^1.0.0",
                 "is-extendable": "^1.0.1"
@@ -38514,8 +37424,7 @@
         },
         "node_modules/split-string/node_modules/is-extendable": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-            "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+            "license": "MIT",
             "dependencies": {
                 "is-plain-object": "^2.0.4"
             },
@@ -38525,13 +37434,11 @@
         },
         "node_modules/sprintf-js": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-            "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+            "license": "BSD-3-Clause"
         },
         "node_modules/sshpk": {
             "version": "1.18.0",
-            "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
-            "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
+            "license": "MIT",
             "dependencies": {
                 "asn1": "~0.2.3",
                 "assert-plus": "^1.0.0",
@@ -38554,8 +37461,7 @@
         },
         "node_modules/ssri": {
             "version": "10.0.6",
-            "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
-            "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
+            "license": "ISC",
             "dependencies": {
                 "minipass": "^7.0.3"
             },
@@ -38564,38 +37470,31 @@
             }
         },
         "node_modules/standard-error": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/standard-error/-/standard-error-1.1.0.tgz",
-            "integrity": "sha512-4v7qzU7oLJfMI5EltUSHCaaOd65J6S4BqKRWgzMi4EYaE5fvNabPxmAPGdxpGXqrcWjhDGI/H09CIdEuUOUeXg=="
+            "version": "1.1.0"
         },
         "node_modules/standard-http-error": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/standard-http-error/-/standard-http-error-2.0.1.tgz",
-            "integrity": "sha512-DX/xPIoyXQTuY6BMZK4Utyi4l3A4vFoafsfqrU6/dO4Oe/59c7PyqPd2IQj9m+ZieDg2K3RL9xOYJsabcD9IUA==",
             "dependencies": {
                 "standard-error": ">= 1.1.0 < 2"
             }
         },
         "node_modules/statuses": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
-            "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.8"
             }
         },
         "node_modules/stealthy-require": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
-            "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==",
+            "license": "ISC",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/stream-browserify": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
-            "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
+            "license": "MIT",
             "dependencies": {
                 "inherits": "~2.0.4",
                 "readable-stream": "^3.5.0"
@@ -38603,8 +37502,7 @@
         },
         "node_modules/stream-browserify/node_modules/readable-stream": {
             "version": "3.6.2",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-            "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+            "license": "MIT",
             "dependencies": {
                 "inherits": "^2.0.3",
                 "string_decoder": "^1.1.1",
@@ -38616,29 +37514,25 @@
         },
         "node_modules/stream-parser": {
             "version": "0.3.1",
-            "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
-            "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==",
+            "license": "MIT",
             "dependencies": {
                 "debug": "2"
             }
         },
         "node_modules/stream-parser/node_modules/debug": {
             "version": "2.6.9",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "license": "MIT",
             "dependencies": {
                 "ms": "2.0.0"
             }
         },
         "node_modules/stream-parser/node_modules/ms": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+            "license": "MIT"
         },
         "node_modules/streamx": {
             "version": "2.16.1",
-            "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz",
-            "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==",
+            "license": "MIT",
             "dependencies": {
                 "fast-fifo": "^1.1.0",
                 "queue-tick": "^1.0.1"
@@ -38649,29 +37543,25 @@
         },
         "node_modules/strict-uri-encode": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
-            "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/string_decoder": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-            "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+            "license": "MIT",
             "dependencies": {
                 "safe-buffer": "~5.1.0"
             }
         },
         "node_modules/string_decoder/node_modules/safe-buffer": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-            "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+            "license": "MIT"
         },
         "node_modules/string-width": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-            "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+            "license": "MIT",
             "dependencies": {
                 "eastasianwidth": "^0.2.0",
                 "emoji-regex": "^9.2.2",
@@ -38687,23 +37577,23 @@
         "node_modules/string-width-cjs": {
             "name": "string-width",
             "version": "4.2.3",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+            "license": "MIT",
             "dependencies": {
                 "emoji-regex": "^8.0.0",
                 "is-fullwidth-code-point": "^3.0.0",
                 "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
         "node_modules/string-width-cjs/node_modules/emoji-regex": {
             "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+            "license": "MIT"
         },
         "node_modules/string-width/node_modules/ansi-regex": {
             "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-            "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=12"
             },
@@ -38713,8 +37603,7 @@
         },
         "node_modules/string-width/node_modules/strip-ansi": {
             "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-            "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-regex": "^6.0.1"
             },
@@ -38727,14 +37616,12 @@
         },
         "node_modules/string.prototype.codepointat": {
             "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz",
-            "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg=="
+            "license": "MIT"
         },
         "node_modules/string.prototype.matchall": {
             "version": "4.0.11",
-            "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz",
-            "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -38758,9 +37645,8 @@
         },
         "node_modules/string.prototype.trim": {
             "version": "1.2.9",
-            "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
-            "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -38776,9 +37662,8 @@
         },
         "node_modules/string.prototype.trimend": {
             "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
-            "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -38790,9 +37675,8 @@
         },
         "node_modules/string.prototype.trimstart": {
             "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
-            "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "define-properties": "^1.2.1",
@@ -38807,8 +37691,7 @@
         },
         "node_modules/stringify-entities": {
             "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
-            "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+            "license": "MIT",
             "dependencies": {
                 "character-entities-html4": "^2.0.0",
                 "character-entities-legacy": "^3.0.0"
@@ -38820,8 +37703,7 @@
         },
         "node_modules/stringify-parameters": {
             "version": "0.0.4",
-            "resolved": "https://registry.npmjs.org/stringify-parameters/-/stringify-parameters-0.0.4.tgz",
-            "integrity": "sha512-H3L90ERn5UPtkpO8eugnKcLgpIVlvTyUTrcLGm607AV5JDH6z0GymtNLr3gjGlP6I6NB/mxNX9QpY6jEQGLPdQ==",
+            "license": "MIT",
             "dependencies": {
                 "magicli": "0.0.5",
                 "unpack-string": "0.0.2"
@@ -38832,13 +37714,11 @@
         },
         "node_modules/stringify-parameters/node_modules/commander": {
             "version": "2.20.3",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+            "license": "MIT"
         },
         "node_modules/stringify-parameters/node_modules/inspect-function": {
             "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.2.2.tgz",
-            "integrity": "sha512-becs5gzcHwPrlHawscYkyQ/ShiOiosrXPhA5RVZ3qyWH4aWdD52RnMfXq/dwQXciHwiieD8aIPwdIWYv6eL+sQ==",
+            "license": "MIT",
             "dependencies": {
                 "split-skip": "0.0.1",
                 "unpack-string": "0.0.2"
@@ -38846,8 +37726,7 @@
         },
         "node_modules/stringify-parameters/node_modules/magicli": {
             "version": "0.0.5",
-            "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz",
-            "integrity": "sha512-wZbMtnl2v1b+Jp3xlqA9FU/O4I6YhGXR8xSY/eU2+gDAvut/F+W3gl4qs61iL4LELC7jqSAE6aAD5668EbmQHA==",
+            "license": "MIT",
             "dependencies": {
                 "commander": "^2.9.0",
                 "get-stdin": "^5.0.1",
@@ -38857,13 +37736,11 @@
         },
         "node_modules/stringify-parameters/node_modules/split-skip": {
             "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.1.tgz",
-            "integrity": "sha512-7dkvq+gofI4M8zx4iZnEZ3O1s7FP4Y/iaIDHJh5RyWrs8idcPauFi2OZe3TBi36fLvR2j5z3kSzVtz6IhPdncQ=="
+            "license": "MIT"
         },
         "node_modules/strip-ansi": {
             "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-            "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-regex": "^5.0.1"
             },
@@ -38874,16 +37751,17 @@
         "node_modules/strip-ansi-cjs": {
             "name": "strip-ansi",
             "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-            "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-regex": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
         "node_modules/strip-bom": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-            "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
+            "license": "MIT",
             "dependencies": {
                 "is-utf8": "^0.2.0"
             },
@@ -38893,17 +37771,15 @@
         },
         "node_modules/strip-final-newline": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
-            "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/strip-json-comments": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-            "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             },
@@ -38913,8 +37789,7 @@
         },
         "node_modules/strtok3": {
             "version": "6.3.0",
-            "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
-            "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
+            "license": "MIT",
             "dependencies": {
                 "@tokenizer/token": "^0.3.0",
                 "peek-readable": "^4.1.0"
@@ -38929,9 +37804,8 @@
         },
         "node_modules/style-loader": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz",
-            "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 18.12.0"
             },
@@ -38945,15 +37819,14 @@
         },
         "node_modules/style-to-object": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz",
-            "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==",
+            "license": "MIT",
             "dependencies": {
                 "inline-style-parser": "0.2.3"
             }
         },
         "node_modules/styled-components": {
             "version": "6.1.11",
-            "integrity": "sha512-Ui0jXPzbp1phYij90h12ksljKGqF8ncGx+pjrNPsSPhbUUjWT2tD1FwGo2LF6USCnbrsIhNngDfodhxbegfEOA==",
+            "license": "MIT",
             "dependencies": {
                 "@emotion/is-prop-valid": "1.2.2",
                 "@emotion/unitless": "0.8.1",
@@ -38977,28 +37850,58 @@
                 "react-dom": ">= 16.8.0"
             }
         },
+        "node_modules/styled-components/node_modules/csstype": {
+            "version": "3.1.3",
+            "license": "MIT"
+        },
+        "node_modules/styled-components/node_modules/postcss": {
+            "version": "8.4.38",
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/postcss/"
+                },
+                {
+                    "type": "tidelift",
+                    "url": "https://tidelift.com/funding/github/npm/postcss"
+                },
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
+                }
+            ],
+            "license": "MIT",
+            "dependencies": {
+                "nanoid": "^3.3.7",
+                "picocolors": "^1.0.0",
+                "source-map-js": "^1.2.0"
+            },
+            "engines": {
+                "node": "^10 || ^12 || >=14"
+            }
+        },
         "node_modules/styled-components/node_modules/stylis": {
             "version": "4.3.2",
-            "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz",
-            "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg=="
+            "license": "MIT"
+        },
+        "node_modules/styled-components/node_modules/tslib": {
+            "version": "2.6.2",
+            "license": "0BSD"
         },
         "node_modules/stylis": {
             "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
-            "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
+            "license": "MIT"
         },
         "node_modules/supercluster": {
             "version": "8.0.1",
-            "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz",
-            "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==",
+            "license": "ISC",
             "dependencies": {
                 "kdbush": "^4.0.2"
             }
         },
         "node_modules/supports-color": {
             "version": "5.5.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+            "license": "MIT",
             "dependencies": {
                 "has-flag": "^3.0.0"
             },
@@ -39008,8 +37911,7 @@
         },
         "node_modules/supports-preserve-symlinks-flag": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-            "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.4"
             },
@@ -39019,15 +37921,13 @@
         },
         "node_modules/symbol-tree": {
             "version": "3.2.4",
-            "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
-            "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/synckit": {
             "version": "0.8.8",
-            "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz",
-            "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@pkgr/core": "^0.1.0",
                 "tslib": "^2.6.2"
@@ -39041,14 +37941,12 @@
         },
         "node_modules/tabbable": {
             "version": "6.2.0",
-            "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
-            "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="
+            "license": "MIT"
         },
         "node_modules/table": {
             "version": "5.4.6",
-            "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
-            "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
             "dev": true,
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "ajv": "^6.10.2",
                 "lodash": "^4.17.14",
@@ -39061,8 +37959,7 @@
         },
         "node_modules/table-layout": {
             "version": "0.4.5",
-            "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz",
-            "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==",
+            "license": "MIT",
             "dependencies": {
                 "array-back": "^2.0.0",
                 "deep-extend": "~0.6.0",
@@ -39076,33 +37973,29 @@
         },
         "node_modules/table/node_modules/ansi-regex": {
             "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
-            "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/table/node_modules/emoji-regex": {
             "version": "7.0.3",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-            "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/table/node_modules/is-fullwidth-code-point": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-            "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/table/node_modules/string-width": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-            "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "emoji-regex": "^7.0.1",
                 "is-fullwidth-code-point": "^2.0.0",
@@ -39114,9 +38007,8 @@
         },
         "node_modules/table/node_modules/strip-ansi": {
             "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-            "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-regex": "^4.1.0"
             },
@@ -39126,16 +38018,14 @@
         },
         "node_modules/tapable": {
             "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
-            "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/tar": {
             "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
-            "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+            "license": "ISC",
             "dependencies": {
                 "chownr": "^2.0.0",
                 "fs-minipass": "^2.0.0",
@@ -39150,8 +38040,7 @@
         },
         "node_modules/tar-stream": {
             "version": "3.1.7",
-            "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
-            "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
+            "license": "MIT",
             "dependencies": {
                 "b4a": "^1.6.4",
                 "fast-fifo": "^1.2.0",
@@ -39160,21 +38049,18 @@
         },
         "node_modules/tar/node_modules/minipass": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
-            "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+            "license": "ISC",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/tar/node_modules/yallist": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+            "license": "ISC"
         },
         "node_modules/terser": {
             "version": "5.31.0",
-            "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz",
-            "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "@jridgewell/source-map": "^0.3.3",
                 "acorn": "^8.8.2",
@@ -39190,8 +38076,7 @@
         },
         "node_modules/terser-webpack-plugin": {
             "version": "5.3.10",
-            "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
-            "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
+            "license": "MIT",
             "dependencies": {
                 "@jridgewell/trace-mapping": "^0.3.20",
                 "jest-worker": "^27.4.5",
@@ -39223,16 +38108,14 @@
         },
         "node_modules/terser-webpack-plugin/node_modules/has-flag": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/terser-webpack-plugin/node_modules/jest-worker": {
             "version": "27.5.1",
-            "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
-            "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*",
                 "merge-stream": "^2.0.0",
@@ -39244,8 +38127,7 @@
         },
         "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
             "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
-            "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/json-schema": "^7.0.8",
                 "ajv": "^6.12.5",
@@ -39261,16 +38143,14 @@
         },
         "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": {
             "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
-            "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "randombytes": "^2.1.0"
             }
         },
         "node_modules/terser-webpack-plugin/node_modules/supports-color": {
             "version": "8.1.1",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-            "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+            "license": "MIT",
             "dependencies": {
                 "has-flag": "^4.0.0"
             },
@@ -39283,31 +38163,51 @@
         },
         "node_modules/terser/node_modules/commander": {
             "version": "2.20.3",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+            "license": "MIT"
+        },
+        "node_modules/tesseract.js": {
+            "version": "5.1.0",
+            "hasInstallScript": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "bmp-js": "^0.1.0",
+                "idb-keyval": "^6.2.0",
+                "is-electron": "^2.2.2",
+                "is-url": "^1.2.4",
+                "node-fetch": "^2.6.9",
+                "opencollective-postinstall": "^2.0.3",
+                "regenerator-runtime": "^0.13.3",
+                "tesseract.js-core": "^5.1.0",
+                "wasm-feature-detect": "^1.2.11",
+                "zlibjs": "^0.3.1"
+            }
+        },
+        "node_modules/tesseract.js-core": {
+            "version": "5.1.0",
+            "license": "Apache License 2.0"
+        },
+        "node_modules/tesseract.js/node_modules/regenerator-runtime": {
+            "version": "0.13.11",
+            "license": "MIT"
         },
         "node_modules/text-segmentation": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
-            "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+            "license": "MIT",
             "dependencies": {
                 "utrie": "^1.0.2"
             }
         },
         "node_modules/text-table": {
             "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-            "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+            "license": "MIT"
         },
         "node_modules/textarea-caret": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/textarea-caret/-/textarea-caret-3.1.0.tgz",
-            "integrity": "sha512-cXAvzO9pP5CGa6NKx0WYHl+8CHKZs8byMkt3PCJBCmq2a34YA9pO1NrQET5pzeqnBjBdToF5No4rrmkDUgQC2Q=="
+            "license": "MIT"
         },
         "node_modules/thingies": {
             "version": "1.21.0",
-            "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz",
-            "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==",
+            "license": "Unlicense",
             "engines": {
                 "node": ">=10.18"
             },
@@ -39317,59 +38217,45 @@
         },
         "node_modules/through": {
             "version": "2.3.8",
-            "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-            "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/thunky": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
-            "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/timm": {
             "version": "1.7.1",
-            "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz",
-            "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw=="
+            "license": "MIT"
         },
         "node_modules/tiny-inflate": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
-            "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
+            "license": "MIT"
         },
         "node_modules/tiny-invariant": {
             "version": "1.3.3",
-            "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
-            "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="
+            "license": "MIT"
         },
         "node_modules/tiny-lru": {
             "version": "11.2.6",
-            "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.2.6.tgz",
-            "integrity": "sha512-0PU3c9PjMnltZaFo2sGYv/nnJsMjG0Cxx8X6FXHPPGjFyoo1SJDxvUXW1207rdiSxYizf31roo+GrkIByQeZoA==",
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">=12"
             }
         },
-        "node_modules/tiny-relative-date": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz",
-            "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A=="
-        },
         "node_modules/tinycolor2": {
             "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz",
-            "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="
+            "license": "MIT"
         },
         "node_modules/tinyqueue": {
             "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz",
-            "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA=="
+            "license": "ISC"
         },
         "node_modules/tmp": {
             "version": "0.0.33",
-            "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
-            "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "os-tmpdir": "~1.0.2"
             },
@@ -39379,16 +38265,14 @@
         },
         "node_modules/to-fast-properties": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-            "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/to-regex-range": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+            "license": "MIT",
             "dependencies": {
                 "is-number": "^7.0.0"
             },
@@ -39398,21 +38282,18 @@
         },
         "node_modules/toidentifier": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
-            "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.6"
             }
         },
         "node_modules/token-stream": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
-            "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg=="
+            "license": "MIT"
         },
         "node_modules/token-types": {
             "version": "4.2.1",
-            "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz",
-            "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==",
+            "license": "MIT",
             "dependencies": {
                 "@tokenizer/token": "^0.3.0",
                 "ieee754": "^1.2.1"
@@ -39427,8 +38308,7 @@
         },
         "node_modules/topojson-client": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz",
-            "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==",
+            "license": "ISC",
             "dependencies": {
                 "commander": "2"
             },
@@ -39440,13 +38320,11 @@
         },
         "node_modules/topojson-client/node_modules/commander": {
             "version": "2.20.3",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+            "license": "MIT"
         },
         "node_modules/topojson-server": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/topojson-server/-/topojson-server-3.0.1.tgz",
-            "integrity": "sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==",
+            "license": "ISC",
             "dependencies": {
                 "commander": "2"
             },
@@ -39456,13 +38334,11 @@
         },
         "node_modules/topojson-server/node_modules/commander": {
             "version": "2.20.3",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+            "license": "MIT"
         },
         "node_modules/touch": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz",
-            "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==",
+            "license": "ISC",
             "bin": {
                 "nodetouch": "bin/nodetouch.js"
             }
@@ -39491,9 +38367,8 @@
         },
         "node_modules/tr46": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
-            "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "punycode": "^2.3.1"
             },
@@ -39503,13 +38378,10 @@
         },
         "node_modules/traverse-chain": {
             "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz",
-            "integrity": "sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg=="
+            "license": "MIT"
         },
         "node_modules/tree-dump": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.1.tgz",
-            "integrity": "sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA==",
             "engines": {
                 "node": ">=10.0"
             },
@@ -39523,25 +38395,22 @@
         },
         "node_modules/tree-kill": {
             "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
-            "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
             "dev": true,
+            "license": "MIT",
             "bin": {
                 "tree-kill": "cli.js"
             }
         },
         "node_modules/treeverse": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz",
-            "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/trim-lines": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
-            "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -39549,8 +38418,7 @@
         },
         "node_modules/trough": {
             "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
-            "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -39558,13 +38426,11 @@
         },
         "node_modules/tryit": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
-            "integrity": "sha512-6C5h3CE+0qjGp+YKYTs74xR0k/Nw/ePtl/Lp6CCf44hqBQ66qnH1sDFR5mV/Gc48EsrHLB53lCFSffQCkka3kg=="
+            "license": "MIT"
         },
         "node_modules/ts-api-utils": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
-            "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=16"
             },
@@ -39574,17 +38440,15 @@
         },
         "node_modules/ts-dedent": {
             "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
-            "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.10"
             }
         },
         "node_modules/ts-loader": {
             "version": "9.5.1",
-            "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz",
-            "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "chalk": "^4.1.0",
                 "enhanced-resolve": "^5.0.0",
@@ -39602,9 +38466,8 @@
         },
         "node_modules/ts-loader/node_modules/ansi-styles": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "color-convert": "^2.0.1"
             },
@@ -39617,9 +38480,8 @@
         },
         "node_modules/ts-loader/node_modules/chalk": {
             "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-            "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^4.1.0",
                 "supports-color": "^7.1.0"
@@ -39633,9 +38495,8 @@
         },
         "node_modules/ts-loader/node_modules/color-convert": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "color-name": "~1.1.4"
             },
@@ -39645,24 +38506,21 @@
         },
         "node_modules/ts-loader/node_modules/color-name": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/ts-loader/node_modules/has-flag": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/ts-loader/node_modules/semver": {
             "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
             "dev": true,
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -39672,18 +38530,16 @@
         },
         "node_modules/ts-loader/node_modules/source-map": {
             "version": "0.7.4",
-            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
-            "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
             "dev": true,
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">= 8"
             }
         },
         "node_modules/ts-loader/node_modules/supports-color": {
             "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-            "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "has-flag": "^4.0.0"
             },
@@ -39693,9 +38549,8 @@
         },
         "node_modules/ts-node": {
             "version": "10.9.2",
-            "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
-            "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@cspotcode/source-map-support": "^0.8.0",
                 "@tsconfig/node10": "^1.0.7",
@@ -39736,9 +38591,8 @@
         },
         "node_modules/ts-node-dev": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz",
-            "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "chokidar": "^3.5.1",
                 "dynamic-dedupe": "^0.3.0",
@@ -39770,9 +38624,8 @@
         },
         "node_modules/ts-node-dev/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -39780,10 +38633,8 @@
         },
         "node_modules/ts-node-dev/node_modules/glob": {
             "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -39801,9 +38652,8 @@
         },
         "node_modules/ts-node-dev/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -39813,10 +38663,8 @@
         },
         "node_modules/ts-node-dev/node_modules/rimraf": {
             "version": "2.7.1",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-            "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
-            "deprecated": "Rimraf versions prior to v4 are no longer supported",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "glob": "^7.1.3"
             },
@@ -39826,18 +38674,16 @@
         },
         "node_modules/ts-node/node_modules/diff": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
-            "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
             "dev": true,
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">=0.3.1"
             }
         },
         "node_modules/tsconfig": {
             "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz",
-            "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/strip-bom": "^3.0.0",
                 "@types/strip-json-comments": "0.0.30",
@@ -39847,9 +38693,8 @@
         },
         "node_modules/tsconfig-paths": {
             "version": "3.15.0",
-            "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
-            "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/json5": "^0.0.29",
                 "json5": "^1.0.2",
@@ -39859,9 +38704,8 @@
         },
         "node_modules/tsconfig-paths/node_modules/json5": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-            "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "minimist": "^1.2.0"
             },
@@ -39871,41 +38715,36 @@
         },
         "node_modules/tsconfig-paths/node_modules/strip-bom": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-            "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/tsconfig/node_modules/strip-bom": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-            "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/tsconfig/node_modules/strip-json-comments": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
-            "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/tslib": {
             "version": "2.6.2",
-            "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
-            "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+            "license": "0BSD"
         },
         "node_modules/tslint": {
             "version": "6.1.3",
-            "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz",
-            "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==",
             "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@babel/code-frame": "^7.0.0",
                 "builtin-modules": "^1.1.1",
@@ -39933,8 +38772,7 @@
         },
         "node_modules/tslint-loader": {
             "version": "3.5.4",
-            "resolved": "https://registry.npmjs.org/tslint-loader/-/tslint-loader-3.5.4.tgz",
-            "integrity": "sha512-jBHNNppXut6SgZ7CsTBh+6oMwVum9n8azbmcYSeMlsABhWWoHwjq631vIFXef3VSd75cCdX3rc6kstsB7rSVVw==",
+            "license": "MIT",
             "dependencies": {
                 "loader-utils": "^1.0.2",
                 "mkdirp": "^0.5.1",
@@ -39948,8 +38786,7 @@
         },
         "node_modules/tslint-loader/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -39957,9 +38794,7 @@
         },
         "node_modules/tslint-loader/node_modules/glob": {
             "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "deprecated": "Glob versions prior to v9 are no longer supported",
+            "license": "ISC",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -39977,8 +38812,7 @@
         },
         "node_modules/tslint-loader/node_modules/json5": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-            "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+            "license": "MIT",
             "dependencies": {
                 "minimist": "^1.2.0"
             },
@@ -39988,8 +38822,7 @@
         },
         "node_modules/tslint-loader/node_modules/loader-utils": {
             "version": "1.4.2",
-            "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
-            "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+            "license": "MIT",
             "dependencies": {
                 "big.js": "^5.2.2",
                 "emojis-list": "^3.0.0",
@@ -40001,8 +38834,7 @@
         },
         "node_modules/tslint-loader/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -40012,8 +38844,7 @@
         },
         "node_modules/tslint-loader/node_modules/mkdirp": {
             "version": "0.5.6",
-            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-            "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+            "license": "MIT",
             "dependencies": {
                 "minimist": "^1.2.6"
             },
@@ -40023,9 +38854,7 @@
         },
         "node_modules/tslint-loader/node_modules/rimraf": {
             "version": "2.7.1",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-            "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
-            "deprecated": "Rimraf versions prior to v4 are no longer supported",
+            "license": "ISC",
             "dependencies": {
                 "glob": "^7.1.3"
             },
@@ -40035,16 +38864,14 @@
         },
         "node_modules/tslint-loader/node_modules/semver": {
             "version": "5.7.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
-            "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver"
             }
         },
         "node_modules/tslint/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -40052,22 +38879,18 @@
         },
         "node_modules/tslint/node_modules/commander": {
             "version": "2.20.3",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+            "license": "MIT"
         },
         "node_modules/tslint/node_modules/diff": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
-            "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">=0.3.1"
             }
         },
         "node_modules/tslint/node_modules/glob": {
             "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "deprecated": "Glob versions prior to v9 are no longer supported",
+            "license": "ISC",
             "dependencies": {
                 "fs.realpath": "^1.0.0",
                 "inflight": "^1.0.4",
@@ -40085,8 +38908,7 @@
         },
         "node_modules/tslint/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
             },
@@ -40096,8 +38918,7 @@
         },
         "node_modules/tslint/node_modules/mkdirp": {
             "version": "0.5.6",
-            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-            "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+            "license": "MIT",
             "dependencies": {
                 "minimist": "^1.2.6"
             },
@@ -40107,29 +38928,25 @@
         },
         "node_modules/tslint/node_modules/semver": {
             "version": "5.7.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
-            "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver"
             }
         },
         "node_modules/tslint/node_modules/tslib": {
             "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-            "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+            "license": "0BSD"
         },
         "node_modules/tsscmp": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
-            "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.6.x"
             }
         },
         "node_modules/tsutils": {
             "version": "2.29.0",
-            "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
-            "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
+            "license": "MIT",
             "dependencies": {
                 "tslib": "^1.8.1"
             },
@@ -40139,13 +38956,11 @@
         },
         "node_modules/tsutils/node_modules/tslib": {
             "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-            "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+            "license": "0BSD"
         },
         "node_modules/tuf-js": {
             "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz",
-            "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==",
+            "license": "MIT",
             "dependencies": {
                 "@tufjs/models": "2.0.1",
                 "debug": "^4.3.4",
@@ -40157,16 +38972,14 @@
         },
         "node_modules/tunnel": {
             "version": "0.0.6",
-            "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
-            "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
             }
         },
         "node_modules/tunnel-agent": {
             "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-            "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "safe-buffer": "^5.0.1"
             },
@@ -40176,26 +38989,22 @@
         },
         "node_modules/turf-jsts": {
             "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/turf-jsts/-/turf-jsts-1.2.3.tgz",
-            "integrity": "sha512-Ja03QIJlPuHt4IQ2FfGex4F4JAr8m3jpaHbFbQrgwr7s7L6U8ocrHiF3J1+wf9jzhGKxvDeaCAnGDot8OjGFyA=="
+            "license": "(EDL-1.0 OR EPL-1.0)"
         },
         "node_modules/tweakpane": {
             "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/tweakpane/-/tweakpane-4.0.3.tgz",
-            "integrity": "sha512-BlcWOAe8oe4c+k9pmLBARGdWB6MVZMszayekkixQXTgkxTaYoTUpHpwVEp+3HkoamZkomodpbBf0CkguIHTgLg==",
+            "license": "MIT",
             "funding": {
                 "url": "https://github.com/sponsors/cocopon"
             }
         },
         "node_modules/tweetnacl": {
             "version": "0.14.5",
-            "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-            "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
+            "license": "Unlicense"
         },
         "node_modules/type-check": {
             "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-            "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+            "license": "MIT",
             "dependencies": {
                 "prelude-ls": "^1.2.1"
             },
@@ -40203,21 +39012,9 @@
                 "node": ">= 0.8.0"
             }
         },
-        "node_modules/type-fest": {
-            "version": "0.20.2",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-            "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
         "node_modules/type-is": {
             "version": "1.6.18",
-            "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
-            "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+            "license": "MIT",
             "dependencies": {
                 "media-typer": "0.3.0",
                 "mime-types": "~2.1.24"
@@ -40228,9 +39025,8 @@
         },
         "node_modules/typed-array-buffer": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
-            "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "es-errors": "^1.3.0",
@@ -40242,9 +39038,8 @@
         },
         "node_modules/typed-array-byte-length": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
-            "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "for-each": "^0.3.3",
@@ -40261,9 +39056,8 @@
         },
         "node_modules/typed-array-byte-offset": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
-            "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "available-typed-arrays": "^1.0.7",
                 "call-bind": "^1.0.7",
@@ -40281,9 +39075,8 @@
         },
         "node_modules/typed-array-length": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
-            "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.7",
                 "for-each": "^0.3.3",
@@ -40301,8 +39094,7 @@
         },
         "node_modules/typescript": {
             "version": "5.4.5",
-            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
-            "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+            "license": "Apache-2.0",
             "bin": {
                 "tsc": "bin/tsc",
                 "tsserver": "bin/tsserver"
@@ -40313,13 +39105,12 @@
         },
         "node_modules/typescript-collections": {
             "version": "1.3.3",
-            "resolved": "https://registry.npmjs.org/typescript-collections/-/typescript-collections-1.3.3.tgz",
-            "integrity": "sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ=="
+            "license": "MIT"
         },
         "node_modules/typescript-eslint": {
             "version": "7.10.0",
-            "integrity": "sha512-thO8nyqptXdfWHQrMJJiJyftpW8aLmwRNs11xA8pSrXneoclFPstQZqXvDWuH1WNL4CHffqHvYUeCHTit6yfhQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@typescript-eslint/eslint-plugin": "7.10.0",
                 "@typescript-eslint/parser": "7.10.0",
@@ -40343,9 +39134,8 @@
         },
         "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": {
             "version": "7.10.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.10.0.tgz",
-            "integrity": "sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==",
             "dev": true,
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "@typescript-eslint/scope-manager": "7.10.0",
                 "@typescript-eslint/types": "7.10.0",
@@ -40371,8 +39161,7 @@
         },
         "node_modules/typescript-language-server": {
             "version": "4.3.3",
-            "resolved": "https://registry.npmjs.org/typescript-language-server/-/typescript-language-server-4.3.3.tgz",
-            "integrity": "sha512-3QLj57Ru9S6zv10sa4z1pA3TIR1Rdkd04Ke0EszbO4fx5PLdlYhlC/PMxwlyxls9wrZs7wPCME1Ru0s1Gabz4Q==",
+            "license": "Apache-2.0",
             "bin": {
                 "typescript-language-server": "lib/cli.mjs"
             },
@@ -40382,31 +39171,26 @@
         },
         "node_modules/typewise": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz",
-            "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==",
+            "license": "MIT",
             "dependencies": {
                 "typewise-core": "^1.2.0"
             }
         },
         "node_modules/typewise-core": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz",
-            "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg=="
+            "license": "MIT"
         },
         "node_modules/typical": {
             "version": "2.6.1",
-            "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
-            "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg=="
+            "license": "MIT"
         },
         "node_modules/uc.micro": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
-            "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="
+            "license": "MIT"
         },
         "node_modules/uid-safe": {
             "version": "2.1.5",
-            "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
-            "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
+            "license": "MIT",
             "dependencies": {
                 "random-bytes": "~1.0.0"
             },
@@ -40416,14 +39200,12 @@
         },
         "node_modules/uid2": {
             "version": "0.0.4",
-            "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
-            "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
+            "license": "MIT"
         },
         "node_modules/unbox-primitive": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
-            "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "has-bigints": "^1.0.2",
@@ -40436,26 +39218,22 @@
         },
         "node_modules/undefsafe": {
             "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
-            "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="
+            "license": "MIT"
         },
         "node_modules/undici-types": {
             "version": "5.26.5",
-            "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
-            "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+            "license": "MIT"
         },
         "node_modules/unicode-canonical-property-names-ecmascript": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
-            "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/unicode-match-property-ecmascript": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
-            "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+            "license": "MIT",
             "dependencies": {
                 "unicode-canonical-property-names-ecmascript": "^2.0.0",
                 "unicode-property-aliases-ecmascript": "^2.0.0"
@@ -40466,24 +39244,21 @@
         },
         "node_modules/unicode-match-property-value-ecmascript": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
-            "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/unicode-property-aliases-ecmascript": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
-            "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4"
             }
         },
         "node_modules/unicode-trie": {
             "version": "0.3.1",
-            "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz",
-            "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==",
+            "license": "MIT",
             "dependencies": {
                 "pako": "^0.2.5",
                 "tiny-inflate": "^1.0.0"
@@ -40491,13 +39266,11 @@
         },
         "node_modules/unicode-trie/node_modules/pako": {
             "version": "0.2.9",
-            "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
-            "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="
+            "license": "MIT"
         },
         "node_modules/unified": {
             "version": "11.0.4",
-            "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
-            "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0",
                 "bail": "^2.0.0",
@@ -40514,18 +39287,15 @@
         },
         "node_modules/unified/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/uninstall": {
             "version": "0.0.0",
-            "resolved": "https://registry.npmjs.org/uninstall/-/uninstall-0.0.0.tgz",
-            "integrity": "sha512-pjP/0+A4gsbDVa8XH/S2GZdT9NPJW8NFMy3GI7HnsWG+NAmFSSj3QidNosXBI9cPtxxNExEDdhKFO6sli8K3mA=="
+            "license": "MIT"
         },
         "node_modules/union-value": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
-            "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+            "license": "MIT",
             "dependencies": {
                 "arr-union": "^3.1.0",
                 "get-value": "^2.0.6",
@@ -40538,8 +39308,7 @@
         },
         "node_modules/unique-filename": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
-            "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
+            "license": "ISC",
             "dependencies": {
                 "unique-slug": "^4.0.0"
             },
@@ -40549,8 +39318,7 @@
         },
         "node_modules/unique-slug": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
-            "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
+            "license": "ISC",
             "dependencies": {
                 "imurmurhash": "^0.1.4"
             },
@@ -40560,8 +39328,7 @@
         },
         "node_modules/unist-util-find-after": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
-            "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0",
                 "unist-util-is": "^6.0.0"
@@ -40573,13 +39340,11 @@
         },
         "node_modules/unist-util-find-after/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/unist-util-is": {
             "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
-            "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -40590,13 +39355,11 @@
         },
         "node_modules/unist-util-is/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/unist-util-position": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
-            "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -40607,13 +39370,11 @@
         },
         "node_modules/unist-util-position/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/unist-util-remove-position": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
-            "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0",
                 "unist-util-visit": "^5.0.0"
@@ -40625,13 +39386,11 @@
         },
         "node_modules/unist-util-remove-position/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/unist-util-stringify-position": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
-            "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^2.0.0"
             },
@@ -40642,8 +39401,7 @@
         },
         "node_modules/unist-util-visit": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
-            "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0",
                 "unist-util-is": "^6.0.0",
@@ -40656,8 +39414,7 @@
         },
         "node_modules/unist-util-visit-parents": {
             "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
-            "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0",
                 "unist-util-is": "^6.0.0"
@@ -40669,52 +39426,45 @@
         },
         "node_modules/unist-util-visit-parents/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/unist-util-visit/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/universal-user-agent": {
             "version": "7.0.2",
-            "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz",
-            "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q=="
+            "license": "ISC"
         },
         "node_modules/universalify": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
-            "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 10.0.0"
             }
         },
         "node_modules/unorm": {
             "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz",
-            "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==",
+            "license": "MIT or GPL-2.0",
             "engines": {
                 "node": ">= 0.4.0"
             }
         },
         "node_modules/unpack-string": {
             "version": "0.0.2",
-            "resolved": "https://registry.npmjs.org/unpack-string/-/unpack-string-0.0.2.tgz",
-            "integrity": "sha512-2ZFjp5aY7QwHE6HAp47RnKYfvgAQ5+NwbKq/ZVtty85RDb3/UaTeCfizo5L/fXzM7UkMP/zDtbV+kGW/iJiK6w=="
+            "license": "MIT"
         },
         "node_modules/unpipe": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-            "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.8"
             }
         },
         "node_modules/update-browserslist-db": {
-            "version": "1.0.16",
-            "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
-            "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==",
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+            "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
             "funding": [
                 {
                     "type": "opencollective",
@@ -40742,16 +39492,14 @@
         },
         "node_modules/uri-js": {
             "version": "4.4.1",
-            "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-            "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "punycode": "^2.1.0"
             }
         },
         "node_modules/url": {
             "version": "0.11.3",
-            "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz",
-            "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==",
+            "license": "MIT",
             "dependencies": {
                 "punycode": "^1.4.1",
                 "qs": "^6.11.2"
@@ -40759,8 +39507,7 @@
         },
         "node_modules/url-loader": {
             "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz",
-            "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==",
+            "license": "MIT",
             "dependencies": {
                 "loader-utils": "^2.0.0",
                 "mime-types": "^2.1.27",
@@ -40785,8 +39532,7 @@
         },
         "node_modules/url-loader/node_modules/schema-utils": {
             "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
-            "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/json-schema": "^7.0.8",
                 "ajv": "^6.12.5",
@@ -40802,8 +39548,7 @@
         },
         "node_modules/url-parse": {
             "version": "1.5.10",
-            "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
-            "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+            "license": "MIT",
             "dependencies": {
                 "querystringify": "^2.1.1",
                 "requires-port": "^1.0.0"
@@ -40811,18 +39556,15 @@
         },
         "node_modules/url-template": {
             "version": "2.0.8",
-            "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
-            "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw=="
+            "license": "BSD"
         },
         "node_modules/url/node_modules/punycode": {
             "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-            "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="
+            "license": "MIT"
         },
         "node_modules/url/node_modules/qs": {
             "version": "6.12.1",
-            "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz",
-            "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==",
+            "license": "BSD-3-Clause",
             "dependencies": {
                 "side-channel": "^1.0.6"
             },
@@ -40835,16 +39577,14 @@
         },
         "node_modules/use-composed-ref": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz",
-            "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==",
+            "license": "MIT",
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
             }
         },
         "node_modules/use-isomorphic-layout-effect": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
-            "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
+            "license": "MIT",
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
             },
@@ -40856,8 +39596,7 @@
         },
         "node_modules/use-latest": {
             "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz",
-            "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==",
+            "license": "MIT",
             "dependencies": {
                 "use-isomorphic-layout-effect": "^1.1.1"
             },
@@ -40872,24 +39611,21 @@
         },
         "node_modules/use-sync-external-store": {
             "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz",
-            "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==",
+            "license": "MIT",
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
             }
         },
         "node_modules/utif2": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/utif2/-/utif2-4.1.0.tgz",
-            "integrity": "sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==",
+            "license": "MIT",
             "dependencies": {
                 "pako": "^1.0.11"
             }
         },
         "node_modules/util": {
             "version": "0.12.5",
-            "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
-            "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+            "license": "MIT",
             "dependencies": {
                 "inherits": "^2.0.3",
                 "is-arguments": "^1.0.4",
@@ -40900,46 +39636,40 @@
         },
         "node_modules/util-deprecate": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-            "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+            "license": "MIT"
         },
         "node_modules/utila": {
             "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
-            "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA=="
+            "license": "MIT"
         },
         "node_modules/utils-merge": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-            "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.4.0"
             }
         },
         "node_modules/utrie": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
-            "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+            "license": "MIT",
             "dependencies": {
                 "base64-arraybuffer": "^1.0.2"
             }
         },
         "node_modules/uuid": {
             "version": "9.0.1",
-            "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
-            "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
             "funding": [
                 "https://github.com/sponsors/broofa",
                 "https://github.com/sponsors/ctavan"
             ],
+            "license": "MIT",
             "bin": {
                 "uuid": "dist/bin/uuid"
             }
         },
         "node_modules/uvu": {
             "version": "0.5.6",
-            "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz",
-            "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==",
+            "license": "MIT",
             "dependencies": {
                 "dequal": "^2.0.0",
                 "diff": "^5.0.0",
@@ -40955,25 +39685,20 @@
         },
         "node_modules/v8-compile-cache": {
             "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz",
-            "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/v8-compile-cache-lib": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
-            "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/valid-url": {
-            "version": "1.0.9",
-            "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz",
-            "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA=="
+            "version": "1.0.9"
         },
         "node_modules/validate-npm-package-license": {
             "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-            "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "spdx-correct": "^3.0.0",
                 "spdx-expression-parse": "^3.0.0"
@@ -40981,8 +39706,7 @@
         },
         "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-            "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+            "license": "MIT",
             "dependencies": {
                 "spdx-exceptions": "^2.1.0",
                 "spdx-license-ids": "^3.0.0"
@@ -40990,45 +39714,38 @@
         },
         "node_modules/validate-npm-package-name": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
-            "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/validate.io-array": {
             "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz",
-            "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg=="
+            "license": "MIT"
         },
         "node_modules/validate.io-function": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz",
-            "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ=="
+            "version": "1.0.2"
         },
         "node_modules/validator": {
             "version": "13.12.0",
-            "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz",
-            "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.10"
             }
         },
         "node_modules/vary": {
             "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-            "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 0.8"
             }
         },
         "node_modules/verror": {
             "version": "1.10.0",
-            "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
-            "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
             "engines": [
                 "node >=0.6.0"
             ],
+            "license": "MIT",
             "dependencies": {
                 "assert-plus": "^1.0.0",
                 "core-util-is": "1.0.2",
@@ -41037,8 +39754,7 @@
         },
         "node_modules/vfile": {
             "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz",
-            "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0",
                 "unist-util-stringify-position": "^4.0.0",
@@ -41051,8 +39767,7 @@
         },
         "node_modules/vfile-location": {
             "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz",
-            "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0",
                 "vfile": "^6.0.0"
@@ -41064,13 +39779,11 @@
         },
         "node_modules/vfile-location/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/vfile-message": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz",
-            "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0",
                 "unist-util-stringify-position": "^4.0.0"
@@ -41082,13 +39795,11 @@
         },
         "node_modules/vfile-message/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/vfile-message/node_modules/unist-util-stringify-position": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-            "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -41099,13 +39810,11 @@
         },
         "node_modules/vfile/node_modules/@types/unist": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-            "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+            "license": "MIT"
         },
         "node_modules/vfile/node_modules/unist-util-stringify-position": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
-            "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+            "license": "MIT",
             "dependencies": {
                 "@types/unist": "^3.0.0"
             },
@@ -41116,8 +39825,7 @@
         },
         "node_modules/victory-vendor": {
             "version": "36.9.2",
-            "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",
-            "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==",
+            "license": "MIT AND ISC",
             "dependencies": {
                 "@types/d3-array": "^3.0.3",
                 "@types/d3-ease": "^3.0.0",
@@ -41137,16 +39845,14 @@
         },
         "node_modules/void-elements": {
             "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
-            "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/vt-pbf": {
             "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz",
-            "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==",
+            "license": "MIT",
             "dependencies": {
                 "@mapbox/point-geometry": "0.1.0",
                 "@mapbox/vector-tile": "^1.3.1",
@@ -41155,14 +39861,12 @@
         },
         "node_modules/w3c-keyname": {
             "version": "2.2.8",
-            "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
-            "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="
+            "license": "MIT"
         },
         "node_modules/w3c-xmlserializer": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
-            "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "xml-name-validator": "^5.0.0"
             },
@@ -41172,21 +39876,22 @@
         },
         "node_modules/walk-up-path": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz",
-            "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA=="
+            "license": "ISC"
         },
         "node_modules/warning": {
             "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
-            "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+            "license": "MIT",
             "dependencies": {
                 "loose-envify": "^1.0.0"
             }
         },
+        "node_modules/wasm-feature-detect": {
+            "version": "1.6.2",
+            "license": "Apache-2.0"
+        },
         "node_modules/watchpack": {
             "version": "2.4.1",
-            "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
-            "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
+            "license": "MIT",
             "dependencies": {
                 "glob-to-regexp": "^0.4.1",
                 "graceful-fs": "^4.1.2"
@@ -41197,17 +39902,15 @@
         },
         "node_modules/wbuf": {
             "version": "1.7.3",
-            "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
-            "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "minimalistic-assert": "^1.0.0"
             }
         },
         "node_modules/web-namespaces": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
-            "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
@@ -41215,37 +39918,32 @@
         },
         "node_modules/web-request": {
             "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/web-request/-/web-request-1.0.7.tgz",
-            "integrity": "sha512-mVySwo0f8FFw77ZCEEjZ93g7SqAvWREj15FefhJgPkkylu7b185N/u3Oa92sNpMdhjcErGB7oGpOkAAIvflSjw==",
+            "license": "MIT",
             "dependencies": {
                 "request": "^2.69.0"
             }
         },
         "node_modules/web-streams-polyfill": {
             "version": "3.3.3",
-            "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
-            "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
+            "license": "MIT",
             "engines": {
                 "node": ">= 8"
             }
         },
         "node_modules/web-worker": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz",
-            "integrity": "sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA=="
+            "license": "Apache-2.0"
         },
         "node_modules/webidl-conversions": {
             "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
-            "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+            "license": "BSD-2-Clause",
             "engines": {
                 "node": ">=12"
             }
         },
         "node_modules/webpack": {
             "version": "5.91.0",
-            "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz",
-            "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==",
+            "license": "MIT",
             "dependencies": {
                 "@types/eslint-scope": "^3.7.3",
                 "@types/estree": "^1.0.5",
@@ -41290,8 +39988,7 @@
         },
         "node_modules/webpack-cli": {
             "version": "5.1.4",
-            "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
-            "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
+            "license": "MIT",
             "dependencies": {
                 "@discoveryjs/json-ext": "^0.5.0",
                 "@webpack-cli/configtest": "^2.1.1",
@@ -41334,24 +40031,21 @@
         },
         "node_modules/webpack-cli/node_modules/commander": {
             "version": "10.0.1",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
-            "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+            "license": "MIT",
             "engines": {
                 "node": ">=14"
             }
         },
         "node_modules/webpack-cli/node_modules/interpret": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
-            "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10.13.0"
             }
         },
         "node_modules/webpack-cli/node_modules/rechoir": {
             "version": "0.8.0",
-            "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
-            "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
+            "license": "MIT",
             "dependencies": {
                 "resolve": "^1.20.0"
             },
@@ -41361,8 +40055,7 @@
         },
         "node_modules/webpack-dev-middleware": {
             "version": "7.2.1",
-            "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz",
-            "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==",
+            "license": "MIT",
             "dependencies": {
                 "colorette": "^2.0.10",
                 "memfs": "^4.6.0",
@@ -41389,8 +40082,7 @@
         },
         "node_modules/webpack-dev-middleware/node_modules/memfs": {
             "version": "4.9.2",
-            "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.9.2.tgz",
-            "integrity": "sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@jsonjoy.com/json-pack": "^1.0.3",
                 "@jsonjoy.com/util": "^1.1.2",
@@ -41407,8 +40099,7 @@
         },
         "node_modules/webpack-dev-middleware/node_modules/memfs/node_modules/@jsonjoy.com/json-pack": {
             "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz",
-            "integrity": "sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "@jsonjoy.com/base64": "^1.1.1",
                 "@jsonjoy.com/util": "^1.1.2",
@@ -41428,8 +40119,7 @@
         },
         "node_modules/webpack-dev-middleware/node_modules/memfs/node_modules/@jsonjoy.com/util": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.2.0.tgz",
-            "integrity": "sha512-4B8B+3vFsY4eo33DMKyJPlQ3sBMpPFUZK2dr3O3rXrOGKKbYG44J0XSFkDo1VOQiri5HFEhIeVvItjR2xcazmg==",
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=10.0"
             },
@@ -41443,8 +40133,7 @@
         },
         "node_modules/webpack-dev-middleware/node_modules/memfs/node_modules/sonic-forest": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/sonic-forest/-/sonic-forest-1.0.3.tgz",
-            "integrity": "sha512-dtwajos6IWMEWXdEbW1IkEkyL2gztCAgDplRIX+OT5aRKnEd5e7r7YCxRgXZdhRP1FBdOBf8axeTPhzDv8T4wQ==",
+            "license": "Apache-2.0",
             "dependencies": {
                 "tree-dump": "^1.0.0"
             },
@@ -41461,9 +40150,8 @@
         },
         "node_modules/webpack-dev-server": {
             "version": "5.0.4",
-            "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz",
-            "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/bonjour": "^3.5.13",
                 "@types/connect-history-api-fallback": "^1.5.4",
@@ -41520,17 +40208,15 @@
         },
         "node_modules/webpack-dev-server/node_modules/ipaddr.js": {
             "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
-            "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 10"
             }
         },
         "node_modules/webpack-hot-middleware": {
             "version": "2.26.1",
-            "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz",
-            "integrity": "sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-html-community": "0.0.8",
                 "html-entities": "^2.1.0",
@@ -41539,8 +40225,7 @@
         },
         "node_modules/webpack-merge": {
             "version": "5.10.0",
-            "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
-            "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
+            "license": "MIT",
             "dependencies": {
                 "clone-deep": "^4.0.1",
                 "flat": "^5.0.2",
@@ -41552,16 +40237,14 @@
         },
         "node_modules/webpack-sources": {
             "version": "3.2.3",
-            "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
-            "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+            "license": "MIT",
             "engines": {
                 "node": ">=10.13.0"
             }
         },
         "node_modules/webpack/node_modules/eslint-scope": {
             "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-            "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+            "license": "BSD-2-Clause",
             "dependencies": {
                 "esrecurse": "^4.3.0",
                 "estraverse": "^4.1.1"
@@ -41572,16 +40255,14 @@
         },
         "node_modules/webpack/node_modules/estraverse": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-            "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+            "license": "BSD-2-Clause",
             "engines": {
                 "node": ">=4.0"
             }
         },
         "node_modules/webpack/node_modules/schema-utils": {
             "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
-            "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+            "license": "MIT",
             "dependencies": {
                 "@types/json-schema": "^7.0.8",
                 "ajv": "^6.12.5",
@@ -41597,9 +40278,8 @@
         },
         "node_modules/websocket-driver": {
             "version": "0.7.4",
-            "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
-            "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
             "dev": true,
+            "license": "Apache-2.0",
             "dependencies": {
                 "http-parser-js": ">=0.5.1",
                 "safe-buffer": ">=5.1.0",
@@ -41611,18 +40291,16 @@
         },
         "node_modules/websocket-extensions": {
             "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
-            "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
             "dev": true,
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=0.8.0"
             }
         },
         "node_modules/whatwg-encoding": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
-            "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "iconv-lite": "0.6.3"
             },
@@ -41632,9 +40310,8 @@
         },
         "node_modules/whatwg-encoding/node_modules/iconv-lite": {
             "version": "0.6.3",
-            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-            "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "safer-buffer": ">= 2.1.2 < 3.0.0"
             },
@@ -41644,23 +40321,20 @@
         },
         "node_modules/whatwg-fetch": {
             "version": "3.6.20",
-            "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz",
-            "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg=="
+            "license": "MIT"
         },
         "node_modules/whatwg-mimetype": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
-            "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=18"
             }
         },
         "node_modules/whatwg-url": {
             "version": "14.0.0",
-            "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
-            "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "tr46": "^5.0.0",
                 "webidl-conversions": "^7.0.0"
@@ -41671,13 +40345,11 @@
         },
         "node_modules/when": {
             "version": "3.7.8",
-            "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz",
-            "integrity": "sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw=="
+            "license": "MIT"
         },
         "node_modules/which": {
             "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-            "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+            "license": "ISC",
             "dependencies": {
                 "isexe": "^2.0.0"
             },
@@ -41690,9 +40362,8 @@
         },
         "node_modules/which-boxed-primitive": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
-            "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "is-bigint": "^1.0.1",
                 "is-boolean-object": "^1.1.0",
@@ -41706,9 +40377,8 @@
         },
         "node_modules/which-builtin-type": {
             "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz",
-            "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "function.prototype.name": "^1.1.5",
                 "has-tostringtag": "^1.0.0",
@@ -41732,9 +40402,8 @@
         },
         "node_modules/which-collection": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
-            "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "is-map": "^2.0.3",
                 "is-set": "^2.0.3",
@@ -41750,8 +40419,7 @@
         },
         "node_modules/which-typed-array": {
             "version": "1.1.15",
-            "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
-            "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+            "license": "MIT",
             "dependencies": {
                 "available-typed-arrays": "^1.0.7",
                 "call-bind": "^1.0.7",
@@ -41768,26 +40436,22 @@
         },
         "node_modules/wicked-good-xpath": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz",
-            "integrity": "sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw=="
+            "license": "MIT"
         },
         "node_modules/wide-align": {
             "version": "1.1.5",
-            "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
-            "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+            "license": "ISC",
             "dependencies": {
                 "string-width": "^1.0.2 || 2 || 3 || 4"
             }
         },
         "node_modules/wide-align/node_modules/emoji-regex": {
             "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+            "license": "MIT"
         },
         "node_modules/wide-align/node_modules/string-width": {
             "version": "4.2.3",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+            "license": "MIT",
             "dependencies": {
                 "emoji-regex": "^8.0.0",
                 "is-fullwidth-code-point": "^3.0.0",
@@ -41799,8 +40463,7 @@
         },
         "node_modules/wikijs": {
             "version": "6.4.1",
-            "resolved": "https://registry.npmjs.org/wikijs/-/wikijs-6.4.1.tgz",
-            "integrity": "sha512-fnYyT9ISD9hFgAxFJu7Kzsomz48w7FpvvAfTuArvkMQY1bG9JPXoyURqUzYGcQA8FCq6MuZfjqT/6hP8Mh4hQA==",
+            "license": "MIT",
             "dependencies": {
                 "cross-fetch": "^3.0.2",
                 "hyntax": "^1.1.9",
@@ -41816,13 +40479,11 @@
         },
         "node_modules/wildcard": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
-            "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ=="
+            "license": "MIT"
         },
         "node_modules/with": {
             "version": "7.0.2",
-            "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
-            "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/parser": "^7.9.6",
                 "@babel/types": "^7.9.6",
@@ -41835,16 +40496,14 @@
         },
         "node_modules/word-wrap": {
             "version": "1.2.5",
-            "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
-            "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
         "node_modules/words-to-numbers": {
             "version": "1.5.1",
-            "resolved": "https://registry.npmjs.org/words-to-numbers/-/words-to-numbers-1.5.1.tgz",
-            "integrity": "sha512-uvz7zSCKmmA7o5f5zp4Z5l24RQhy6HSNu10URhNxQWv1I82RsFaZX3qD07RLFUMJsCV38oAuaca13AvhO+9yGw==",
+            "license": "MIT",
             "dependencies": {
                 "babel-runtime": "6.x.x",
                 "clj-fuzzy": "^0.3.2",
@@ -41853,8 +40512,7 @@
         },
         "node_modules/wordwrapjs": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
-            "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+            "license": "MIT",
             "dependencies": {
                 "reduce-flatten": "^1.0.1",
                 "typical": "^2.6.1"
@@ -41865,14 +40523,12 @@
         },
         "node_modules/workerpool": {
             "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
-            "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
-            "dev": true
+            "dev": true,
+            "license": "Apache-2.0"
         },
         "node_modules/wrap-ansi": {
             "version": "8.1.0",
-            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
-            "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^6.1.0",
                 "string-width": "^5.0.1",
@@ -41888,18 +40544,22 @@
         "node_modules/wrap-ansi-cjs": {
             "name": "wrap-ansi",
             "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-            "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^4.0.0",
                 "string-width": "^4.1.0",
                 "strip-ansi": "^6.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
             }
         },
         "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+            "license": "MIT",
             "dependencies": {
                 "color-convert": "^2.0.1"
             },
@@ -41912,8 +40572,7 @@
         },
         "node_modules/wrap-ansi-cjs/node_modules/color-convert": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+            "license": "MIT",
             "dependencies": {
                 "color-name": "~1.1.4"
             },
@@ -41923,18 +40582,15 @@
         },
         "node_modules/wrap-ansi-cjs/node_modules/color-name": {
             "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+            "license": "MIT"
         },
         "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
             "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+            "license": "MIT"
         },
         "node_modules/wrap-ansi-cjs/node_modules/string-width": {
             "version": "4.2.3",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+            "license": "MIT",
             "dependencies": {
                 "emoji-regex": "^8.0.0",
                 "is-fullwidth-code-point": "^3.0.0",
@@ -41946,8 +40602,7 @@
         },
         "node_modules/wrap-ansi/node_modules/ansi-regex": {
             "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-            "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=12"
             },
@@ -41957,8 +40612,7 @@
         },
         "node_modules/wrap-ansi/node_modules/ansi-styles": {
             "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
-            "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+            "license": "MIT",
             "engines": {
                 "node": ">=12"
             },
@@ -41968,8 +40622,7 @@
         },
         "node_modules/wrap-ansi/node_modules/strip-ansi": {
             "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-            "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+            "license": "MIT",
             "dependencies": {
                 "ansi-regex": "^6.0.1"
             },
@@ -41982,14 +40635,12 @@
         },
         "node_modules/wrappy": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-            "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+            "license": "ISC"
         },
         "node_modules/write": {
             "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
-            "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "mkdirp": "^0.5.1"
             },
@@ -41999,8 +40650,7 @@
         },
         "node_modules/write-file-atomic": {
             "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
-            "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
+            "license": "ISC",
             "dependencies": {
                 "imurmurhash": "^0.1.4",
                 "signal-exit": "^4.0.1"
@@ -42011,9 +40661,8 @@
         },
         "node_modules/write/node_modules/mkdirp": {
             "version": "0.5.6",
-            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-            "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "minimist": "^1.2.6"
             },
@@ -42023,9 +40672,8 @@
         },
         "node_modules/ws": {
             "version": "8.17.0",
-            "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz",
-            "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=10.0.0"
             },
@@ -42044,8 +40692,7 @@
         },
         "node_modules/xhr": {
             "version": "2.6.0",
-            "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
-            "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
+            "license": "MIT",
             "dependencies": {
                 "global": "~4.4.0",
                 "is-function": "^1.0.1",
@@ -42055,22 +40702,19 @@
         },
         "node_modules/xml-name-validator": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
-            "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
             "dev": true,
+            "license": "Apache-2.0",
             "engines": {
                 "node": ">=18"
             }
         },
         "node_modules/xml-parse-from-string": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
-            "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g=="
+            "license": "MIT"
         },
         "node_modules/xml2js": {
             "version": "0.5.0",
-            "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
-            "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
+            "license": "MIT",
             "dependencies": {
                 "sax": ">=0.6.0",
                 "xmlbuilder": "~11.0.0"
@@ -42081,80 +40725,68 @@
         },
         "node_modules/xmlbuilder": {
             "version": "11.0.1",
-            "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
-            "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=4.0"
             }
         },
         "node_modules/xmlchars": {
             "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
-            "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/xmldom-sre": {
             "version": "0.1.31",
-            "resolved": "https://registry.npmjs.org/xmldom-sre/-/xmldom-sre-0.1.31.tgz",
-            "integrity": "sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==",
+            "license": "(LGPL-2.0 or MIT)",
             "engines": {
                 "node": ">=0.1"
             }
         },
         "node_modules/xmlhttprequest-ssl": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
-            "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
             "engines": {
                 "node": ">=0.4.0"
             }
         },
         "node_modules/xoauth2": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/xoauth2/-/xoauth2-1.2.0.tgz",
-            "integrity": "sha512-hKuNbkj3q/ifCcfWnW6KURP+6ExSuLdLG007gasNhMEMKlLaejNkIA6eu5Ol1xPP0/kzTuA87XHDaAcUw5k73Q=="
+            "license": "MIT"
         },
         "node_modules/xregexp": {
             "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.1.tgz",
-            "integrity": "sha512-fKXeVorD+CzWvFs7VBuKTYIW63YD1e1osxwQ8caZ6o1jg6pDAbABDG54LCIq0j5cy7PjRvGIq6sef9DYPXpncg==",
+            "license": "MIT",
             "dependencies": {
                 "@babel/runtime-corejs3": "^7.16.5"
             }
         },
         "node_modules/xtend": {
             "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-            "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=0.4"
             }
         },
         "node_modules/y18n": {
             "version": "5.0.8",
-            "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
-            "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+            "license": "ISC",
             "engines": {
                 "node": ">=10"
             }
         },
         "node_modules/yallist": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-            "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+            "license": "ISC"
         },
         "node_modules/yaml": {
             "version": "1.10.2",
-            "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-            "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+            "license": "ISC",
             "engines": {
                 "node": ">= 6"
             }
         },
         "node_modules/yargs": {
             "version": "16.2.0",
-            "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
-            "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+            "license": "MIT",
             "dependencies": {
                 "cliui": "^7.0.2",
                 "escalade": "^3.1.1",
@@ -42170,17 +40802,15 @@
         },
         "node_modules/yargs-parser": {
             "version": "20.2.9",
-            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-            "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+            "license": "ISC",
             "engines": {
                 "node": ">=10"
             }
         },
         "node_modules/yargs-unparser": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
-            "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "camelcase": "^6.0.0",
                 "decamelize": "^4.0.0",
@@ -42193,22 +40823,19 @@
         },
         "node_modules/yargs-unparser/node_modules/is-plain-obj": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
-            "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
         "node_modules/yargs/node_modules/emoji-regex": {
             "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+            "license": "MIT"
         },
         "node_modules/yargs/node_modules/string-width": {
             "version": "4.2.3",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+            "license": "MIT",
             "dependencies": {
                 "emoji-regex": "^8.0.0",
                 "is-fullwidth-code-point": "^3.0.0",
@@ -42220,17 +40847,15 @@
         },
         "node_modules/yn": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
-            "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
         "node_modules/yocto-queue": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
-            "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
+            "license": "MIT",
             "engines": {
                 "node": ">=12.20"
             },
@@ -42240,8 +40865,7 @@
         },
         "node_modules/zip-stream": {
             "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz",
-            "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==",
+            "license": "MIT",
             "dependencies": {
                 "archiver-utils": "^5.0.0",
                 "compress-commons": "^6.0.2",
@@ -42251,10 +40875,16 @@
                 "node": ">= 14"
             }
         },
+        "node_modules/zlibjs": {
+            "version": "0.3.1",
+            "license": "MIT",
+            "engines": {
+                "node": "*"
+            }
+        },
         "node_modules/zwitch": {
             "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
-            "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+            "license": "MIT",
             "funding": {
                 "type": "github",
                 "url": "https://github.com/sponsors/wooorm"
diff --git a/package.json b/package.json
index ad4058d5a..d0b7324e6 100644
--- a/package.json
+++ b/package.json
@@ -139,6 +139,7 @@
         "@types/webpack-hot-middleware": "^2.25.9",
         "@typescript-eslint/parser": "^7.8.0",
         "@webscopeio/react-textarea-autocomplete": "^4.9.2",
+        "D": "^1.0.0",
         "adm-zip": "^0.5.10",
         "archiver": "^7.0.1",
         "async": "^3.2.5",
@@ -175,7 +176,6 @@
         "csv-parser": "^3.0.0",
         "csv-stringify": "^6.4.4",
         "csvtojson": "^2.0.10",
-        "D": "^1.0.0",
         "d3": "^7.8.5",
         "depcheck": "^1.4.7",
         "dotenv": "^16.3.1",
@@ -307,6 +307,7 @@
         "stream-browserify": "^3.0.0",
         "styled-components": "^6.1.1",
         "supercluster": "^8.0.1",
+        "tesseract.js": "^5.1.0",
         "textarea-caret": "^3.1.0",
         "tough-cookie": "^4.1.3",
         "tslint": "^6.1.3",
diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index 0a4dc2423..1bec2fb11 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -32,7 +32,7 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
         model: 'gpt-4o',
         maxTokens: 2048,
         temp: 0.7,
-        prompt: 'Create a stack of flashcards out of this text with each question and answer labeled as question and answer. For some questions, ask "what is this image of" and write a keyword that represents the image and label it "keyword". Otherwise, write none. Do not label each flashcard and do not include asterisks.',
+        prompt: 'Create a stack of flashcards out of this text with each question and answer labeled as question and answer. For some questions, ask "what is this image of" but tailored to stacks theme and the image and write a keyword that represents the image and label it "keyword". Otherwise, write none. Do not label each flashcard and do not include asterisks.',
     },
     completion: { model: 'gpt-4-turbo', maxTokens: 256, temp: 0.5, prompt: "You are a helpful assistant. Answer the user's prompt." },
     mermaid: {
@@ -63,8 +63,8 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
     },
     pronunciation: {
         model: 'gpt-4-turbo',
-        maxTokens: 4096,
-        temp: 0.3,
+        maxTokens: 1024,
+        temp: 0.3, //0.3
         prompt: '',
     },
 };
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index b28ef24ec..0c42f662b 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -250,9 +250,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         // console.log('PHONETIC TRANSCRIPTION: ' + DocCast(this._audio)[DocData]);
         // this.Document.audio = this._audio;
         console.log('Phonetic transcription: ' + DocCast(this.Document.audio).phoneticTranscription);
-        // const phonTrans = DocCast(this.Document.audio).phoneticTranscription;
-        const phonTrans = 's';
+        const phonTrans = DocCast(this.Document.audio).phoneticTranscription;
+        // const phonTrans = 's';
         if (phonTrans) {
+            // console.log(phonTrans.toString());
             this._inputValue = StrCast(phonTrans);
             console.log('INPUT:' + this._inputValue);
             this.askGPTPhonemes(this._inputValue);
@@ -262,67 +263,50 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     };
 
     askGPTPhonemes = async (phonemes: string) => {
+        const sentence = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
         const phon = 'w ʌ ɪ z j ɔː ɹ n e ɪ m ';
         const phon2 = 'h ʌ ɛ r j ʌ t ʌ d eɪ';
         const phon3 = 'ʃ eɪ oʊ s i ʃ oʊ z b aɪ ð ə s iː ʃ oʊ';
-        const phon4 = 'k a m o e s t a s h ɔi';
-        const phon5 = 'e l s e n a l';
-        const question10 =
-            'Break into syllables by putting some of the phonemes together if they create a syllable or alone if it does not in "ʃ eɪ oʊ s i ʃ oʊ z b a ɪ ð ə s iː ʃ oʊ". Then align the syllables with the words of "she sells sea shells by the sea shore". Multiple syllables can be part of one word. Then consider all possible phonetic transcriptions of "she sells seashells by the sea shore" that is standard in speech without showing the user. Align the phoneme syllables with each word based on what is similar; if it seems like a part of the word is missing, check the phonemes beforehand and after to see if they should be part of that word and reevaluate to see if those phonemes should be a part of that word. Note if a word or sound missing, including missing vowels and consonants. Compare the phonemes in each word with those phonetic transcriptions without displaying anything to the user. phonemes. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference. If there is a sound missing, note that. If nothing is wrong, say "good job" for the word. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and the splitting of words since that is your issue, not the users.';
-        const question11 =
-            "Consider all possible phonetic transcriptions of the sentence 'cómo' as commonly spoken. Compare these with provided phonetic transcriptions: " +
-            phon3 +
-            ". Align phonemes with each word to approximate its pronunciation without revealing details. Ensure correct syllable alignment and identify any missing sounds or mismatched vowels/consonants. Provide feedback per word on pronunciation accuracy. Note specific mismatches or missing sounds, and clarify pronunciation guidelines (e.g., 'i' sounds like 'ee'). Just so you know, 'i' sounds like 'ee' as in 'bee', not 'ih' as an 'lick'. Interpret 'ɹ' as the same as 'r'. Interpret 'ʌ' as the same as 'ə'. If 'ɚ', 'ɔː', and 'ɔ' are options for pronunciation, do not choose 'ɚ'. Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence.'";
-        const questionEng =
-            'Consider all possible phonetic transcriptions of the intended sentence “vamos por un café" that is standard in speech without showing the user. Compare the phonemes in each word with those phonetic transcriptions without displaying anything to the user: "' +
+        const phon4 = 'kamo estas hɔi';
+        const phon5 = 'la s e n a l';
+        console.log('REG' + this.recognition.lang);
+        const promptEng =
+            'Consider all possible phonetic transcriptions of the intended sentence "' +
+            sentence +
+            '" that is standard in American speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
             phonemes +
-            '". Steps to do this: Align the list phonemes with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Individual phonemes can represent a word - they do not have to be combined. If it seems like a part of the word is missing, check the phonemes beforehand and after to see if they should instead be part of that word and reevaluate to see if those phonemes should be a part of that word; consider syllables of the words to do this alignment but do not process the letters in the wrong order. Do not use the same instance of a letter twice for the words - figure out where it belongs by evaluating which combinations with the letters before and after match better. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. If there is a sound missing, note that. If nothing is wrong, say "good job" for the word. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence.';
-        const question =
-            'Consider all possible phonetic transcriptions of the intended sentence “la señal" that is standard in Spanish speech without showing the user. Compare the phonemes in each word with those phonetic transcriptions without displaying anything to the user: "' +
-            phon5 +
-            '". Steps to do this: Align the list phonemes with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Individual phonemes can represent a word - they do not have to be combined. If it seems like a part of the word is missing, check the phonemes beforehand and after to see if they should instead be part of that word and reevaluate to see if those phonemes should be a part of that word; consider syllables of the words to do this alignment but do not process the letters in the wrong order. Only combine phonemes that are next to each other and do not take phonemes out of order. For example, if "al" is at the end, it should not be matched to "la" in the beginning. Do not use the same instance of a letter twice for the words - figure out where it belongs by evaluating which combinations with the letters before and after match better. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in Spanish speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. If there is a sound missing, note that. If nothing is wrong, say "good job" for the word. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable.';
-        const questionL =
-            'Consider all possible phonetic transcriptions of "she sells seashells by the sea shore" that is standard in speech without showing the user. Align the phonemes with each word based on what is similar in order; if it seems like a part of the word is missing, check the phonemes beforehand and after to see if they should be part of that word and reevaluate to see if those phonemes should be a part of that word; consider syllables of the words to do this alignment but do not process the letters in the wrong order. Note if a word or sound missing, including missing vowels and consonants. Compare the phonemes in each word with those phonetic transcriptions without displaying anything to the user: "' +
-            'ʃ eɪ oʊ s i ʃ oʊ z b aɪ ð ə s iː ʃ oʊ' +
-            '". If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference. If there is a sound missing, note that. If nothing is wrong, say "good job" for the word. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə" - do not distinguish between the schwa and "ʌ". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this.';
-        const question5 =
-            'Consider all possible phonetic transcriptions of "how are you today" that is standard in speech without showing the user. Compare these phonemes with those phonetic transcriptions without displaying anything to the user: "' +
+            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart. The goal is to be understood, not sound like a native speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "ceeffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
+        const promptSpa =
+            'Consider all possible phonetic transcriptions of the intended sentence "' +
+            'como estás hoy' +
+            '" that is standard in Spanish speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
+            phon4 +
+            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in Spanish speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound.  Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart; say good job if it would be understood by a native Spanish speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Identify "ɔi" sounds like "oy". Ignore accents and do not say anything to the user about this.';
+        const promptAll =
+            'Consider all possible phonetic transcriptions of the intended sentence "' +
+            sentence +
+            '" that is standard in ' +
+            this.convertAbr() +
+            ' speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
             phonemes +
-            '". If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat, note this difference. If not, say "good job" for the word. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r".';
-        const question4 =
-            'Match the following phonemes as words with each word in "what is your name" without displaying this to the user: "w ɛ t ɪ z j i ɹ n eɪ m ". If everything is correct, return only "good job" with no other notes. Note if a letter is added or missing if that letter changes the meaning. If a letter does not match the real phonetic transcription of the phrase, note this only if the letters are not allophones of the same phoneme and if they are far away from each other on the vowel chart.';
-        const question0 = 'These phonemes should match "what is your name": ' + phon + 'Use the structure of this response as guidance: "Your pronunciation of the vowel in "what" is not front enough. It should be pronounced like /uh/."';
-        const question3 =
-            'Match the following phonemes as words with each word in "what is your name" without displaying this to the user and there will be spaces between diphthongs and colons so treat it like they are together: ' +
-            phon +
-            '.  If everything is correct, return only "good job" with no other notes. Note if a letter is added or missing if that letter changes the meaning. If mismatching sounds are not allophones of the same phoneme and they are far away from each other on the vowel chart, describe the difference. For the mismatches, use the structure of this response as guidance: "Your pronunciation of the vowel in "what" is not pronounced correctly. It should be pronounced like /uh/." Do not list anything that is correct.';
-        const question1 =
-            'Consider all phonetic transcriptions of "what is your name" with different vowel pronunications. Compares these phonemes with that phonetic transcription: ' +
-            phonemes +
-            '. If the differences are not allophones of the same phoneme and they are far away from each other on the vowel chart, list the difference. If it is missing or added a letter, say that.';
-        //Only describe sound changes that will change the meaning drastically. Provide two sentences describing this. Do not list differences that do not change the meaning.';
-        const question2 = 'Is this a valid phonetic transcription of the phrase "what is your name": ' + phonemes + '.';
-        // If the difference found will definitely make the word be not understood and change the meaning, then list it. If the difference is minimal or the sound matches, do not list it.';
-        //These phonemes are supposed to match the pronunciation of ' +
-        //'hello: ' +
-        //phonemes +
-        //'. If there is a difference in sound that would change the meaning of the word or sentence, such as "pen" vs. "pin", describe that. Otherwise say "good job."';
-        // Identify any differences in pronunciation that would change the meaning of the intended word or sentence and only list differences that would change the meaning. If there are no major differences, say "Good job." If there are differences, describe it in terms of sounds in sentences.';
-        // const question =
-        //     'These phonemes are supposed to match the pronunciation of ' +
-        //     StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text) +
-        //     '. Identify any differences in pronunciation that would change the meaning of the intended word or sentence.';
-        console.log(question);
-        const res = await gptAPICall(question, GPTCallType.PRONUNCIATION);
-        console.log('GPT: ' + res);
-        if (!res) {
-            console.error('GPT call failed');
-            return;
+            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in ' +
+            this.convertAbr() +
+            ' speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "cawffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
+
+        switch (this.recognition.lang) {
+            case 'en-US':
+                console.log('English');
+                this._outputValue = await gptAPICall(promptEng, GPTCallType.PRONUNCIATION);
+                break;
+            case 'es-ES':
+                console.log('Spanish');
+                this._outputValue = await gptAPICall(promptSpa, GPTCallType.PRONUNCIATION);
+                break;
+            default:
+                console.log('All');
+                this._outputValue = await gptAPICall(promptAll, GPTCallType.PRONUNCIATION);
+                break;
         }
-        // const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
-        // const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
-        // const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
-        // this._loading = true;
     };
 
     pushInfo = async () => {
@@ -754,13 +738,32 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this._listening = false;
     };
 
-    openContextMenu = (x: number, y: number) => {
+    convertAbr = () => {
+        switch (this.recognition.lang) {
+            case 'en-US':
+                return 'English';
+            case 'es-ES':
+                return 'Spanish';
+            case 'fr-FR':
+                return 'French';
+            case 'it-IT':
+                return 'Italian';
+            case 'zh-CH':
+                return 'Mandarin Chinese';
+            case 'ja':
+                return 'Japanese';
+            default:
+                return 'Korean';
+        }
+    };
+
+    openContextMenu = (x: number, y: number, evalu: boolean) => {
         ContextMenu.Instance.clearItems();
         ContextMenu.Instance.addItem({ description: 'English', event: e => this.setLanguage(e, 'en-US', 0) }); //prettier-ignore
         ContextMenu.Instance.addItem({ description: 'Spanish', event: e => this.setLanguage(e, 'es-ES', 1 )}); //prettier-ignore
         ContextMenu.Instance.addItem({ description: 'French', event: e => this.setLanguage(e, 'fr-FR', 2) }); //prettier-ignore
         ContextMenu.Instance.addItem({ description: 'Italian', event: e => this.setLanguage(e, 'it-IT', 3) }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Mandarin Chinese', event: e => this.setLanguage(e, 'zh-CH', 4) }); //prettier-ignore
+        if (!evalu) ContextMenu.Instance.addItem({ description: 'Mandarin Chinese', event: e => this.setLanguage(e, 'zh-CH', 4) }); //prettier-ignore
         ContextMenu.Instance.addItem({ description: 'Japanese', event: e => this.setLanguage(e, 'ja', 5) }); //prettier-ignore
         ContextMenu.Instance.addItem({ description: 'Korean', event: e => this.setLanguage(e, 'ko', 6) }); //prettier-ignore
         ContextMenu.Instance.displayMenu(x, y);
@@ -911,13 +914,19 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             <div className="submit-button" style={{ overflow: 'hidden', display: 'flex', width: '100%' }}>
                                 <div
                                     className="submit-buttonschema-header-button"
-                                    onPointerDown={e => this.openContextMenu(e.clientX, e.clientY)}
+                                    onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, false)}
                                     style={{ position: 'absolute', top: '5px', left: '11px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
                                     <FontAwesomeIcon color={'white'} icon="caret-down" />
                                 </div>
                                 <button className="submit-buttonrecord" onClick={this._listening ? this.stopListening : this.startListening} style={{ background: this._listening ? 'lightgray' : '', borderRadius: '2px' }}>
                                     {<FontAwesomeIcon icon="microphone" size="lg" />}
                                 </button>
+                                <div
+                                    className="submit-buttonschema-header-button"
+                                    onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, true)}
+                                    style={{ position: 'absolute', top: '5px', left: '50px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
+                                    <FontAwesomeIcon color={'white'} icon="caret-down" />
+                                </div>
                                 <button
                                     className="submit-buttonpronunciation"
                                     onClick={this.evaluatePronunciation}
@@ -930,7 +939,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                         Submit
                                     </button>
                                 ) : (
-                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
+                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderClick} style={{ display: 'inline-flex', alignItems: 'center', borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
                                         Redo the Question
                                     </button>
                                 )}
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index ab7605829..faf96d616 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -11,7 +11,6 @@ import { DocData } from '../../../fields/DocSymbols';
 import { Id } from '../../../fields/FieldSymbols';
 import { InkTool } from '../../../fields/InkField';
 import { ObjectField } from '../../../fields/ObjectField';
-import { Cast, ImageCast, NumCast, StrCast } from '../../../fields/Types';
 import { ImageField } from '../../../fields/URLField';
 import { TraceMobx } from '../../../fields/util';
 import { emptyFunction } from '../../../Utils';
@@ -33,6 +32,7 @@ import { StyleProp } from '../StyleProp';
 import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FocusViewOptions } from './FocusViewOptions';
+import { DocCast, NumCast, RTFCast, StrCast, ImageCast, Cast, toList } from '../../../fields/Types';
 import './ImageBox.scss';
 import { OpenWhere } from './OpenWhere';
 import { URLField } from '../../../fields/URLField';
@@ -43,7 +43,9 @@ import { basename } from 'path';
 import { ImageUtility } from './generativeFill/generativeFillUtils/ImageHandler';
 import { dropActionType } from '../../util/DropActionTypes';
 import { canvasSize } from './generativeFill/generativeFillUtils/generativeFillConstants';
+import Tesseract from 'tesseract.js';
 import axios from 'axios';
+import { TupleType } from 'typescript';
 
 export class ImageEditorData {
     // eslint-disable-next-line no-use-before-define
@@ -354,6 +356,49 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         }
     };
 
+    pushInfo = async () => {
+        const formData = new FormData();
+
+        const img = {
+            file: this.paths[0],
+        };
+        const response = await axios.post('http://localhost:105/labels/', img, {
+            headers: {
+                'Content-Type': 'application/json',
+            },
+        });
+
+        console.log('RESPONSE:');
+        console.log(response.data['boxes']);
+        console.log(response.data['text']);
+        this.createBoxes(response.data['boxes'], response.data['text']);
+    };
+
+    createBoxes = (boxes: [[[number, number]]], texts: [string]) => {
+        for (var i = 0; i < boxes.length; i++) {
+            const coords = boxes[i] ? boxes[i] : [];
+            const width = coords[1][0] - coords[0][0];
+            const height = coords[2][1] - coords[0][1];
+            const text = texts[i];
+
+            const newCol = Docs.Create.TextDocument('', {
+                _width: width,
+                //width * NumCast(this.dataDoc[this.fieldKey + '_nativeWidth']),
+                _height: height,
+                //height * NumCast(this.dataDoc[this.fieldKey + '_nativeHeight']),
+                _layout_fitWidth: true,
+                // _layout_autoHeight: true,
+            });
+            newCol.x = coords[0][0];
+            newCol.y = coords[0][1];
+            // newCol.x = x * NumCast(this.dataDoc[this.fieldKey + '_nativeWidth']);
+            // newCol.y = y * NumCast(this.dataDoc[this.fieldKey + '_nativeHeight']);
+            newCol.zIndex = 1000;
+            newCol.forceActive = true;
+            newCol.quiz = text;
+            this.addDocument(newCol);
+        }
+    };
     // static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
     //     try {
     //         const response = await fetch(imageUrl);
@@ -405,6 +450,36 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         this._loading = false;
     };
 
+    getText = () => {
+        console.log(StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text));
+    };
+
+    getImageLabels2 = async () => {
+        this._loading = true;
+        try {
+            // const hrefBase64 = await this.createCanvas();
+            // const hw = await gptImageLabel(hrefBase64, 'Find the image dimensions. Return as height and width.');
+            // const response = await gptImageLabel(
+            //     hrefBase64,
+            //     //'What is the height and width of the image'
+            //     'For each group of words in the image, find the x-coordinate and ycoordinate of the top left corner. Find the width and height of the group. Return this information in this format with the correct information replacing the underscores: "observed word: _, x: _, y: _, width: _, height: _," No additional text, asterisks and put it all in one line. Divide the x and width by the width of the image. Divide the y and the height by the height of the image.'
+            // );
+            // console.log(hw);
+            // console.log('RESPONSE: ' + response);
+            // this.createTextboxes(response);
+            Tesseract.recognize(this.paths[0], 'eng', {
+                logger: m => console.log(m),
+            }).then(({ data: { text, words } }) => {
+                console.log('OCR Result:', text);
+                console.log('Words with bounding boxes:', words);
+            });
+            //AnchorMenu.Instance.transferToFlashcard(response, NumCast(this.layoutDoc['x']), NumCast(this.layoutDoc['y']));
+        } catch (error) {
+            console.log('Error');
+        }
+        this._loading = false;
+    };
+
     createTextboxes = (response: string) => {
         const groups = response.replace('*', '').toLowerCase().split('observed word: ');
         groups.shift();
@@ -450,27 +525,14 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         this._imageRef = iref;
     };
 
-    pushInfo = async () => {
-        const formData = new FormData();
-
-        const newArticle = {
-            file: '/files/audio/6b412a6222d631a7fff8a8320.mp3',
-        };
-        const response = await axios.post('http://localhost:105/recognize/', newArticle, {
-            headers: {
-                'Content-Type': 'application/json',
-            },
-        });
-        console.log('RESPONSE: ' + response.data['transcription']);
-    };
-
     specificContextMenu = (): void => {
         const field = Cast(this.dataDoc[this.fieldKey], ImageField);
         if (field) {
             const funcs: ContextMenuProps[] = [];
             // funcs.push({ description: 'Create ai flashcards', event: () => this.getImageDesc(), icon: 'id-card' });
-            // funcs.push({ description: 'Push info', event: this.pushInfo, icon: 'redo-alt' });
-            funcs.push({ description: 'Get Labels', event: this.getImageLabels, icon: 'redo-alt' });
+            funcs.push({ description: 'Push info', event: this.pushInfo, icon: 'redo-alt' });
+            // funcs.push({ description: 'Get Labels2', event: this.getImageLabels2, icon: 'redo-alt' });
+            // funcs.push({ description: 'Get Labels', event: this.getImageLabels, icon: 'redo-alt' });
             funcs.push({ description: 'Rotate Clockwise 90', event: this.rotate, icon: 'redo-alt' });
             funcs.push({ description: `Show ${this.layoutDoc._showFullRes ? 'Dynamic Res' : 'Full Res'}`, event: this.resolution, icon: 'expand' });
             funcs.push({ description: 'Set Native Pixel Size', event: this.setNativeSize, icon: 'expand-arrows-alt' });
diff --git a/src/fields/.PresField.ts.icloud b/src/fields/.PresField.ts.icloud
new file mode 100644
index 000000000..e63a55cc1
Binary files /dev/null and b/src/fields/.PresField.ts.icloud differ
-- 
cgit v1.2.3-70-g09d2


From 0b2a8c0d718940ddc06a966d4e027a79bb06ed6e Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Fri, 19 Jul 2024 15:11:29 -0400
Subject: simple image label

---
 package-lock.json                        | 3811 ++++++++++--------------------
 package.json                             |    3 +-
 src/client/views/nodes/ComparisonBox.tsx |    1 +
 src/client/views/nodes/ImageBox.scss     |   18 +
 src/client/views/nodes/ImageBox.tsx      |  179 +-
 5 files changed, 1316 insertions(+), 2696 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/package-lock.json b/package-lock.json
index c232c8acf..683996e33 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -219,6 +219,7 @@
                 "socket.io-client": "^4.7.2",
                 "standard-http-error": "^2.0.1",
                 "stream-browserify": "^3.0.0",
+                "string-similarity": "^4.0.4",
                 "styled-components": "^6.1.1",
                 "supercluster": "^8.0.1",
                 "tesseract.js": "^5.1.0",
@@ -2804,10 +2805,6 @@
                 "url": "https://github.com/chalk/strip-ansi?sponsor=1"
             }
         },
-        "node_modules/@isaacs/string-locale-compare": {
-            "version": "1.1.0",
-            "license": "ISC"
-        },
         "node_modules/@jest/schemas": {
             "version": "29.6.3",
             "license": "MIT",
@@ -3720,467 +3717,6 @@
                 "node": ">= 8"
             }
         },
-        "node_modules/@npmcli/agent": {
-            "version": "2.2.2",
-            "license": "ISC",
-            "dependencies": {
-                "agent-base": "^7.1.0",
-                "http-proxy-agent": "^7.0.0",
-                "https-proxy-agent": "^7.0.1",
-                "lru-cache": "^10.0.1",
-                "socks-proxy-agent": "^8.0.3"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/agent/node_modules/agent-base": {
-            "version": "7.1.1",
-            "license": "MIT",
-            "dependencies": {
-                "debug": "^4.3.4"
-            },
-            "engines": {
-                "node": ">= 14"
-            }
-        },
-        "node_modules/@npmcli/agent/node_modules/https-proxy-agent": {
-            "version": "7.0.4",
-            "license": "MIT",
-            "dependencies": {
-                "agent-base": "^7.0.2",
-                "debug": "4"
-            },
-            "engines": {
-                "node": ">= 14"
-            }
-        },
-        "node_modules/@npmcli/agent/node_modules/lru-cache": {
-            "version": "10.2.2",
-            "license": "ISC",
-            "engines": {
-                "node": "14 || >=16.14"
-            }
-        },
-        "node_modules/@npmcli/arborist": {
-            "version": "7.5.2",
-            "license": "ISC",
-            "dependencies": {
-                "@isaacs/string-locale-compare": "^1.1.0",
-                "@npmcli/fs": "^3.1.1",
-                "@npmcli/installed-package-contents": "^2.1.0",
-                "@npmcli/map-workspaces": "^3.0.2",
-                "@npmcli/metavuln-calculator": "^7.1.1",
-                "@npmcli/name-from-folder": "^2.0.0",
-                "@npmcli/node-gyp": "^3.0.0",
-                "@npmcli/package-json": "^5.1.0",
-                "@npmcli/query": "^3.1.0",
-                "@npmcli/redact": "^2.0.0",
-                "@npmcli/run-script": "^8.1.0",
-                "bin-links": "^4.0.4",
-                "cacache": "^18.0.3",
-                "common-ancestor-path": "^1.0.1",
-                "hosted-git-info": "^7.0.2",
-                "json-parse-even-better-errors": "^3.0.2",
-                "json-stringify-nice": "^1.1.4",
-                "lru-cache": "^10.2.2",
-                "minimatch": "^9.0.4",
-                "nopt": "^7.2.1",
-                "npm-install-checks": "^6.2.0",
-                "npm-package-arg": "^11.0.2",
-                "npm-pick-manifest": "^9.0.1",
-                "npm-registry-fetch": "^17.0.1",
-                "pacote": "^18.0.6",
-                "parse-conflict-json": "^3.0.0",
-                "proc-log": "^4.2.0",
-                "proggy": "^2.0.0",
-                "promise-all-reject-late": "^1.0.0",
-                "promise-call-limit": "^3.0.1",
-                "read-package-json-fast": "^3.0.2",
-                "semver": "^7.3.7",
-                "ssri": "^10.0.6",
-                "treeverse": "^3.0.0",
-                "walk-up-path": "^3.0.1"
-            },
-            "bin": {
-                "arborist": "bin/index.js"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/arborist/node_modules/abbrev": {
-            "version": "2.0.0",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/arborist/node_modules/json-parse-even-better-errors": {
-            "version": "3.0.2",
-            "license": "MIT",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/arborist/node_modules/lru-cache": {
-            "version": "10.2.2",
-            "license": "ISC",
-            "engines": {
-                "node": "14 || >=16.14"
-            }
-        },
-        "node_modules/@npmcli/arborist/node_modules/nopt": {
-            "version": "7.2.1",
-            "license": "ISC",
-            "dependencies": {
-                "abbrev": "^2.0.0"
-            },
-            "bin": {
-                "nopt": "bin/nopt.js"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/arborist/node_modules/semver": {
-            "version": "7.6.2",
-            "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@npmcli/config": {
-            "version": "8.3.2",
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/map-workspaces": "^3.0.2",
-                "ci-info": "^4.0.0",
-                "ini": "^4.1.2",
-                "nopt": "^7.2.1",
-                "proc-log": "^4.2.0",
-                "read-package-json-fast": "^3.0.2",
-                "semver": "^7.3.5",
-                "walk-up-path": "^3.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/config/node_modules/abbrev": {
-            "version": "2.0.0",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/config/node_modules/ci-info": {
-            "version": "4.0.0",
-            "funding": [
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/sibiraj-s"
-                }
-            ],
-            "license": "MIT",
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/@npmcli/config/node_modules/ini": {
-            "version": "4.1.3",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/config/node_modules/nopt": {
-            "version": "7.2.1",
-            "license": "ISC",
-            "dependencies": {
-                "abbrev": "^2.0.0"
-            },
-            "bin": {
-                "nopt": "bin/nopt.js"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/config/node_modules/semver": {
-            "version": "7.6.2",
-            "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@npmcli/fs": {
-            "version": "3.1.1",
-            "license": "ISC",
-            "dependencies": {
-                "semver": "^7.3.5"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/fs/node_modules/semver": {
-            "version": "7.6.2",
-            "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@npmcli/git": {
-            "version": "5.0.7",
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/promise-spawn": "^7.0.0",
-                "lru-cache": "^10.0.1",
-                "npm-pick-manifest": "^9.0.0",
-                "proc-log": "^4.0.0",
-                "promise-inflight": "^1.0.1",
-                "promise-retry": "^2.0.1",
-                "semver": "^7.3.5",
-                "which": "^4.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/git/node_modules/isexe": {
-            "version": "3.1.1",
-            "license": "ISC",
-            "engines": {
-                "node": ">=16"
-            }
-        },
-        "node_modules/@npmcli/git/node_modules/lru-cache": {
-            "version": "10.2.2",
-            "license": "ISC",
-            "engines": {
-                "node": "14 || >=16.14"
-            }
-        },
-        "node_modules/@npmcli/git/node_modules/semver": {
-            "version": "7.6.2",
-            "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@npmcli/git/node_modules/which": {
-            "version": "4.0.0",
-            "license": "ISC",
-            "dependencies": {
-                "isexe": "^3.1.1"
-            },
-            "bin": {
-                "node-which": "bin/which.js"
-            },
-            "engines": {
-                "node": "^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/installed-package-contents": {
-            "version": "2.1.0",
-            "license": "ISC",
-            "dependencies": {
-                "npm-bundled": "^3.0.0",
-                "npm-normalize-package-bin": "^3.0.0"
-            },
-            "bin": {
-                "installed-package-contents": "bin/index.js"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/map-workspaces": {
-            "version": "3.0.6",
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/name-from-folder": "^2.0.0",
-                "glob": "^10.2.2",
-                "minimatch": "^9.0.0",
-                "read-package-json-fast": "^3.0.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/metavuln-calculator": {
-            "version": "7.1.1",
-            "license": "ISC",
-            "dependencies": {
-                "cacache": "^18.0.0",
-                "json-parse-even-better-errors": "^3.0.0",
-                "pacote": "^18.0.0",
-                "proc-log": "^4.1.0",
-                "semver": "^7.3.5"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/metavuln-calculator/node_modules/json-parse-even-better-errors": {
-            "version": "3.0.2",
-            "license": "MIT",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/metavuln-calculator/node_modules/semver": {
-            "version": "7.6.2",
-            "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@npmcli/name-from-folder": {
-            "version": "2.0.0",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/node-gyp": {
-            "version": "3.0.0",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/package-json": {
-            "version": "5.1.0",
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/git": "^5.0.0",
-                "glob": "^10.2.2",
-                "hosted-git-info": "^7.0.0",
-                "json-parse-even-better-errors": "^3.0.0",
-                "normalize-package-data": "^6.0.0",
-                "proc-log": "^4.0.0",
-                "semver": "^7.5.3"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": {
-            "version": "3.0.2",
-            "license": "MIT",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/package-json/node_modules/semver": {
-            "version": "7.6.2",
-            "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@npmcli/promise-spawn": {
-            "version": "7.0.2",
-            "license": "ISC",
-            "dependencies": {
-                "which": "^4.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/promise-spawn/node_modules/isexe": {
-            "version": "3.1.1",
-            "license": "ISC",
-            "engines": {
-                "node": ">=16"
-            }
-        },
-        "node_modules/@npmcli/promise-spawn/node_modules/which": {
-            "version": "4.0.0",
-            "license": "ISC",
-            "dependencies": {
-                "isexe": "^3.1.1"
-            },
-            "bin": {
-                "node-which": "bin/which.js"
-            },
-            "engines": {
-                "node": "^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/query": {
-            "version": "3.1.0",
-            "license": "ISC",
-            "dependencies": {
-                "postcss-selector-parser": "^6.0.10"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/redact": {
-            "version": "2.0.0",
-            "license": "ISC",
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/run-script": {
-            "version": "8.1.0",
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/node-gyp": "^3.0.0",
-                "@npmcli/package-json": "^5.0.0",
-                "@npmcli/promise-spawn": "^7.0.0",
-                "node-gyp": "^10.0.0",
-                "proc-log": "^4.0.0",
-                "which": "^4.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@npmcli/run-script/node_modules/isexe": {
-            "version": "3.1.1",
-            "license": "ISC",
-            "engines": {
-                "node": ">=16"
-            }
-        },
-        "node_modules/@npmcli/run-script/node_modules/which": {
-            "version": "4.0.0",
-            "license": "ISC",
-            "dependencies": {
-                "isexe": "^3.1.1"
-            },
-            "bin": {
-                "node-which": "bin/which.js"
-            },
-            "engines": {
-                "node": "^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/@octokit/auth-token": {
             "version": "5.1.1",
             "license": "MIT",
@@ -7056,68 +6592,6 @@
                 "url": "https://ko-fi.com/killymxi"
             }
         },
-        "node_modules/@sigstore/bundle": {
-            "version": "2.3.2",
-            "license": "Apache-2.0",
-            "dependencies": {
-                "@sigstore/protobuf-specs": "^0.3.2"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@sigstore/core": {
-            "version": "1.1.0",
-            "license": "Apache-2.0",
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@sigstore/protobuf-specs": {
-            "version": "0.3.2",
-            "license": "Apache-2.0",
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@sigstore/sign": {
-            "version": "2.3.2",
-            "license": "Apache-2.0",
-            "dependencies": {
-                "@sigstore/bundle": "^2.3.2",
-                "@sigstore/core": "^1.0.0",
-                "@sigstore/protobuf-specs": "^0.3.2",
-                "make-fetch-happen": "^13.0.1",
-                "proc-log": "^4.2.0",
-                "promise-retry": "^2.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@sigstore/tuf": {
-            "version": "2.3.3",
-            "license": "Apache-2.0",
-            "dependencies": {
-                "@sigstore/protobuf-specs": "^0.3.0",
-                "tuf-js": "^2.2.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@sigstore/verify": {
-            "version": "1.2.1",
-            "license": "Apache-2.0",
-            "dependencies": {
-                "@sigstore/bundle": "^2.3.2",
-                "@sigstore/core": "^1.1.0",
-                "@sigstore/protobuf-specs": "^0.3.2"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
         "node_modules/@sinclair/typebox": {
             "version": "0.27.8",
             "license": "MIT"
@@ -7203,24 +6677,6 @@
             "dev": true,
             "license": "MIT"
         },
-        "node_modules/@tufjs/canonical-json": {
-            "version": "2.0.0",
-            "license": "MIT",
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/@tufjs/models": {
-            "version": "2.0.1",
-            "license": "MIT",
-            "dependencies": {
-                "@tufjs/canonical-json": "2.0.0",
-                "minimatch": "^9.0.4"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
         "node_modules/@turf/along": {
             "version": "6.5.0",
             "license": "MIT",
@@ -10277,17 +9733,6 @@
                 "node": ">= 8.0.0"
             }
         },
-        "node_modules/aggregate-error": {
-            "version": "3.1.0",
-            "license": "MIT",
-            "dependencies": {
-                "clean-stack": "^2.0.0",
-                "indent-string": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
         "node_modules/ajv": {
             "version": "6.12.6",
             "license": "MIT",
@@ -11076,19 +10521,6 @@
                 "node": "*"
             }
         },
-        "node_modules/bin-links": {
-            "version": "4.0.4",
-            "license": "ISC",
-            "dependencies": {
-                "cmd-shim": "^6.0.0",
-                "npm-normalize-package-bin": "^3.0.0",
-                "read-cmd-shim": "^4.0.0",
-                "write-file-atomic": "^5.0.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/binary-extensions": {
             "version": "2.3.0",
             "license": "MIT",
@@ -12997,19 +12429,6 @@
                 "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
             }
         },
-        "node_modules/browndash-components/node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet/node_modules/readable-stream": {
-            "version": "3.6.2",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "inherits": "^2.0.3",
-                "string_decoder": "^1.1.1",
-                "util-deprecate": "^1.0.1"
-            },
-            "engines": {
-                "node": ">= 6"
-            }
-        },
         "node_modules/browndash-components/node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": {
             "version": "1.1.11",
             "inBundle": true,
@@ -13224,10 +12643,6 @@
                 "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
             }
         },
-        "node_modules/browndash-components/node_modules/npm/node_modules/node-gyp/node_modules/readable-stream": {
-            "extraneous": true,
-            "inBundle": true
-        },
         "node_modules/browndash-components/node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": {
             "version": "3.0.7",
             "inBundle": true,
@@ -13673,6 +13088,19 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
+        "node_modules/browndash-components/node_modules/npm/node_modules/readable-stream": {
+            "version": "3.6.2",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "inherits": "^2.0.3",
+                "string_decoder": "^1.1.1",
+                "util-deprecate": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 6"
+            }
+        },
         "node_modules/browndash-components/node_modules/npm/node_modules/retry": {
             "version": "0.12.0",
             "inBundle": true,
@@ -14399,44 +13827,6 @@
                 "typewise-core": "^1.2"
             }
         },
-        "node_modules/cacache": {
-            "version": "18.0.3",
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/fs": "^3.1.0",
-                "fs-minipass": "^3.0.0",
-                "glob": "^10.2.2",
-                "lru-cache": "^10.0.1",
-                "minipass": "^7.0.3",
-                "minipass-collect": "^2.0.1",
-                "minipass-flush": "^1.0.5",
-                "minipass-pipeline": "^1.2.4",
-                "p-map": "^4.0.0",
-                "ssri": "^10.0.0",
-                "tar": "^6.1.11",
-                "unique-filename": "^3.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/cacache/node_modules/fs-minipass": {
-            "version": "3.0.3",
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^7.0.3"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/cacache/node_modules/lru-cache": {
-            "version": "10.2.2",
-            "license": "ISC",
-            "engines": {
-                "node": "14 || >=16.14"
-            }
-        },
         "node_modules/cacheable-lookup": {
             "version": "7.0.0",
             "license": "MIT",
@@ -14771,13 +14161,6 @@
                 "node": ">=0.10.0"
             }
         },
-        "node_modules/clean-stack": {
-            "version": "2.2.0",
-            "license": "MIT",
-            "engines": {
-                "node": ">=6"
-            }
-        },
         "node_modules/cli-cursor": {
             "version": "3.1.0",
             "dev": true,
@@ -14944,13 +14327,6 @@
                 "node": ">=6"
             }
         },
-        "node_modules/cmd-shim": {
-            "version": "6.0.3",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/color": {
             "version": "4.2.3",
             "license": "MIT",
@@ -15051,10 +14427,6 @@
                 "node": ">= 10"
             }
         },
-        "node_modules/common-ancestor-path": {
-            "version": "1.0.1",
-            "license": "ISC"
-        },
         "node_modules/common-path-prefix": {
             "version": "3.0.0",
             "license": "ISC"
@@ -16811,13 +16183,6 @@
                 "url": "https://github.com/fb55/entities?sponsor=1"
             }
         },
-        "node_modules/env-paths": {
-            "version": "2.2.1",
-            "license": "MIT",
-            "engines": {
-                "node": ">=6"
-            }
-        },
         "node_modules/envinfo": {
             "version": "7.13.0",
             "license": "MIT",
@@ -16828,10 +16193,6 @@
                 "node": ">=4"
             }
         },
-        "node_modules/err-code": {
-            "version": "2.0.3",
-            "license": "MIT"
-        },
         "node_modules/error-ex": {
             "version": "1.3.2",
             "license": "MIT",
@@ -18651,10 +18012,6 @@
                 "node": ">=0.10.0"
             }
         },
-        "node_modules/exponential-backoff": {
-            "version": "3.1.1",
-            "license": "Apache-2.0"
-        },
         "node_modules/express": {
             "version": "4.19.2",
             "license": "MIT",
@@ -20440,23 +19797,6 @@
                 "node": ">=0.10.0"
             }
         },
-        "node_modules/hosted-git-info": {
-            "version": "7.0.2",
-            "license": "ISC",
-            "dependencies": {
-                "lru-cache": "^10.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/hosted-git-info/node_modules/lru-cache": {
-            "version": "10.2.2",
-            "license": "ISC",
-            "engines": {
-                "node": "14 || >=16.14"
-            }
-        },
         "node_modules/howler": {
             "version": "2.2.4",
             "license": "MIT"
@@ -20888,16 +20228,6 @@
             "version": "1.0.1",
             "license": "ISC"
         },
-        "node_modules/ignore-walk": {
-            "version": "6.0.5",
-            "license": "ISC",
-            "dependencies": {
-                "minimatch": "^9.0.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/image-data-uri": {
             "version": "2.0.1",
             "license": "MIT",
@@ -21151,13 +20481,6 @@
                 "node": ">=0.8.19"
             }
         },
-        "node_modules/indent-string": {
-            "version": "4.0.0",
-            "license": "MIT",
-            "engines": {
-                "node": ">=8"
-            }
-        },
         "node_modules/inflight": {
             "version": "1.0.6",
             "license": "ISC",
@@ -21781,10 +21104,6 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/is-lambda": {
-            "version": "1.0.1",
-            "license": "MIT"
-        },
         "node_modules/is-map": {
             "version": "2.0.3",
             "dev": true,
@@ -22417,13 +21736,6 @@
             "version": "1.0.1",
             "license": "MIT"
         },
-        "node_modules/json-stringify-nice": {
-            "version": "1.1.4",
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
         "node_modules/json-stringify-pretty-compact": {
             "version": "3.0.0",
             "license": "MIT"
@@ -22452,13 +21764,6 @@
                 "graceful-fs": "^4.1.6"
             }
         },
-        "node_modules/jsonparse": {
-            "version": "1.3.1",
-            "engines": [
-                "node >= 0.2.0"
-            ],
-            "license": "MIT"
-        },
         "node_modules/jsonschema": {
             "version": "1.4.1",
             "license": "MIT",
@@ -22539,14 +21844,6 @@
                 "safe-buffer": "~5.1.0"
             }
         },
-        "node_modules/just-diff": {
-            "version": "6.0.2",
-            "license": "MIT"
-        },
-        "node_modules/just-diff-apply": {
-            "version": "5.5.0",
-            "license": "MIT"
-        },
         "node_modules/jwa": {
             "version": "2.0.0",
             "license": "MIT",
@@ -23099,27 +22396,6 @@
             "dev": true,
             "license": "ISC"
         },
-        "node_modules/make-fetch-happen": {
-            "version": "13.0.1",
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/agent": "^2.0.0",
-                "cacache": "^18.0.0",
-                "http-cache-semantics": "^4.1.1",
-                "is-lambda": "^1.0.1",
-                "minipass": "^7.0.2",
-                "minipass-fetch": "^3.0.0",
-                "minipass-flush": "^1.0.5",
-                "minipass-pipeline": "^1.2.4",
-                "negotiator": "^0.6.3",
-                "proc-log": "^4.2.0",
-                "promise-retry": "^2.0.1",
-                "ssri": "^10.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
         "node_modules/mapbox-gl": {
             "version": "3.4.0",
             "license": "SEE LICENSE IN LICENSE.txt",
@@ -29334,125 +28610,6 @@
                 "node": ">=16 || 14 >=14.17"
             }
         },
-        "node_modules/minipass-collect": {
-            "version": "2.0.1",
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^7.0.3"
-            },
-            "engines": {
-                "node": ">=16 || 14 >=14.17"
-            }
-        },
-        "node_modules/minipass-fetch": {
-            "version": "3.0.5",
-            "license": "MIT",
-            "dependencies": {
-                "minipass": "^7.0.3",
-                "minipass-sized": "^1.0.3",
-                "minizlib": "^2.1.2"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            },
-            "optionalDependencies": {
-                "encoding": "^0.1.13"
-            }
-        },
-        "node_modules/minipass-flush": {
-            "version": "1.0.5",
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^3.0.0"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/minipass-flush/node_modules/minipass": {
-            "version": "3.3.6",
-            "license": "ISC",
-            "dependencies": {
-                "yallist": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/minipass-flush/node_modules/yallist": {
-            "version": "4.0.0",
-            "license": "ISC"
-        },
-        "node_modules/minipass-json-stream": {
-            "version": "1.0.1",
-            "license": "MIT",
-            "dependencies": {
-                "jsonparse": "^1.3.1",
-                "minipass": "^3.0.0"
-            }
-        },
-        "node_modules/minipass-json-stream/node_modules/minipass": {
-            "version": "3.3.6",
-            "license": "ISC",
-            "dependencies": {
-                "yallist": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/minipass-json-stream/node_modules/yallist": {
-            "version": "4.0.0",
-            "license": "ISC"
-        },
-        "node_modules/minipass-pipeline": {
-            "version": "1.2.4",
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/minipass-pipeline/node_modules/minipass": {
-            "version": "3.3.6",
-            "license": "ISC",
-            "dependencies": {
-                "yallist": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/minipass-pipeline/node_modules/yallist": {
-            "version": "4.0.0",
-            "license": "ISC"
-        },
-        "node_modules/minipass-sized": {
-            "version": "1.0.3",
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/minipass-sized/node_modules/minipass": {
-            "version": "3.3.6",
-            "license": "ISC",
-            "dependencies": {
-                "yallist": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/minipass-sized/node_modules/yallist": {
-            "version": "4.0.0",
-            "license": "ISC"
-        },
         "node_modules/minizlib": {
             "version": "2.1.2",
             "license": "MIT",
@@ -30094,85 +29251,6 @@
                 "node": ">= 6.13.0"
             }
         },
-        "node_modules/node-gyp": {
-            "version": "10.1.0",
-            "license": "MIT",
-            "dependencies": {
-                "env-paths": "^2.2.0",
-                "exponential-backoff": "^3.1.1",
-                "glob": "^10.3.10",
-                "graceful-fs": "^4.2.6",
-                "make-fetch-happen": "^13.0.0",
-                "nopt": "^7.0.0",
-                "proc-log": "^3.0.0",
-                "semver": "^7.3.5",
-                "tar": "^6.1.2",
-                "which": "^4.0.0"
-            },
-            "bin": {
-                "node-gyp": "bin/node-gyp.js"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/node-gyp/node_modules/abbrev": {
-            "version": "2.0.0",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/node-gyp/node_modules/isexe": {
-            "version": "3.1.1",
-            "license": "ISC",
-            "engines": {
-                "node": ">=16"
-            }
-        },
-        "node_modules/node-gyp/node_modules/nopt": {
-            "version": "7.2.1",
-            "license": "ISC",
-            "dependencies": {
-                "abbrev": "^2.0.0"
-            },
-            "bin": {
-                "nopt": "bin/nopt.js"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/node-gyp/node_modules/proc-log": {
-            "version": "3.0.0",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/node-gyp/node_modules/semver": {
-            "version": "7.6.2",
-            "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/node-gyp/node_modules/which": {
-            "version": "4.0.0",
-            "license": "ISC",
-            "dependencies": {
-                "isexe": "^3.1.1"
-            },
-            "bin": {
-                "node-which": "bin/which.js"
-            },
-            "engines": {
-                "node": "^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/node-releases": {
             "version": "2.0.14",
             "license": "MIT"
@@ -30266,29 +29344,6 @@
                 "node": ">=6"
             }
         },
-        "node_modules/normalize-package-data": {
-            "version": "6.0.1",
-            "license": "BSD-2-Clause",
-            "dependencies": {
-                "hosted-git-info": "^7.0.0",
-                "is-core-module": "^2.8.1",
-                "semver": "^7.3.5",
-                "validate-npm-package-license": "^3.0.4"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/normalize-package-data/node_modules/semver": {
-            "version": "7.6.2",
-            "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
         "node_modules/normalize-path": {
             "version": "3.0.0",
             "license": "MIT",
@@ -30464,564 +29519,569 @@
                 "node": "^18.17.0 || >=20.5.0"
             }
         },
-        "node_modules/npm-bundled": {
-            "version": "3.0.1",
-            "license": "ISC",
+        "node_modules/npm-run-path": {
+            "version": "4.0.1",
+            "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "npm-normalize-package-bin": "^3.0.0"
+                "path-key": "^3.0.0"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=8"
             }
         },
-        "node_modules/npm-install-checks": {
-            "version": "6.3.0",
-            "license": "BSD-2-Clause",
+        "node_modules/npm/node_modules/@isaacs/cliui": {
+            "version": "8.0.2",
+            "inBundle": true,
+            "license": "ISC",
             "dependencies": {
-                "semver": "^7.1.1"
+                "string-width": "^5.1.2",
+                "string-width-cjs": "npm:string-width@^4.2.0",
+                "strip-ansi": "^7.0.1",
+                "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+                "wrap-ansi": "^8.1.0",
+                "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=12"
             }
         },
-        "node_modules/npm-install-checks/node_modules/semver": {
-            "version": "7.6.2",
-            "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
+        "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+            "version": "6.0.1",
+            "inBundle": true,
+            "license": "MIT",
             "engines": {
-                "node": ">=10"
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-regex?sponsor=1"
             }
         },
-        "node_modules/npm-normalize-package-bin": {
-            "version": "3.0.1",
-            "license": "ISC",
+        "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+            "version": "9.2.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": {
+            "version": "5.1.2",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "eastasianwidth": "^0.2.0",
+                "emoji-regex": "^9.2.2",
+                "strip-ansi": "^7.0.1"
+            },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/npm-package-arg": {
-            "version": "11.0.2",
-            "license": "ISC",
+        "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+            "version": "7.1.0",
+            "inBundle": true,
+            "license": "MIT",
             "dependencies": {
-                "hosted-git-info": "^7.0.0",
-                "proc-log": "^4.0.0",
-                "semver": "^7.3.5",
-                "validate-npm-package-name": "^5.0.0"
+                "ansi-regex": "^6.0.1"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/strip-ansi?sponsor=1"
             }
         },
-        "node_modules/npm-package-arg/node_modules/semver": {
-            "version": "7.6.2",
+        "node_modules/npm/node_modules/@isaacs/string-locale-compare": {
+            "version": "1.1.0",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/@npmcli/agent": {
+            "version": "2.2.2",
+            "inBundle": true,
             "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
+            "dependencies": {
+                "agent-base": "^7.1.0",
+                "http-proxy-agent": "^7.0.0",
+                "https-proxy-agent": "^7.0.1",
+                "lru-cache": "^10.0.1",
+                "socks-proxy-agent": "^8.0.3"
             },
             "engines": {
-                "node": ">=10"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm-packlist": {
-            "version": "8.0.2",
+        "node_modules/npm/node_modules/@npmcli/arborist": {
+            "version": "7.5.2",
+            "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "ignore-walk": "^6.0.4"
+                "@isaacs/string-locale-compare": "^1.1.0",
+                "@npmcli/fs": "^3.1.1",
+                "@npmcli/installed-package-contents": "^2.1.0",
+                "@npmcli/map-workspaces": "^3.0.2",
+                "@npmcli/metavuln-calculator": "^7.1.1",
+                "@npmcli/name-from-folder": "^2.0.0",
+                "@npmcli/node-gyp": "^3.0.0",
+                "@npmcli/package-json": "^5.1.0",
+                "@npmcli/query": "^3.1.0",
+                "@npmcli/redact": "^2.0.0",
+                "@npmcli/run-script": "^8.1.0",
+                "bin-links": "^4.0.4",
+                "cacache": "^18.0.3",
+                "common-ancestor-path": "^1.0.1",
+                "hosted-git-info": "^7.0.2",
+                "json-parse-even-better-errors": "^3.0.2",
+                "json-stringify-nice": "^1.1.4",
+                "lru-cache": "^10.2.2",
+                "minimatch": "^9.0.4",
+                "nopt": "^7.2.1",
+                "npm-install-checks": "^6.2.0",
+                "npm-package-arg": "^11.0.2",
+                "npm-pick-manifest": "^9.0.1",
+                "npm-registry-fetch": "^17.0.1",
+                "pacote": "^18.0.6",
+                "parse-conflict-json": "^3.0.0",
+                "proc-log": "^4.2.0",
+                "proggy": "^2.0.0",
+                "promise-all-reject-late": "^1.0.0",
+                "promise-call-limit": "^3.0.1",
+                "read-package-json-fast": "^3.0.2",
+                "semver": "^7.3.7",
+                "ssri": "^10.0.6",
+                "treeverse": "^3.0.0",
+                "walk-up-path": "^3.0.1"
+            },
+            "bin": {
+                "arborist": "bin/index.js"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm-pick-manifest": {
-            "version": "9.0.1",
+        "node_modules/npm/node_modules/@npmcli/config": {
+            "version": "8.3.2",
+            "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "npm-install-checks": "^6.0.0",
-                "npm-normalize-package-bin": "^3.0.0",
-                "npm-package-arg": "^11.0.0",
-                "semver": "^7.3.5"
+                "@npmcli/map-workspaces": "^3.0.2",
+                "ci-info": "^4.0.0",
+                "ini": "^4.1.2",
+                "nopt": "^7.2.1",
+                "proc-log": "^4.2.0",
+                "read-package-json-fast": "^3.0.2",
+                "semver": "^7.3.5",
+                "walk-up-path": "^3.0.1"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm-pick-manifest/node_modules/semver": {
-            "version": "7.6.2",
+        "node_modules/npm/node_modules/@npmcli/fs": {
+            "version": "3.1.1",
+            "inBundle": true,
             "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
+            "dependencies": {
+                "semver": "^7.3.5"
             },
             "engines": {
-                "node": ">=10"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm-registry-fetch": {
-            "version": "17.0.1",
+        "node_modules/npm/node_modules/@npmcli/git": {
+            "version": "5.0.7",
+            "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "@npmcli/redact": "^2.0.0",
-                "make-fetch-happen": "^13.0.0",
-                "minipass": "^7.0.2",
-                "minipass-fetch": "^3.0.0",
-                "minipass-json-stream": "^1.0.1",
-                "minizlib": "^2.1.2",
-                "npm-package-arg": "^11.0.0",
-                "proc-log": "^4.0.0"
+                "@npmcli/promise-spawn": "^7.0.0",
+                "lru-cache": "^10.0.1",
+                "npm-pick-manifest": "^9.0.0",
+                "proc-log": "^4.0.0",
+                "promise-inflight": "^1.0.1",
+                "promise-retry": "^2.0.1",
+                "semver": "^7.3.5",
+                "which": "^4.0.0"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm-run-path": {
-            "version": "4.0.1",
-            "dev": true,
-            "license": "MIT",
+        "node_modules/npm/node_modules/@npmcli/installed-package-contents": {
+            "version": "2.1.0",
+            "inBundle": true,
+            "license": "ISC",
             "dependencies": {
-                "path-key": "^3.0.0"
+                "npm-bundled": "^3.0.0",
+                "npm-normalize-package-bin": "^3.0.0"
+            },
+            "bin": {
+                "installed-package-contents": "bin/index.js"
             },
             "engines": {
-                "node": ">=8"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/abbrev": {
-            "version": "2.0.0",
+        "node_modules/npm/node_modules/@npmcli/map-workspaces": {
+            "version": "3.0.6",
             "inBundle": true,
             "license": "ISC",
+            "dependencies": {
+                "@npmcli/name-from-folder": "^2.0.0",
+                "glob": "^10.2.2",
+                "minimatch": "^9.0.0",
+                "read-package-json-fast": "^3.0.0"
+            },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/archy": {
-            "version": "1.0.0",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/cacache": {
-            "version": "18.0.4",
+        "node_modules/npm/node_modules/@npmcli/metavuln-calculator": {
+            "version": "7.1.1",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "@npmcli/fs": "^3.1.0",
-                "fs-minipass": "^3.0.0",
-                "glob": "^10.2.2",
-                "lru-cache": "^10.0.1",
-                "minipass": "^7.0.3",
-                "minipass-collect": "^2.0.1",
-                "minipass-flush": "^1.0.5",
-                "minipass-pipeline": "^1.2.4",
-                "p-map": "^4.0.0",
-                "ssri": "^10.0.0",
-                "tar": "^6.1.11",
-                "unique-filename": "^3.0.0"
+                "cacache": "^18.0.0",
+                "json-parse-even-better-errors": "^3.0.0",
+                "pacote": "^18.0.0",
+                "proc-log": "^4.1.0",
+                "semver": "^7.3.5"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/cacache/node_modules/imurmurhash": {
-            "version": "0.1.4",
+        "node_modules/npm/node_modules/@npmcli/name-from-folder": {
+            "version": "2.0.0",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC",
             "engines": {
-                "node": ">=0.8.19"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/cacache/node_modules/lru-cache": {
-            "version": "10.4.3",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/cacache/node_modules/minipass-collect": {
-            "version": "2.0.1",
+        "node_modules/npm/node_modules/@npmcli/node-gyp": {
+            "version": "3.0.0",
             "inBundle": true,
             "license": "ISC",
-            "dependencies": {
-                "minipass": "^7.0.3"
-            },
             "engines": {
-                "node": ">=16 || 14 >=14.17"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/cacache/node_modules/minipass-flush": {
-            "version": "1.0.5",
+        "node_modules/npm/node_modules/@npmcli/package-json": {
+            "version": "5.1.0",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "minipass": "^3.0.0"
+                "@npmcli/git": "^5.0.0",
+                "glob": "^10.2.2",
+                "hosted-git-info": "^7.0.0",
+                "json-parse-even-better-errors": "^3.0.0",
+                "normalize-package-data": "^6.0.0",
+                "proc-log": "^4.0.0",
+                "semver": "^7.5.3"
             },
             "engines": {
-                "node": ">= 8"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/cacache/node_modules/minipass-flush/node_modules/minipass": {
-            "version": "3.3.6",
+        "node_modules/npm/node_modules/@npmcli/promise-spawn": {
+            "version": "7.0.2",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "yallist": "^4.0.0"
+                "which": "^4.0.0"
             },
             "engines": {
-                "node": ">=8"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/cacache/node_modules/unique-filename": {
-            "version": "3.0.0",
+        "node_modules/npm/node_modules/@npmcli/query": {
+            "version": "3.1.0",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "unique-slug": "^4.0.0"
+                "postcss-selector-parser": "^6.0.10"
             },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/cacache/node_modules/unique-slug": {
-            "version": "4.0.0",
+        "node_modules/npm/node_modules/@npmcli/redact": {
+            "version": "2.0.0",
             "inBundle": true,
             "license": "ISC",
-            "dependencies": {
-                "imurmurhash": "^0.1.4"
-            },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/chalk": {
-            "version": "5.3.0",
+        "node_modules/npm/node_modules/@npmcli/run-script": {
+            "version": "8.1.0",
             "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": "^12.17.0 || ^14.13 || >=16.0.0"
+            "license": "ISC",
+            "dependencies": {
+                "@npmcli/node-gyp": "^3.0.0",
+                "@npmcli/package-json": "^5.0.0",
+                "@npmcli/promise-spawn": "^7.0.0",
+                "node-gyp": "^10.0.0",
+                "proc-log": "^4.0.0",
+                "which": "^4.0.0"
             },
-            "funding": {
-                "url": "https://github.com/chalk/chalk?sponsor=1"
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/ci-info": {
-            "version": "4.0.0",
-            "funding": [
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/sibiraj-s"
-                }
-            ],
+        "node_modules/npm/node_modules/@pkgjs/parseargs": {
+            "version": "0.11.0",
             "inBundle": true,
             "license": "MIT",
+            "optional": true,
             "engines": {
-                "node": ">=8"
+                "node": ">=14"
             }
         },
-        "node_modules/npm/node_modules/cli-columns": {
-            "version": "4.0.0",
+        "node_modules/npm/node_modules/@sigstore/bundle": {
+            "version": "2.3.1",
             "inBundle": true,
-            "license": "MIT",
+            "license": "Apache-2.0",
             "dependencies": {
-                "string-width": "^4.2.3",
-                "strip-ansi": "^6.0.1"
+                "@sigstore/protobuf-specs": "^0.3.1"
             },
             "engines": {
-                "node": ">= 10"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/cli-columns/node_modules/ansi-regex": {
-            "version": "5.0.1",
+        "node_modules/npm/node_modules/@sigstore/core": {
+            "version": "1.1.0",
             "inBundle": true,
-            "license": "MIT",
+            "license": "Apache-2.0",
             "engines": {
-                "node": ">=8"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/cli-columns/node_modules/emoji-regex": {
-            "version": "8.0.0",
+        "node_modules/npm/node_modules/@sigstore/protobuf-specs": {
+            "version": "0.3.2",
             "inBundle": true,
-            "license": "MIT"
+            "license": "Apache-2.0",
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
         },
-        "node_modules/npm/node_modules/cli-columns/node_modules/is-fullwidth-code-point": {
-            "version": "3.0.0",
+        "node_modules/npm/node_modules/@sigstore/sign": {
+            "version": "2.3.1",
             "inBundle": true,
-            "license": "MIT",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@sigstore/bundle": "^2.3.0",
+                "@sigstore/core": "^1.0.0",
+                "@sigstore/protobuf-specs": "^0.3.1",
+                "make-fetch-happen": "^13.0.1",
+                "proc-log": "^4.2.0",
+                "promise-retry": "^2.0.1"
+            },
             "engines": {
-                "node": ">=8"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/cli-columns/node_modules/string-width": {
-            "version": "4.2.3",
+        "node_modules/npm/node_modules/@sigstore/tuf": {
+            "version": "2.3.3",
             "inBundle": true,
-            "license": "MIT",
+            "license": "Apache-2.0",
             "dependencies": {
-                "emoji-regex": "^8.0.0",
-                "is-fullwidth-code-point": "^3.0.0",
-                "strip-ansi": "^6.0.1"
+                "@sigstore/protobuf-specs": "^0.3.0",
+                "tuf-js": "^2.2.1"
             },
             "engines": {
-                "node": ">=8"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/cli-columns/node_modules/strip-ansi": {
-            "version": "6.0.1",
+        "node_modules/npm/node_modules/@sigstore/verify": {
+            "version": "1.2.0",
             "inBundle": true,
-            "license": "MIT",
+            "license": "Apache-2.0",
             "dependencies": {
-                "ansi-regex": "^5.0.1"
+                "@sigstore/bundle": "^2.3.1",
+                "@sigstore/core": "^1.1.0",
+                "@sigstore/protobuf-specs": "^0.3.1"
             },
             "engines": {
-                "node": ">=8"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/fastest-levenshtein": {
-            "version": "1.0.16",
+        "node_modules/npm/node_modules/@tufjs/canonical-json": {
+            "version": "2.0.0",
             "inBundle": true,
             "license": "MIT",
             "engines": {
-                "node": ">= 4.9.1"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/fs-minipass": {
-            "version": "3.0.3",
+        "node_modules/npm/node_modules/@tufjs/models": {
+            "version": "2.0.1",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "dependencies": {
-                "minipass": "^7.0.3"
+                "@tufjs/canonical-json": "2.0.0",
+                "minimatch": "^9.0.4"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/glob": {
-            "version": "10.3.15",
+        "node_modules/npm/node_modules/abbrev": {
+            "version": "2.0.0",
             "inBundle": true,
             "license": "ISC",
-            "dependencies": {
-                "foreground-child": "^3.1.0",
-                "jackspeak": "^2.3.6",
-                "minimatch": "^9.0.1",
-                "minipass": "^7.0.4",
-                "path-scurry": "^1.11.0"
-            },
-            "bin": {
-                "glob": "dist/esm/bin.mjs"
-            },
             "engines": {
-                "node": ">=16 || 14 >=14.18"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/glob/node_modules/cross-spawn": {
-            "version": "7.0.3",
+        "node_modules/npm/node_modules/agent-base": {
+            "version": "7.1.1",
             "inBundle": true,
             "license": "MIT",
             "dependencies": {
-                "path-key": "^3.1.0",
-                "shebang-command": "^2.0.0",
-                "which": "^2.0.1"
+                "debug": "^4.3.4"
             },
             "engines": {
-                "node": ">= 8"
+                "node": ">= 14"
             }
         },
-        "node_modules/npm/node_modules/glob/node_modules/foreground-child": {
-            "version": "3.2.1",
+        "node_modules/npm/node_modules/aggregate-error": {
+            "version": "3.1.0",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "dependencies": {
-                "cross-spawn": "^7.0.0",
-                "signal-exit": "^4.0.1"
+                "clean-stack": "^2.0.0",
+                "indent-string": "^4.0.0"
             },
             "engines": {
-                "node": ">=14"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
+                "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/glob/node_modules/isexe": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/glob/node_modules/lru-cache": {
-            "version": "10.4.3",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/glob/node_modules/path-key": {
-            "version": "3.1.1",
+        "node_modules/npm/node_modules/ansi-regex": {
+            "version": "5.0.1",
             "inBundle": true,
             "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/glob/node_modules/path-scurry": {
-            "version": "1.11.1",
+        "node_modules/npm/node_modules/ansi-styles": {
+            "version": "6.2.1",
             "inBundle": true,
-            "license": "BlueOak-1.0.0",
-            "dependencies": {
-                "lru-cache": "^10.2.0",
-                "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
-            },
+            "license": "MIT",
             "engines": {
-                "node": ">=16 || 14 >=14.18"
+                "node": ">=12"
             },
             "funding": {
-                "url": "https://github.com/sponsors/isaacs"
+                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
             }
         },
-        "node_modules/npm/node_modules/glob/node_modules/shebang-command": {
+        "node_modules/npm/node_modules/aproba": {
             "version": "2.0.0",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/archy": {
+            "version": "1.0.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/balanced-match": {
+            "version": "1.0.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/bin-links": {
+            "version": "4.0.4",
+            "inBundle": true,
+            "license": "ISC",
             "dependencies": {
-                "shebang-regex": "^3.0.0"
+                "cmd-shim": "^6.0.0",
+                "npm-normalize-package-bin": "^3.0.0",
+                "read-cmd-shim": "^4.0.0",
+                "write-file-atomic": "^5.0.0"
             },
             "engines": {
-                "node": ">=8"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/glob/node_modules/shebang-regex": {
-            "version": "3.0.0",
+        "node_modules/npm/node_modules/binary-extensions": {
+            "version": "2.3.0",
             "inBundle": true,
             "license": "MIT",
             "engines": {
                 "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/glob/node_modules/signal-exit": {
-            "version": "4.1.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": ">=14"
             },
             "funding": {
-                "url": "https://github.com/sponsors/isaacs"
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/npm/node_modules/glob/node_modules/which": {
-            "version": "2.0.2",
+        "node_modules/npm/node_modules/brace-expansion": {
+            "version": "2.0.1",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "dependencies": {
-                "isexe": "^2.0.0"
-            },
-            "bin": {
-                "node-which": "bin/node-which"
-            },
-            "engines": {
-                "node": ">= 8"
+                "balanced-match": "^1.0.0"
             }
         },
-        "node_modules/npm/node_modules/graceful-fs": {
-            "version": "4.2.11",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/hosted-git-info": {
-            "version": "7.0.2",
+        "node_modules/npm/node_modules/cacache": {
+            "version": "18.0.3",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "lru-cache": "^10.0.1"
+                "@npmcli/fs": "^3.1.0",
+                "fs-minipass": "^3.0.0",
+                "glob": "^10.2.2",
+                "lru-cache": "^10.0.1",
+                "minipass": "^7.0.3",
+                "minipass-collect": "^2.0.1",
+                "minipass-flush": "^1.0.5",
+                "minipass-pipeline": "^1.2.4",
+                "p-map": "^4.0.0",
+                "ssri": "^10.0.0",
+                "tar": "^6.1.11",
+                "unique-filename": "^3.0.0"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/hosted-git-info/node_modules/lru-cache": {
-            "version": "10.4.3",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/ini": {
-            "version": "4.1.2",
+        "node_modules/npm/node_modules/chalk": {
+            "version": "5.3.0",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/init-package-json": {
-            "version": "6.0.3",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/package-json": "^5.0.0",
-                "npm-package-arg": "^11.0.0",
-                "promzard": "^1.0.0",
-                "read": "^3.0.1",
-                "semver": "^7.3.5",
-                "validate-npm-package-license": "^3.0.4",
-                "validate-npm-package-name": "^5.0.0"
+                "node": "^12.17.0 || ^14.13 || >=16.0.0"
             },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+            "funding": {
+                "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/npm/node_modules/init-package-json/node_modules/promzard": {
-            "version": "1.0.2",
+        "node_modules/npm/node_modules/chownr": {
+            "version": "2.0.0",
             "inBundle": true,
             "license": "ISC",
-            "dependencies": {
-                "read": "^3.0.1"
-            },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/init-package-json/node_modules/spdx-correct": {
-            "version": "3.2.0",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "dependencies": {
-                "spdx-expression-parse": "^3.0.0",
-                "spdx-license-ids": "^3.0.0"
+                "node": ">=10"
             }
         },
-        "node_modules/npm/node_modules/init-package-json/node_modules/spdx-exceptions": {
-            "version": "2.5.0",
-            "inBundle": true,
-            "license": "CC-BY-3.0"
-        },
-        "node_modules/npm/node_modules/init-package-json/node_modules/spdx-expression-parse": {
-            "version": "3.0.1",
+        "node_modules/npm/node_modules/ci-info": {
+            "version": "4.0.0",
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/sibiraj-s"
+                }
+            ],
             "inBundle": true,
             "license": "MIT",
-            "dependencies": {
-                "spdx-exceptions": "^2.1.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/init-package-json/node_modules/spdx-license-ids": {
-            "version": "3.0.18",
-            "inBundle": true,
-            "license": "CC0-1.0"
-        },
-        "node_modules/npm/node_modules/init-package-json/node_modules/validate-npm-package-license": {
-            "version": "3.0.4",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "dependencies": {
-                "spdx-correct": "^3.0.0",
-                "spdx-expression-parse": "^3.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/is-cidr": {
-            "version": "5.1.0",
-            "inBundle": true,
-            "license": "BSD-2-Clause",
-            "dependencies": {
-                "cidr-regex": "^4.1.1"
-            },
             "engines": {
-                "node": ">=14"
+                "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/is-cidr/node_modules/cidr-regex": {
-            "version": "4.1.1",
+        "node_modules/npm/node_modules/cidr-regex": {
+            "version": "4.0.5",
             "inBundle": true,
             "license": "BSD-2-Clause",
             "dependencies": {
@@ -31031,167 +30091,115 @@
                 "node": ">=14"
             }
         },
-        "node_modules/npm/node_modules/is-cidr/node_modules/ip-regex": {
-            "version": "5.0.0",
+        "node_modules/npm/node_modules/clean-stack": {
+            "version": "2.2.0",
             "inBundle": true,
             "license": "MIT",
             "engines": {
-                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/npm/node_modules/isexe": {
-            "version": "3.1.1",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": ">=16"
+                "node": ">=6"
             }
         },
-        "node_modules/npm/node_modules/jackspeak": {
-            "version": "2.3.6",
+        "node_modules/npm/node_modules/cli-columns": {
+            "version": "4.0.0",
             "inBundle": true,
-            "license": "BlueOak-1.0.0",
+            "license": "MIT",
             "dependencies": {
-                "@isaacs/cliui": "^8.0.2"
+                "string-width": "^4.2.3",
+                "strip-ansi": "^6.0.1"
             },
             "engines": {
-                "node": ">=14"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            },
-            "optionalDependencies": {
-                "@pkgjs/parseargs": "^0.11.0"
+                "node": ">= 10"
             }
         },
-        "node_modules/npm/node_modules/json-parse-even-better-errors": {
-            "version": "3.0.2",
+        "node_modules/npm/node_modules/cmd-shim": {
+            "version": "6.0.3",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmaccess": {
-            "version": "8.0.6",
+        "node_modules/npm/node_modules/color-convert": {
+            "version": "2.0.1",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "dependencies": {
-                "npm-package-arg": "^11.0.2",
-                "npm-registry-fetch": "^17.0.1"
+                "color-name": "~1.1.4"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": ">=7.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmdiff": {
-            "version": "6.1.4",
+        "node_modules/npm/node_modules/color-name": {
+            "version": "1.1.4",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/common-ancestor-path": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/cross-spawn": {
+            "version": "7.0.3",
+            "inBundle": true,
+            "license": "MIT",
             "dependencies": {
-                "@npmcli/arborist": "^7.5.4",
-                "@npmcli/installed-package-contents": "^2.1.0",
-                "binary-extensions": "^2.3.0",
-                "diff": "^5.1.0",
-                "minimatch": "^9.0.4",
-                "npm-package-arg": "^11.0.2",
-                "pacote": "^18.0.6",
-                "tar": "^6.2.1"
+                "path-key": "^3.1.0",
+                "shebang-command": "^2.0.0",
+                "which": "^2.0.1"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": ">= 8"
             }
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/@npmcli/arborist": {
-            "version": "7.5.4",
+        "node_modules/npm/node_modules/cross-spawn/node_modules/which": {
+            "version": "2.0.2",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "@isaacs/string-locale-compare": "^1.1.0",
-                "@npmcli/fs": "^3.1.1",
-                "@npmcli/installed-package-contents": "^2.1.0",
-                "@npmcli/map-workspaces": "^3.0.2",
-                "@npmcli/metavuln-calculator": "^7.1.1",
-                "@npmcli/name-from-folder": "^2.0.0",
-                "@npmcli/node-gyp": "^3.0.0",
-                "@npmcli/package-json": "^5.1.0",
-                "@npmcli/query": "^3.1.0",
-                "@npmcli/redact": "^2.0.0",
-                "@npmcli/run-script": "^8.1.0",
-                "bin-links": "^4.0.4",
-                "cacache": "^18.0.3",
-                "common-ancestor-path": "^1.0.1",
-                "hosted-git-info": "^7.0.2",
-                "json-parse-even-better-errors": "^3.0.2",
-                "json-stringify-nice": "^1.1.4",
-                "lru-cache": "^10.2.2",
-                "minimatch": "^9.0.4",
-                "nopt": "^7.2.1",
-                "npm-install-checks": "^6.2.0",
-                "npm-package-arg": "^11.0.2",
-                "npm-pick-manifest": "^9.0.1",
-                "npm-registry-fetch": "^17.0.1",
-                "pacote": "^18.0.6",
-                "parse-conflict-json": "^3.0.0",
-                "proc-log": "^4.2.0",
-                "proggy": "^2.0.0",
-                "promise-all-reject-late": "^1.0.0",
-                "promise-call-limit": "^3.0.1",
-                "read-package-json-fast": "^3.0.2",
-                "semver": "^7.3.7",
-                "ssri": "^10.0.6",
-                "treeverse": "^3.0.0",
-                "walk-up-path": "^3.0.1"
+                "isexe": "^2.0.0"
             },
             "bin": {
-                "arborist": "bin/index.js"
+                "node-which": "bin/node-which"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": ">= 8"
             }
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/bin-links": {
-            "version": "4.0.4",
+        "node_modules/npm/node_modules/cssesc": {
+            "version": "3.0.0",
             "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "cmd-shim": "^6.0.0",
-                "npm-normalize-package-bin": "^3.0.0",
-                "read-cmd-shim": "^4.0.0",
-                "write-file-atomic": "^5.0.0"
+            "license": "MIT",
+            "bin": {
+                "cssesc": "bin/cssesc"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=4"
             }
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/binary-extensions": {
-            "version": "2.3.0",
+        "node_modules/npm/node_modules/debug": {
+            "version": "4.3.4",
             "inBundle": true,
             "license": "MIT",
-            "engines": {
-                "node": ">=8"
+            "dependencies": {
+                "ms": "2.1.2"
             },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/cmd-shim": {
-            "version": "6.0.3",
-            "inBundle": true,
-            "license": "ISC",
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=6.0"
+            },
+            "peerDependenciesMeta": {
+                "supports-color": {
+                    "optional": true
+                }
             }
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/common-ancestor-path": {
-            "version": "1.0.1",
+        "node_modules/npm/node_modules/debug/node_modules/ms": {
+            "version": "2.1.2",
             "inBundle": true,
-            "license": "ISC"
+            "license": "MIT"
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/diff": {
+        "node_modules/npm/node_modules/diff": {
             "version": "5.2.0",
             "inBundle": true,
             "license": "BSD-3-Clause",
@@ -31199,672 +30207,464 @@
                 "node": ">=0.3.1"
             }
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/json-stringify-nice": {
-            "version": "1.1.4",
+        "node_modules/npm/node_modules/eastasianwidth": {
+            "version": "0.2.0",
             "inBundle": true,
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
+            "license": "MIT"
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/lru-cache": {
-            "version": "10.4.3",
+        "node_modules/npm/node_modules/emoji-regex": {
+            "version": "8.0.0",
             "inBundle": true,
-            "license": "ISC"
+            "license": "MIT"
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/npm-normalize-package-bin": {
-            "version": "3.0.1",
+        "node_modules/npm/node_modules/encoding": {
+            "version": "0.1.13",
             "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            "license": "MIT",
+            "optional": true,
+            "dependencies": {
+                "iconv-lite": "^0.6.2"
             }
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/proggy": {
-            "version": "2.0.0",
+        "node_modules/npm/node_modules/env-paths": {
+            "version": "2.2.1",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/promise-all-reject-late": {
-            "version": "1.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
+                "node": ">=6"
             }
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/promise-call-limit": {
-            "version": "3.0.1",
+        "node_modules/npm/node_modules/err-code": {
+            "version": "2.0.3",
             "inBundle": true,
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
+            "license": "MIT"
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/read-cmd-shim": {
-            "version": "4.0.0",
+        "node_modules/npm/node_modules/exponential-backoff": {
+            "version": "3.1.1",
             "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
+            "license": "Apache-2.0"
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/read-package-json-fast": {
-            "version": "3.0.2",
+        "node_modules/npm/node_modules/fastest-levenshtein": {
+            "version": "1.0.16",
             "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "json-parse-even-better-errors": "^3.0.0",
-                "npm-normalize-package-bin": "^3.0.0"
-            },
+            "license": "MIT",
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">= 4.9.1"
             }
         },
-        "node_modules/npm/node_modules/libnpmdiff/node_modules/walk-up-path": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/libnpmexec": {
-            "version": "8.1.3",
+        "node_modules/npm/node_modules/foreground-child": {
+            "version": "3.1.1",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "@npmcli/arborist": "^7.5.4",
-                "@npmcli/run-script": "^8.1.0",
-                "ci-info": "^4.0.0",
-                "npm-package-arg": "^11.0.2",
-                "pacote": "^18.0.6",
-                "proc-log": "^4.2.0",
-                "read": "^3.0.1",
-                "read-package-json-fast": "^3.0.2",
-                "semver": "^7.3.7",
-                "walk-up-path": "^3.0.1"
+                "cross-spawn": "^7.0.0",
+                "signal-exit": "^4.0.1"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/@npmcli/arborist": {
-            "version": "7.5.4",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@isaacs/string-locale-compare": "^1.1.0",
-                "@npmcli/fs": "^3.1.1",
-                "@npmcli/installed-package-contents": "^2.1.0",
-                "@npmcli/map-workspaces": "^3.0.2",
-                "@npmcli/metavuln-calculator": "^7.1.1",
-                "@npmcli/name-from-folder": "^2.0.0",
-                "@npmcli/node-gyp": "^3.0.0",
-                "@npmcli/package-json": "^5.1.0",
-                "@npmcli/query": "^3.1.0",
-                "@npmcli/redact": "^2.0.0",
-                "@npmcli/run-script": "^8.1.0",
-                "bin-links": "^4.0.4",
-                "cacache": "^18.0.3",
-                "common-ancestor-path": "^1.0.1",
-                "hosted-git-info": "^7.0.2",
-                "json-parse-even-better-errors": "^3.0.2",
-                "json-stringify-nice": "^1.1.4",
-                "lru-cache": "^10.2.2",
-                "minimatch": "^9.0.4",
-                "nopt": "^7.2.1",
-                "npm-install-checks": "^6.2.0",
-                "npm-package-arg": "^11.0.2",
-                "npm-pick-manifest": "^9.0.1",
-                "npm-registry-fetch": "^17.0.1",
-                "pacote": "^18.0.6",
-                "parse-conflict-json": "^3.0.0",
-                "proc-log": "^4.2.0",
-                "proggy": "^2.0.0",
-                "promise-all-reject-late": "^1.0.0",
-                "promise-call-limit": "^3.0.1",
-                "read-package-json-fast": "^3.0.2",
-                "semver": "^7.3.7",
-                "ssri": "^10.0.6",
-                "treeverse": "^3.0.0",
-                "walk-up-path": "^3.0.1"
-            },
-            "bin": {
-                "arborist": "bin/index.js"
+                "node": ">=14"
             },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/bin-links": {
-            "version": "4.0.4",
+        "node_modules/npm/node_modules/fs-minipass": {
+            "version": "3.0.3",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "cmd-shim": "^6.0.0",
-                "npm-normalize-package-bin": "^3.0.0",
-                "read-cmd-shim": "^4.0.0",
-                "write-file-atomic": "^5.0.0"
+                "minipass": "^7.0.3"
             },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/cmd-shim": {
-            "version": "6.0.3",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/common-ancestor-path": {
-            "version": "1.0.1",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/json-stringify-nice": {
-            "version": "1.1.4",
+        "node_modules/npm/node_modules/function-bind": {
+            "version": "1.1.2",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/lru-cache": {
-            "version": "10.4.3",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/npm-normalize-package-bin": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/proggy": {
-            "version": "2.0.0",
+        "node_modules/npm/node_modules/glob": {
+            "version": "10.3.15",
             "inBundle": true,
             "license": "ISC",
+            "dependencies": {
+                "foreground-child": "^3.1.0",
+                "jackspeak": "^2.3.6",
+                "minimatch": "^9.0.1",
+                "minipass": "^7.0.4",
+                "path-scurry": "^1.11.0"
+            },
+            "bin": {
+                "glob": "dist/esm/bin.mjs"
+            },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/promise-all-reject-late": {
-            "version": "1.0.1",
-            "inBundle": true,
-            "license": "ISC",
+                "node": ">=16 || 14 >=14.18"
+            },
             "funding": {
                 "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/promise-call-limit": {
-            "version": "3.0.1",
+        "node_modules/npm/node_modules/graceful-fs": {
+            "version": "4.2.11",
             "inBundle": true,
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
+            "license": "ISC"
         },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/read-cmd-shim": {
-            "version": "4.0.0",
+        "node_modules/npm/node_modules/hasown": {
+            "version": "2.0.2",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
+            "dependencies": {
+                "function-bind": "^1.1.2"
+            },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">= 0.4"
             }
         },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/read-package-json-fast": {
-            "version": "3.0.2",
+        "node_modules/npm/node_modules/hosted-git-info": {
+            "version": "7.0.2",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "json-parse-even-better-errors": "^3.0.0",
-                "npm-normalize-package-bin": "^3.0.0"
+                "lru-cache": "^10.0.1"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmexec/node_modules/walk-up-path": {
-            "version": "3.0.1",
+        "node_modules/npm/node_modules/http-cache-semantics": {
+            "version": "4.1.1",
             "inBundle": true,
-            "license": "ISC"
+            "license": "BSD-2-Clause"
         },
-        "node_modules/npm/node_modules/libnpmfund": {
-            "version": "5.0.12",
+        "node_modules/npm/node_modules/http-proxy-agent": {
+            "version": "7.0.2",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "dependencies": {
-                "@npmcli/arborist": "^7.5.4"
+                "agent-base": "^7.1.0",
+                "debug": "^4.3.4"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": ">= 14"
             }
         },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/@npmcli/arborist": {
-            "version": "7.5.4",
+        "node_modules/npm/node_modules/https-proxy-agent": {
+            "version": "7.0.4",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "dependencies": {
-                "@isaacs/string-locale-compare": "^1.1.0",
-                "@npmcli/fs": "^3.1.1",
-                "@npmcli/installed-package-contents": "^2.1.0",
-                "@npmcli/map-workspaces": "^3.0.2",
-                "@npmcli/metavuln-calculator": "^7.1.1",
-                "@npmcli/name-from-folder": "^2.0.0",
-                "@npmcli/node-gyp": "^3.0.0",
-                "@npmcli/package-json": "^5.1.0",
-                "@npmcli/query": "^3.1.0",
-                "@npmcli/redact": "^2.0.0",
-                "@npmcli/run-script": "^8.1.0",
-                "bin-links": "^4.0.4",
-                "cacache": "^18.0.3",
-                "common-ancestor-path": "^1.0.1",
-                "hosted-git-info": "^7.0.2",
-                "json-parse-even-better-errors": "^3.0.2",
-                "json-stringify-nice": "^1.1.4",
-                "lru-cache": "^10.2.2",
-                "minimatch": "^9.0.4",
-                "nopt": "^7.2.1",
-                "npm-install-checks": "^6.2.0",
-                "npm-package-arg": "^11.0.2",
-                "npm-pick-manifest": "^9.0.1",
-                "npm-registry-fetch": "^17.0.1",
-                "pacote": "^18.0.6",
-                "parse-conflict-json": "^3.0.0",
-                "proc-log": "^4.2.0",
-                "proggy": "^2.0.0",
-                "promise-all-reject-late": "^1.0.0",
-                "promise-call-limit": "^3.0.1",
-                "read-package-json-fast": "^3.0.2",
-                "semver": "^7.3.7",
-                "ssri": "^10.0.6",
-                "treeverse": "^3.0.0",
-                "walk-up-path": "^3.0.1"
-            },
-            "bin": {
-                "arborist": "bin/index.js"
+                "agent-base": "^7.0.2",
+                "debug": "4"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": ">= 14"
             }
         },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/bin-links": {
-            "version": "4.0.4",
+        "node_modules/npm/node_modules/iconv-lite": {
+            "version": "0.6.3",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
+            "optional": true,
             "dependencies": {
-                "cmd-shim": "^6.0.0",
-                "npm-normalize-package-bin": "^3.0.0",
-                "read-cmd-shim": "^4.0.0",
-                "write-file-atomic": "^5.0.0"
+                "safer-buffer": ">= 2.1.2 < 3.0.0"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/cmd-shim": {
-            "version": "6.0.3",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/common-ancestor-path": {
-            "version": "1.0.1",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/json-stringify-nice": {
-            "version": "1.1.4",
-            "inBundle": true,
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
+                "node": ">=0.10.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/lru-cache": {
-            "version": "10.4.3",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/npm-normalize-package-bin": {
-            "version": "3.0.1",
+        "node_modules/npm/node_modules/ignore-walk": {
+            "version": "6.0.5",
             "inBundle": true,
             "license": "ISC",
+            "dependencies": {
+                "minimatch": "^9.0.0"
+            },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/proggy": {
-            "version": "2.0.0",
+        "node_modules/npm/node_modules/imurmurhash": {
+            "version": "0.1.4",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/promise-all-reject-late": {
-            "version": "1.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/promise-call-limit": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
+                "node": ">=0.8.19"
             }
         },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/read-cmd-shim": {
+        "node_modules/npm/node_modules/indent-string": {
             "version": "4.0.0",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/read-package-json-fast": {
-            "version": "3.0.2",
+        "node_modules/npm/node_modules/ini": {
+            "version": "4.1.2",
             "inBundle": true,
             "license": "ISC",
-            "dependencies": {
-                "json-parse-even-better-errors": "^3.0.0",
-                "npm-normalize-package-bin": "^3.0.0"
-            },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmfund/node_modules/walk-up-path": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/libnpmhook": {
-            "version": "10.0.5",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "aproba": "^2.0.0",
-                "npm-registry-fetch": "^17.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmhook/node_modules/aproba": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/libnpmorg": {
-            "version": "6.0.6",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "aproba": "^2.0.0",
-                "npm-registry-fetch": "^17.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/libnpmorg/node_modules/aproba": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/libnpmpack": {
-            "version": "7.0.4",
+        "node_modules/npm/node_modules/init-package-json": {
+            "version": "6.0.3",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "@npmcli/arborist": "^7.5.4",
-                "@npmcli/run-script": "^8.1.0",
-                "npm-package-arg": "^11.0.2",
-                "pacote": "^18.0.6"
+                "@npmcli/package-json": "^5.0.0",
+                "npm-package-arg": "^11.0.0",
+                "promzard": "^1.0.0",
+                "read": "^3.0.1",
+                "semver": "^7.3.5",
+                "validate-npm-package-license": "^3.0.4",
+                "validate-npm-package-name": "^5.0.0"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/@npmcli/arborist": {
-            "version": "7.5.4",
+        "node_modules/npm/node_modules/ip-address": {
+            "version": "9.0.5",
             "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "@isaacs/string-locale-compare": "^1.1.0",
-                "@npmcli/fs": "^3.1.1",
-                "@npmcli/installed-package-contents": "^2.1.0",
-                "@npmcli/map-workspaces": "^3.0.2",
-                "@npmcli/metavuln-calculator": "^7.1.1",
-                "@npmcli/name-from-folder": "^2.0.0",
-                "@npmcli/node-gyp": "^3.0.0",
-                "@npmcli/package-json": "^5.1.0",
-                "@npmcli/query": "^3.1.0",
-                "@npmcli/redact": "^2.0.0",
-                "@npmcli/run-script": "^8.1.0",
-                "bin-links": "^4.0.4",
-                "cacache": "^18.0.3",
-                "common-ancestor-path": "^1.0.1",
-                "hosted-git-info": "^7.0.2",
-                "json-parse-even-better-errors": "^3.0.2",
-                "json-stringify-nice": "^1.1.4",
-                "lru-cache": "^10.2.2",
-                "minimatch": "^9.0.4",
-                "nopt": "^7.2.1",
-                "npm-install-checks": "^6.2.0",
-                "npm-package-arg": "^11.0.2",
-                "npm-pick-manifest": "^9.0.1",
-                "npm-registry-fetch": "^17.0.1",
-                "pacote": "^18.0.6",
-                "parse-conflict-json": "^3.0.0",
-                "proc-log": "^4.2.0",
-                "proggy": "^2.0.0",
-                "promise-all-reject-late": "^1.0.0",
-                "promise-call-limit": "^3.0.1",
-                "read-package-json-fast": "^3.0.2",
-                "semver": "^7.3.7",
-                "ssri": "^10.0.6",
-                "treeverse": "^3.0.0",
-                "walk-up-path": "^3.0.1"
-            },
-            "bin": {
-                "arborist": "bin/index.js"
+            "license": "MIT",
+            "dependencies": {
+                "jsbn": "1.1.0",
+                "sprintf-js": "^1.1.3"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": ">= 12"
             }
         },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/bin-links": {
-            "version": "4.0.4",
+        "node_modules/npm/node_modules/ip-regex": {
+            "version": "5.0.0",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
+            "engines": {
+                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/npm/node_modules/is-cidr": {
+            "version": "5.0.5",
+            "inBundle": true,
+            "license": "BSD-2-Clause",
             "dependencies": {
-                "cmd-shim": "^6.0.0",
-                "npm-normalize-package-bin": "^3.0.0",
-                "read-cmd-shim": "^4.0.0",
-                "write-file-atomic": "^5.0.0"
+                "cidr-regex": "^4.0.4"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=14"
             }
         },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/cmd-shim": {
-            "version": "6.0.3",
+        "node_modules/npm/node_modules/is-core-module": {
+            "version": "2.13.1",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
+            "dependencies": {
+                "hasown": "^2.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/npm/node_modules/is-fullwidth-code-point": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "MIT",
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/common-ancestor-path": {
+        "node_modules/npm/node_modules/is-lambda": {
             "version": "1.0.1",
             "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/isexe": {
+            "version": "2.0.0",
+            "inBundle": true,
             "license": "ISC"
         },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/json-stringify-nice": {
-            "version": "1.1.4",
+        "node_modules/npm/node_modules/jackspeak": {
+            "version": "2.3.6",
             "inBundle": true,
-            "license": "ISC",
+            "license": "BlueOak-1.0.0",
+            "dependencies": {
+                "@isaacs/cliui": "^8.0.2"
+            },
+            "engines": {
+                "node": ">=14"
+            },
             "funding": {
                 "url": "https://github.com/sponsors/isaacs"
+            },
+            "optionalDependencies": {
+                "@pkgjs/parseargs": "^0.11.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/lru-cache": {
-            "version": "10.4.3",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/npm-normalize-package-bin": {
-            "version": "3.0.1",
+        "node_modules/npm/node_modules/jsbn": {
+            "version": "1.1.0",
             "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
+            "license": "MIT"
         },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/proggy": {
-            "version": "2.0.0",
+        "node_modules/npm/node_modules/json-parse-even-better-errors": {
+            "version": "3.0.2",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/promise-all-reject-late": {
-            "version": "1.0.1",
+        "node_modules/npm/node_modules/json-stringify-nice": {
+            "version": "1.1.4",
             "inBundle": true,
             "license": "ISC",
             "funding": {
                 "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/promise-call-limit": {
-            "version": "3.0.1",
+        "node_modules/npm/node_modules/jsonparse": {
+            "version": "1.3.1",
+            "engines": [
+                "node >= 0.2.0"
+            ],
             "inBundle": true,
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
+            "license": "MIT"
         },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/read-cmd-shim": {
-            "version": "4.0.0",
+        "node_modules/npm/node_modules/just-diff": {
+            "version": "6.0.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/just-diff-apply": {
+            "version": "5.5.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/libnpmaccess": {
+            "version": "8.0.6",
             "inBundle": true,
             "license": "ISC",
+            "dependencies": {
+                "npm-package-arg": "^11.0.2",
+                "npm-registry-fetch": "^17.0.1"
+            },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/read-package-json-fast": {
-            "version": "3.0.2",
+        "node_modules/npm/node_modules/libnpmdiff": {
+            "version": "6.1.2",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "json-parse-even-better-errors": "^3.0.0",
-                "npm-normalize-package-bin": "^3.0.0"
+                "@npmcli/arborist": "^7.5.2",
+                "@npmcli/installed-package-contents": "^2.1.0",
+                "binary-extensions": "^2.3.0",
+                "diff": "^5.1.0",
+                "minimatch": "^9.0.4",
+                "npm-package-arg": "^11.0.2",
+                "pacote": "^18.0.6",
+                "tar": "^6.2.1"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmpack/node_modules/walk-up-path": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "ISC"
-        },
-        "node_modules/npm/node_modules/libnpmpublish": {
-            "version": "9.0.9",
+        "node_modules/npm/node_modules/libnpmexec": {
+            "version": "8.1.1",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
+                "@npmcli/arborist": "^7.5.2",
+                "@npmcli/run-script": "^8.1.0",
                 "ci-info": "^4.0.0",
-                "normalize-package-data": "^6.0.1",
                 "npm-package-arg": "^11.0.2",
-                "npm-registry-fetch": "^17.0.1",
+                "pacote": "^18.0.6",
                 "proc-log": "^4.2.0",
+                "read": "^3.0.1",
+                "read-package-json-fast": "^3.0.2",
                 "semver": "^7.3.7",
-                "sigstore": "^2.2.0",
-                "ssri": "^10.0.6"
+                "walk-up-path": "^3.0.1"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmpublish/node_modules/@sigstore/tuf": {
-            "version": "2.3.4",
+        "node_modules/npm/node_modules/libnpmfund": {
+            "version": "5.0.10",
             "inBundle": true,
-            "license": "Apache-2.0",
+            "license": "ISC",
             "dependencies": {
-                "@sigstore/protobuf-specs": "^0.3.2",
-                "tuf-js": "^2.2.1"
+                "@npmcli/arborist": "^7.5.2"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmpublish/node_modules/debug": {
-            "version": "4.3.5",
+        "node_modules/npm/node_modules/libnpmhook": {
+            "version": "10.0.5",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC",
             "dependencies": {
-                "ms": "2.1.2"
+                "aproba": "^2.0.0",
+                "npm-registry-fetch": "^17.0.1"
             },
             "engines": {
-                "node": ">=6.0"
-            },
-            "peerDependenciesMeta": {
-                "supports-color": {
-                    "optional": true
-                }
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmpublish/node_modules/ms": {
-            "version": "2.1.2",
+        "node_modules/npm/node_modules/libnpmorg": {
+            "version": "6.0.6",
             "inBundle": true,
-            "license": "MIT"
+            "license": "ISC",
+            "dependencies": {
+                "aproba": "^2.0.0",
+                "npm-registry-fetch": "^17.0.1"
+            },
+            "engines": {
+                "node": "^16.14.0 || >=18.0.0"
+            }
         },
-        "node_modules/npm/node_modules/libnpmpublish/node_modules/sigstore": {
-            "version": "2.3.1",
+        "node_modules/npm/node_modules/libnpmpack": {
+            "version": "7.0.2",
             "inBundle": true,
-            "license": "Apache-2.0",
+            "license": "ISC",
             "dependencies": {
-                "@sigstore/bundle": "^2.3.2",
-                "@sigstore/core": "^1.0.0",
-                "@sigstore/protobuf-specs": "^0.3.2",
-                "@sigstore/sign": "^2.3.2",
-                "@sigstore/tuf": "^2.3.4",
-                "@sigstore/verify": "^1.2.1"
+                "@npmcli/arborist": "^7.5.2",
+                "@npmcli/run-script": "^8.1.0",
+                "npm-package-arg": "^11.0.2",
+                "pacote": "^18.0.6"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmpublish/node_modules/tuf-js": {
-            "version": "2.2.1",
+        "node_modules/npm/node_modules/libnpmpublish": {
+            "version": "9.0.8",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC",
             "dependencies": {
-                "@tufjs/models": "2.0.1",
-                "debug": "^4.3.4",
-                "make-fetch-happen": "^13.0.1"
+                "ci-info": "^4.0.0",
+                "normalize-package-data": "^6.0.1",
+                "npm-package-arg": "^11.0.2",
+                "npm-registry-fetch": "^17.0.1",
+                "proc-log": "^4.2.0",
+                "semver": "^7.3.7",
+                "sigstore": "^2.2.0",
+                "ssri": "^10.0.6"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
         "node_modules/npm/node_modules/libnpmsearch": {
-            "version": "7.0.6",
+            "version": "7.0.5",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
@@ -31886,13 +30686,8 @@
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/libnpmteam/node_modules/aproba": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "ISC"
-        },
         "node_modules/npm/node_modules/libnpmversion": {
-            "version": "6.0.3",
+            "version": "6.0.2",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
@@ -31906,6 +30701,14 @@
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
+        "node_modules/npm/node_modules/lru-cache": {
+            "version": "10.2.2",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "14 || >=16.14"
+            }
+        },
         "node_modules/npm/node_modules/make-fetch-happen": {
             "version": "13.0.1",
             "inBundle": true,
@@ -31928,43 +30731,40 @@
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/encoding": {
-            "version": "0.1.13",
+        "node_modules/npm/node_modules/minimatch": {
+            "version": "9.0.4",
             "inBundle": true,
-            "license": "MIT",
-            "optional": true,
+            "license": "ISC",
             "dependencies": {
-                "iconv-lite": "^0.6.2"
+                "brace-expansion": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/err-code": {
-            "version": "2.0.3",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/http-cache-semantics": {
-            "version": "4.1.1",
+        "node_modules/npm/node_modules/minipass": {
+            "version": "7.1.1",
             "inBundle": true,
-            "license": "BSD-2-Clause"
+            "license": "ISC",
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            }
         },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/iconv-lite": {
-            "version": "0.6.3",
+        "node_modules/npm/node_modules/minipass-collect": {
+            "version": "2.0.1",
             "inBundle": true,
-            "license": "MIT",
-            "optional": true,
+            "license": "ISC",
             "dependencies": {
-                "safer-buffer": ">= 2.1.2 < 3.0.0"
+                "minipass": "^7.0.3"
             },
             "engines": {
-                "node": ">=0.10.0"
+                "node": ">=16 || 14 >=14.17"
             }
         },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/is-lambda": {
-            "version": "1.0.1",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass-fetch": {
+        "node_modules/npm/node_modules/minipass-fetch": {
             "version": "3.0.5",
             "inBundle": true,
             "license": "MIT",
@@ -31980,7 +30780,7 @@
                 "encoding": "^0.1.13"
             }
         },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass-flush": {
+        "node_modules/npm/node_modules/minipass-flush": {
             "version": "1.0.5",
             "inBundle": true,
             "license": "ISC",
@@ -31991,7 +30791,7 @@
                 "node": ">= 8"
             }
         },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass-flush/node_modules/minipass": {
+        "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": {
             "version": "3.3.6",
             "inBundle": true,
             "license": "ISC",
@@ -32002,18 +30802,16 @@
                 "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass-sized": {
-            "version": "1.0.3",
+        "node_modules/npm/node_modules/minipass-json-stream": {
+            "version": "1.0.1",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "dependencies": {
+                "jsonparse": "^1.3.1",
                 "minipass": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minipass-sized/node_modules/minipass": {
+        "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": {
             "version": "3.3.6",
             "inBundle": true,
             "license": "ISC",
@@ -32024,19 +30822,18 @@
                 "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minizlib": {
-            "version": "2.1.2",
+        "node_modules/npm/node_modules/minipass-pipeline": {
+            "version": "1.2.4",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC",
             "dependencies": {
-                "minipass": "^3.0.0",
-                "yallist": "^4.0.0"
+                "minipass": "^3.0.0"
             },
             "engines": {
-                "node": ">= 8"
+                "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/minizlib/node_modules/minipass": {
+        "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": {
             "version": "3.3.6",
             "inBundle": true,
             "license": "ISC",
@@ -32047,95 +30844,60 @@
                 "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator": {
-            "version": "0.6.3",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 0.6"
-            }
-        },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/promise-retry": {
-            "version": "2.0.1",
+        "node_modules/npm/node_modules/minipass-sized": {
+            "version": "1.0.3",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC",
             "dependencies": {
-                "err-code": "^2.0.2",
-                "retry": "^0.12.0"
+                "minipass": "^3.0.0"
             },
             "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/retry": {
-            "version": "0.12.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 4"
+                "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/make-fetch-happen/node_modules/safer-buffer": {
-            "version": "2.1.2",
-            "inBundle": true,
-            "license": "MIT",
-            "optional": true
-        },
-        "node_modules/npm/node_modules/minimatch": {
-            "version": "9.0.4",
+        "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": {
+            "version": "3.3.6",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "brace-expansion": "^2.0.1"
+                "yallist": "^4.0.0"
             },
             "engines": {
-                "node": ">=16 || 14 >=14.17"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
+                "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/minimatch/node_modules/balanced-match": {
-            "version": "1.0.2",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/minimatch/node_modules/brace-expansion": {
-            "version": "2.0.1",
+        "node_modules/npm/node_modules/minizlib": {
+            "version": "2.1.2",
             "inBundle": true,
             "license": "MIT",
             "dependencies": {
-                "balanced-match": "^1.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/minipass": {
-            "version": "7.1.1",
-            "inBundle": true,
-            "license": "ISC",
+                "minipass": "^3.0.0",
+                "yallist": "^4.0.0"
+            },
             "engines": {
-                "node": ">=16 || 14 >=14.17"
+                "node": ">= 8"
             }
         },
-        "node_modules/npm/node_modules/minipass-pipeline": {
-            "version": "1.2.4",
+        "node_modules/npm/node_modules/minizlib/node_modules/minipass": {
+            "version": "3.3.6",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "minipass": "^3.0.0"
+                "yallist": "^4.0.0"
             },
             "engines": {
                 "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": {
-            "version": "3.3.6",
+        "node_modules/npm/node_modules/mkdirp": {
+            "version": "1.0.4",
             "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "yallist": "^4.0.0"
+            "license": "MIT",
+            "bin": {
+                "mkdirp": "bin/cmd.js"
             },
             "engines": {
-                "node": ">=8"
+                "node": ">=10"
             }
         },
         "node_modules/npm/node_modules/ms": {
@@ -32143,8 +30905,24 @@
             "inBundle": true,
             "license": "MIT"
         },
+        "node_modules/npm/node_modules/mute-stream": {
+            "version": "1.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/negotiator": {
+            "version": "0.6.3",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
         "node_modules/npm/node_modules/node-gyp": {
-            "version": "10.2.0",
+            "version": "10.1.0",
             "inBundle": true,
             "license": "MIT",
             "dependencies": {
@@ -32154,9 +30932,9 @@
                 "graceful-fs": "^4.2.6",
                 "make-fetch-happen": "^13.0.0",
                 "nopt": "^7.0.0",
-                "proc-log": "^4.1.0",
+                "proc-log": "^3.0.0",
                 "semver": "^7.3.5",
-                "tar": "^6.2.1",
+                "tar": "^6.1.2",
                 "which": "^4.0.0"
             },
             "bin": {
@@ -32166,19 +30944,14 @@
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/node-gyp/node_modules/env-paths": {
-            "version": "2.2.1",
+        "node_modules/npm/node_modules/node-gyp/node_modules/proc-log": {
+            "version": "3.0.0",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC",
             "engines": {
-                "node": ">=6"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/node-gyp/node_modules/exponential-backoff": {
-            "version": "3.1.1",
-            "inBundle": true,
-            "license": "Apache-2.0"
-        },
         "node_modules/npm/node_modules/nopt": {
             "version": "7.2.1",
             "inBundle": true,
@@ -32194,11 +30967,12 @@
             }
         },
         "node_modules/npm/node_modules/normalize-package-data": {
-            "version": "6.0.2",
+            "version": "6.0.1",
             "inBundle": true,
             "license": "BSD-2-Clause",
             "dependencies": {
                 "hosted-git-info": "^7.0.0",
+                "is-core-module": "^2.8.1",
                 "semver": "^7.3.5",
                 "validate-npm-package-license": "^3.0.4"
             },
@@ -32206,43 +30980,6 @@
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/normalize-package-data/node_modules/spdx-correct": {
-            "version": "3.2.0",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "dependencies": {
-                "spdx-expression-parse": "^3.0.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/normalize-package-data/node_modules/spdx-exceptions": {
-            "version": "2.5.0",
-            "inBundle": true,
-            "license": "CC-BY-3.0"
-        },
-        "node_modules/npm/node_modules/normalize-package-data/node_modules/spdx-expression-parse": {
-            "version": "3.0.1",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "spdx-exceptions": "^2.1.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/normalize-package-data/node_modules/spdx-license-ids": {
-            "version": "3.0.18",
-            "inBundle": true,
-            "license": "CC0-1.0"
-        },
-        "node_modules/npm/node_modules/normalize-package-data/node_modules/validate-npm-package-license": {
-            "version": "3.0.4",
-            "inBundle": true,
-            "license": "Apache-2.0",
-            "dependencies": {
-                "spdx-correct": "^3.0.0",
-                "spdx-expression-parse": "^3.0.0"
-            }
-        },
         "node_modules/npm/node_modules/npm-audit-report": {
             "version": "5.0.0",
             "inBundle": true,
@@ -32251,46 +30988,29 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/npm-install-checks": {
-            "version": "6.3.0",
-            "inBundle": true,
-            "license": "BSD-2-Clause",
-            "dependencies": {
-                "semver": "^7.1.1"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-package-arg": {
-            "version": "11.0.2",
+        "node_modules/npm/node_modules/npm-bundled": {
+            "version": "3.0.1",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "hosted-git-info": "^7.0.0",
-                "proc-log": "^4.0.0",
-                "semver": "^7.3.5",
-                "validate-npm-package-name": "^5.0.0"
+                "npm-normalize-package-bin": "^3.0.0"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/npm-pick-manifest": {
-            "version": "9.1.0",
+        "node_modules/npm/node_modules/npm-install-checks": {
+            "version": "6.3.0",
             "inBundle": true,
-            "license": "ISC",
+            "license": "BSD-2-Clause",
             "dependencies": {
-                "npm-install-checks": "^6.0.0",
-                "npm-normalize-package-bin": "^3.0.0",
-                "npm-package-arg": "^11.0.0",
-                "semver": "^7.3.5"
+                "semver": "^7.1.1"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": {
+        "node_modules/npm/node_modules/npm-normalize-package-bin": {
             "version": "3.0.1",
             "inBundle": true,
             "license": "ISC",
@@ -32298,132 +31018,75 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/npm-profile": {
-            "version": "10.0.0",
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "npm-registry-fetch": "^17.0.1",
-                "proc-log": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=18.0.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-registry-fetch": {
-            "version": "17.1.0",
+        "node_modules/npm/node_modules/npm-package-arg": {
+            "version": "11.0.2",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "@npmcli/redact": "^2.0.0",
-                "jsonparse": "^1.3.1",
-                "make-fetch-happen": "^13.0.0",
-                "minipass": "^7.0.2",
-                "minipass-fetch": "^3.0.0",
-                "minizlib": "^2.1.2",
-                "npm-package-arg": "^11.0.0",
-                "proc-log": "^4.0.0"
+                "hosted-git-info": "^7.0.0",
+                "proc-log": "^4.0.0",
+                "semver": "^7.3.5",
+                "validate-npm-package-name": "^5.0.0"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/encoding": {
-            "version": "0.1.13",
-            "inBundle": true,
-            "license": "MIT",
-            "optional": true,
-            "dependencies": {
-                "iconv-lite": "^0.6.2"
-            }
-        },
-        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/iconv-lite": {
-            "version": "0.6.3",
-            "inBundle": true,
-            "license": "MIT",
-            "optional": true,
-            "dependencies": {
-                "safer-buffer": ">= 2.1.2 < 3.0.0"
-            },
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/jsonparse": {
-            "version": "1.3.1",
-            "engines": [
-                "node >= 0.2.0"
-            ],
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minipass-fetch": {
-            "version": "3.0.5",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "minipass": "^7.0.3",
-                "minipass-sized": "^1.0.3",
-                "minizlib": "^2.1.2"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            },
-            "optionalDependencies": {
-                "encoding": "^0.1.13"
-            }
-        },
-        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minipass-sized": {
-            "version": "1.0.3",
+        "node_modules/npm/node_modules/npm-packlist": {
+            "version": "8.0.2",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "minipass": "^3.0.0"
+                "ignore-walk": "^6.0.4"
             },
             "engines": {
-                "node": ">=8"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minipass-sized/node_modules/minipass": {
-            "version": "3.3.6",
+        "node_modules/npm/node_modules/npm-pick-manifest": {
+            "version": "9.0.1",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "yallist": "^4.0.0"
+                "npm-install-checks": "^6.0.0",
+                "npm-normalize-package-bin": "^3.0.0",
+                "npm-package-arg": "^11.0.0",
+                "semver": "^7.3.5"
             },
             "engines": {
-                "node": ">=8"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": {
-            "version": "2.1.2",
+        "node_modules/npm/node_modules/npm-profile": {
+            "version": "10.0.0",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC",
             "dependencies": {
-                "minipass": "^3.0.0",
-                "yallist": "^4.0.0"
+                "npm-registry-fetch": "^17.0.1",
+                "proc-log": "^4.0.0"
             },
             "engines": {
-                "node": ">= 8"
+                "node": ">=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib/node_modules/minipass": {
-            "version": "3.3.6",
+        "node_modules/npm/node_modules/npm-registry-fetch": {
+            "version": "17.0.1",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "yallist": "^4.0.0"
+                "@npmcli/redact": "^2.0.0",
+                "make-fetch-happen": "^13.0.0",
+                "minipass": "^7.0.2",
+                "minipass-fetch": "^3.0.0",
+                "minipass-json-stream": "^1.0.1",
+                "minizlib": "^2.1.2",
+                "npm-package-arg": "^11.0.0",
+                "proc-log": "^4.0.0"
             },
             "engines": {
-                "node": ">=8"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/npm-registry-fetch/node_modules/safer-buffer": {
-            "version": "2.1.2",
-            "inBundle": true,
-            "license": "MIT",
-            "optional": true
-        },
         "node_modules/npm/node_modules/npm-user-validate": {
             "version": "2.0.1",
             "inBundle": true,
@@ -32446,34 +31109,6 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/npm/node_modules/p-map/node_modules/aggregate-error": {
-            "version": "3.1.0",
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "clean-stack": "^2.0.0",
-                "indent-string": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/npm/node_modules/p-map/node_modules/clean-stack": {
-            "version": "2.2.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/npm/node_modules/p-map/node_modules/indent-string": {
-            "version": "4.0.0",
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=8"
-            }
-        },
         "node_modules/npm/node_modules/pacote": {
             "version": "18.0.6",
             "inBundle": true,
@@ -32504,67 +31139,92 @@
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/pacote/node_modules/@sigstore/tuf": {
-            "version": "2.3.4",
+        "node_modules/npm/node_modules/parse-conflict-json": {
+            "version": "3.0.1",
             "inBundle": true,
-            "license": "Apache-2.0",
+            "license": "ISC",
             "dependencies": {
-                "@sigstore/protobuf-specs": "^0.3.2",
-                "tuf-js": "^2.2.1"
+                "json-parse-even-better-errors": "^3.0.0",
+                "just-diff": "^6.0.0",
+                "just-diff-apply": "^5.2.0"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/pacote/node_modules/debug": {
-            "version": "4.3.5",
+        "node_modules/npm/node_modules/path-key": {
+            "version": "3.1.1",
             "inBundle": true,
             "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/path-scurry": {
+            "version": "1.11.1",
+            "inBundle": true,
+            "license": "BlueOak-1.0.0",
             "dependencies": {
-                "ms": "2.1.2"
+                "lru-cache": "^10.2.0",
+                "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
             },
             "engines": {
-                "node": ">=6.0"
+                "node": ">=16 || 14 >=14.18"
             },
-            "peerDependenciesMeta": {
-                "supports-color": {
-                    "optional": true
-                }
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "node_modules/npm/node_modules/pacote/node_modules/err-code": {
-            "version": "2.0.3",
-            "inBundle": true,
-            "license": "MIT"
-        },
-        "node_modules/npm/node_modules/pacote/node_modules/ignore-walk": {
-            "version": "6.0.5",
+        "node_modules/npm/node_modules/postcss-selector-parser": {
+            "version": "6.0.16",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "dependencies": {
-                "minimatch": "^9.0.0"
+                "cssesc": "^3.0.0",
+                "util-deprecate": "^1.0.2"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=4"
             }
         },
-        "node_modules/npm/node_modules/pacote/node_modules/ms": {
-            "version": "2.1.2",
+        "node_modules/npm/node_modules/proc-log": {
+            "version": "4.2.0",
             "inBundle": true,
-            "license": "MIT"
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
         },
-        "node_modules/npm/node_modules/pacote/node_modules/npm-packlist": {
-            "version": "8.0.2",
+        "node_modules/npm/node_modules/proggy": {
+            "version": "2.0.0",
             "inBundle": true,
             "license": "ISC",
-            "dependencies": {
-                "ignore-walk": "^6.0.4"
-            },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/pacote/node_modules/promise-retry": {
+        "node_modules/npm/node_modules/promise-all-reject-late": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/promise-call-limit": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/promise-inflight": {
+            "version": "1.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
+        "node_modules/npm/node_modules/promise-retry": {
             "version": "2.0.1",
             "inBundle": true,
             "license": "MIT",
@@ -32576,113 +31236,172 @@
                 "node": ">=10"
             }
         },
-        "node_modules/npm/node_modules/pacote/node_modules/retry": {
-            "version": "0.12.0",
+        "node_modules/npm/node_modules/promzard": {
+            "version": "1.0.2",
             "inBundle": true,
-            "license": "MIT",
+            "license": "ISC",
+            "dependencies": {
+                "read": "^3.0.1"
+            },
             "engines": {
-                "node": ">= 4"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/pacote/node_modules/sigstore": {
-            "version": "2.3.1",
+        "node_modules/npm/node_modules/qrcode-terminal": {
+            "version": "0.12.0",
             "inBundle": true,
-            "license": "Apache-2.0",
+            "bin": {
+                "qrcode-terminal": "bin/qrcode-terminal.js"
+            }
+        },
+        "node_modules/npm/node_modules/read": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC",
             "dependencies": {
-                "@sigstore/bundle": "^2.3.2",
-                "@sigstore/core": "^1.0.0",
-                "@sigstore/protobuf-specs": "^0.3.2",
-                "@sigstore/sign": "^2.3.2",
-                "@sigstore/tuf": "^2.3.4",
-                "@sigstore/verify": "^1.2.1"
+                "mute-stream": "^1.0.0"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/pacote/node_modules/tuf-js": {
-            "version": "2.2.1",
+        "node_modules/npm/node_modules/read-cmd-shim": {
+            "version": "4.0.0",
             "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "@tufjs/models": "2.0.1",
-                "debug": "^4.3.4",
-                "make-fetch-happen": "^13.0.1"
-            },
+            "license": "ISC",
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/parse-conflict-json": {
-            "version": "3.0.1",
+        "node_modules/npm/node_modules/read-package-json-fast": {
+            "version": "3.0.2",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
                 "json-parse-even-better-errors": "^3.0.0",
-                "just-diff": "^6.0.0",
-                "just-diff-apply": "^5.2.0"
+                "npm-normalize-package-bin": "^3.0.0"
             },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/parse-conflict-json/node_modules/just-diff": {
-            "version": "6.0.2",
+        "node_modules/npm/node_modules/retry": {
+            "version": "0.12.0",
             "inBundle": true,
-            "license": "MIT"
+            "license": "MIT",
+            "engines": {
+                "node": ">= 4"
+            }
         },
-        "node_modules/npm/node_modules/parse-conflict-json/node_modules/just-diff-apply": {
-            "version": "5.5.0",
+        "node_modules/npm/node_modules/safer-buffer": {
+            "version": "2.1.2",
             "inBundle": true,
-            "license": "MIT"
+            "license": "MIT",
+            "optional": true
         },
-        "node_modules/npm/node_modules/proc-log": {
-            "version": "4.2.0",
+        "node_modules/npm/node_modules/semver": {
+            "version": "7.6.2",
             "inBundle": true,
             "license": "ISC",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=10"
             }
         },
-        "node_modules/npm/node_modules/qrcode-terminal": {
-            "version": "0.12.0",
+        "node_modules/npm/node_modules/shebang-command": {
+            "version": "2.0.0",
             "inBundle": true,
-            "bin": {
-                "qrcode-terminal": "bin/qrcode-terminal.js"
+            "license": "MIT",
+            "dependencies": {
+                "shebang-regex": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/read": {
-            "version": "3.0.1",
+        "node_modules/npm/node_modules/shebang-regex": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/signal-exit": {
+            "version": "4.1.0",
             "inBundle": true,
             "license": "ISC",
+            "engines": {
+                "node": ">=14"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/npm/node_modules/sigstore": {
+            "version": "2.3.0",
+            "inBundle": true,
+            "license": "Apache-2.0",
             "dependencies": {
-                "mute-stream": "^1.0.0"
+                "@sigstore/bundle": "^2.3.1",
+                "@sigstore/core": "^1.0.0",
+                "@sigstore/protobuf-specs": "^0.3.1",
+                "@sigstore/sign": "^2.3.0",
+                "@sigstore/tuf": "^2.3.1",
+                "@sigstore/verify": "^1.2.0"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/read/node_modules/mute-stream": {
-            "version": "1.0.0",
+        "node_modules/npm/node_modules/smart-buffer": {
+            "version": "4.2.0",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">= 6.0.0",
+                "npm": ">= 3.0.0"
             }
         },
-        "node_modules/npm/node_modules/semver": {
-            "version": "7.6.2",
+        "node_modules/npm/node_modules/socks": {
+            "version": "2.8.3",
             "inBundle": true,
-            "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
+            "license": "MIT",
+            "dependencies": {
+                "ip-address": "^9.0.5",
+                "smart-buffer": "^4.2.0"
             },
             "engines": {
-                "node": ">=10"
+                "node": ">= 10.0.0",
+                "npm": ">= 3.0.0"
             }
         },
-        "node_modules/npm/node_modules/spdx-expression-parse": {
-            "version": "4.0.0",
+        "node_modules/npm/node_modules/socks-proxy-agent": {
+            "version": "8.0.3",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "agent-base": "^7.1.1",
+                "debug": "^4.3.4",
+                "socks": "^2.7.1"
+            },
+            "engines": {
+                "node": ">= 14"
+            }
+        },
+        "node_modules/npm/node_modules/spdx-correct": {
+            "version": "3.2.0",
+            "inBundle": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "spdx-expression-parse": "^3.0.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": {
+            "version": "3.0.1",
             "inBundle": true,
             "license": "MIT",
             "dependencies": {
@@ -32690,16 +31409,30 @@
                 "spdx-license-ids": "^3.0.0"
             }
         },
-        "node_modules/npm/node_modules/spdx-expression-parse/node_modules/spdx-exceptions": {
+        "node_modules/npm/node_modules/spdx-exceptions": {
             "version": "2.5.0",
             "inBundle": true,
             "license": "CC-BY-3.0"
         },
-        "node_modules/npm/node_modules/spdx-expression-parse/node_modules/spdx-license-ids": {
-            "version": "3.0.18",
+        "node_modules/npm/node_modules/spdx-expression-parse": {
+            "version": "4.0.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/spdx-license-ids": {
+            "version": "3.0.17",
             "inBundle": true,
             "license": "CC0-1.0"
         },
+        "node_modules/npm/node_modules/sprintf-js": {
+            "version": "1.1.3",
+            "inBundle": true,
+            "license": "BSD-3-Clause"
+        },
         "node_modules/npm/node_modules/ssri": {
             "version": "10.0.6",
             "inBundle": true,
@@ -32711,6 +31444,56 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
+        "node_modules/npm/node_modules/string-width": {
+            "version": "4.2.3",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/string-width-cjs": {
+            "name": "string-width",
+            "version": "4.2.3",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/strip-ansi": {
+            "version": "6.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ansi-regex": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/npm/node_modules/strip-ansi-cjs": {
+            "name": "strip-ansi",
+            "version": "6.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ansi-regex": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
         "node_modules/npm/node_modules/supports-color": {
             "version": "9.4.0",
             "inBundle": true,
@@ -32738,14 +31521,6 @@
                 "node": ">=10"
             }
         },
-        "node_modules/npm/node_modules/tar/node_modules/chownr": {
-            "version": "2.0.0",
-            "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": ">=10"
-            }
-        },
         "node_modules/npm/node_modules/tar/node_modules/fs-minipass": {
             "version": "2.1.0",
             "inBundle": true,
@@ -32776,56 +31551,80 @@
                 "node": ">=8"
             }
         },
-        "node_modules/npm/node_modules/tar/node_modules/minizlib": {
-            "version": "2.1.2",
+        "node_modules/npm/node_modules/text-table": {
+            "version": "0.2.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/tiny-relative-date": {
+            "version": "1.3.0",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/treeverse": {
+            "version": "3.0.0",
+            "inBundle": true,
+            "license": "ISC",
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            }
+        },
+        "node_modules/npm/node_modules/tuf-js": {
+            "version": "2.2.1",
             "inBundle": true,
             "license": "MIT",
             "dependencies": {
-                "minipass": "^3.0.0",
-                "yallist": "^4.0.0"
+                "@tufjs/models": "2.0.1",
+                "debug": "^4.3.4",
+                "make-fetch-happen": "^13.0.1"
             },
             "engines": {
-                "node": ">= 8"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/tar/node_modules/minizlib/node_modules/minipass": {
-            "version": "3.3.6",
+        "node_modules/npm/node_modules/unique-filename": {
+            "version": "3.0.0",
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "yallist": "^4.0.0"
+                "unique-slug": "^4.0.0"
             },
             "engines": {
-                "node": ">=8"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/tar/node_modules/mkdirp": {
-            "version": "1.0.4",
+        "node_modules/npm/node_modules/unique-slug": {
+            "version": "4.0.0",
             "inBundle": true,
-            "license": "MIT",
-            "bin": {
-                "mkdirp": "bin/cmd.js"
+            "license": "ISC",
+            "dependencies": {
+                "imurmurhash": "^0.1.4"
             },
             "engines": {
-                "node": ">=10"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/text-table": {
-            "version": "0.2.0",
+        "node_modules/npm/node_modules/util-deprecate": {
+            "version": "1.0.2",
             "inBundle": true,
             "license": "MIT"
         },
-        "node_modules/npm/node_modules/tiny-relative-date": {
-            "version": "1.3.0",
+        "node_modules/npm/node_modules/validate-npm-package-license": {
+            "version": "3.0.4",
             "inBundle": true,
-            "license": "MIT"
+            "license": "Apache-2.0",
+            "dependencies": {
+                "spdx-correct": "^3.0.0",
+                "spdx-expression-parse": "^3.0.0"
+            }
         },
-        "node_modules/npm/node_modules/treeverse": {
-            "version": "3.0.0",
+        "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": {
+            "version": "3.0.1",
             "inBundle": true,
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+            "license": "MIT",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
             }
         },
         "node_modules/npm/node_modules/validate-npm-package-name": {
@@ -32836,6 +31635,11 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
+        "node_modules/npm/node_modules/walk-up-path": {
+            "version": "3.0.1",
+            "inBundle": true,
+            "license": "ISC"
+        },
         "node_modules/npm/node_modules/which": {
             "version": "4.0.0",
             "inBundle": true,
@@ -32850,35 +31654,117 @@
                 "node": "^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/write-file-atomic": {
-            "version": "5.0.1",
+        "node_modules/npm/node_modules/which/node_modules/isexe": {
+            "version": "3.1.1",
             "inBundle": true,
             "license": "ISC",
+            "engines": {
+                "node": ">=16"
+            }
+        },
+        "node_modules/npm/node_modules/wrap-ansi": {
+            "version": "8.1.0",
+            "inBundle": true,
+            "license": "MIT",
             "dependencies": {
-                "imurmurhash": "^0.1.4",
-                "signal-exit": "^4.0.1"
+                "ansi-styles": "^6.1.0",
+                "string-width": "^5.0.1",
+                "strip-ansi": "^7.0.1"
             },
             "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
             }
         },
-        "node_modules/npm/node_modules/write-file-atomic/node_modules/imurmurhash": {
-            "version": "0.1.4",
+        "node_modules/npm/node_modules/wrap-ansi-cjs": {
+            "name": "wrap-ansi",
+            "version": "7.0.0",
             "inBundle": true,
             "license": "MIT",
+            "dependencies": {
+                "ansi-styles": "^4.0.0",
+                "string-width": "^4.1.0",
+                "strip-ansi": "^6.0.0"
+            },
             "engines": {
-                "node": ">=0.8.19"
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
             }
         },
-        "node_modules/npm/node_modules/write-file-atomic/node_modules/signal-exit": {
-            "version": "4.1.0",
+        "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
+            "version": "4.3.0",
             "inBundle": true,
-            "license": "ISC",
+            "license": "MIT",
+            "dependencies": {
+                "color-convert": "^2.0.1"
+            },
             "engines": {
-                "node": ">=14"
+                "node": ">=8"
             },
             "funding": {
-                "url": "https://github.com/sponsors/isaacs"
+                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
+            "version": "6.0.1",
+            "inBundle": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": {
+            "version": "9.2.2",
+            "inBundle": true,
+            "license": "MIT"
+        },
+        "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": {
+            "version": "5.1.2",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "eastasianwidth": "^0.2.0",
+                "emoji-regex": "^9.2.2",
+                "strip-ansi": "^7.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
+            "version": "7.1.0",
+            "inBundle": true,
+            "license": "MIT",
+            "dependencies": {
+                "ansi-regex": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+            }
+        },
+        "node_modules/npm/node_modules/write-file-atomic": {
+            "version": "5.0.1",
+            "inBundle": true,
+            "license": "ISC",
+            "dependencies": {
+                "imurmurhash": "^0.1.4",
+                "signal-exit": "^4.0.1"
+            },
+            "engines": {
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/npm/node_modules/yallist": {
@@ -33298,19 +32184,6 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/p-map": {
-            "version": "4.0.0",
-            "license": "MIT",
-            "dependencies": {
-                "aggregate-error": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
         "node_modules/p-retry": {
             "version": "6.2.0",
             "dev": true,
@@ -33327,45 +32200,6 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/pacote": {
-            "version": "18.0.6",
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/git": "^5.0.0",
-                "@npmcli/installed-package-contents": "^2.0.1",
-                "@npmcli/package-json": "^5.1.0",
-                "@npmcli/promise-spawn": "^7.0.0",
-                "@npmcli/run-script": "^8.0.0",
-                "cacache": "^18.0.0",
-                "fs-minipass": "^3.0.0",
-                "minipass": "^7.0.2",
-                "npm-package-arg": "^11.0.0",
-                "npm-packlist": "^8.0.0",
-                "npm-pick-manifest": "^9.0.0",
-                "npm-registry-fetch": "^17.0.0",
-                "proc-log": "^4.0.0",
-                "promise-retry": "^2.0.1",
-                "sigstore": "^2.2.0",
-                "ssri": "^10.0.0",
-                "tar": "^6.1.11"
-            },
-            "bin": {
-                "pacote": "bin/index.js"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/pacote/node_modules/fs-minipass": {
-            "version": "3.0.3",
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^7.0.3"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/pako": {
             "version": "1.0.11",
             "license": "(MIT AND Zlib)"
@@ -33404,25 +32238,6 @@
                 "xml2js": "^0.5.0"
             }
         },
-        "node_modules/parse-conflict-json": {
-            "version": "3.0.1",
-            "license": "ISC",
-            "dependencies": {
-                "json-parse-even-better-errors": "^3.0.0",
-                "just-diff": "^6.0.0",
-                "just-diff-apply": "^5.2.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/parse-conflict-json/node_modules/json-parse-even-better-errors": {
-            "version": "3.0.2",
-            "license": "MIT",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/parse-entities": {
             "version": "4.0.1",
             "license": "MIT",
@@ -34050,13 +32865,6 @@
                 "stream-parser": "~0.3.1"
             }
         },
-        "node_modules/proc-log": {
-            "version": "4.2.0",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/process": {
             "version": "0.11.10",
             "license": "MIT",
@@ -34068,13 +32876,6 @@
             "version": "2.0.1",
             "license": "MIT"
         },
-        "node_modules/proggy": {
-            "version": "2.0.0",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/progress": {
             "version": "2.0.3",
             "dev": true,
@@ -34090,42 +32891,6 @@
                 "asap": "~2.0.3"
             }
         },
-        "node_modules/promise-all-reject-late": {
-            "version": "1.0.1",
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/promise-call-limit": {
-            "version": "3.0.1",
-            "license": "ISC",
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/promise-inflight": {
-            "version": "1.0.1",
-            "license": "ISC"
-        },
-        "node_modules/promise-retry": {
-            "version": "2.0.1",
-            "license": "MIT",
-            "dependencies": {
-                "err-code": "^2.0.2",
-                "retry": "^0.12.0"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/promise-retry/node_modules/retry": {
-            "version": "0.12.0",
-            "license": "MIT",
-            "engines": {
-                "node": ">= 4"
-            }
-        },
         "node_modules/prop-types": {
             "version": "15.8.1",
             "license": "MIT",
@@ -35127,31 +33892,6 @@
                 "lodash": "^4.0.1"
             }
         },
-        "node_modules/read-cmd-shim": {
-            "version": "4.0.0",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/read-package-json-fast": {
-            "version": "3.0.2",
-            "license": "ISC",
-            "dependencies": {
-                "json-parse-even-better-errors": "^3.0.0",
-                "npm-normalize-package-bin": "^3.0.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": {
-            "version": "3.0.2",
-            "license": "MIT",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/readable-stream": {
             "version": "4.5.2",
             "license": "MIT",
@@ -36966,32 +35706,6 @@
                 "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "node_modules/sigstore": {
-            "version": "2.3.1",
-            "license": "Apache-2.0",
-            "dependencies": {
-                "@sigstore/bundle": "^2.3.2",
-                "@sigstore/core": "^1.0.0",
-                "@sigstore/protobuf-specs": "^0.3.2",
-                "@sigstore/sign": "^2.3.2",
-                "@sigstore/tuf": "^2.3.4",
-                "@sigstore/verify": "^1.2.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/sigstore/node_modules/@sigstore/tuf": {
-            "version": "2.3.4",
-            "license": "Apache-2.0",
-            "dependencies": {
-                "@sigstore/protobuf-specs": "^0.3.2",
-                "tuf-js": "^2.2.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
         "node_modules/simple-concat": {
             "version": "1.0.1",
             "funding": [
@@ -37207,28 +35921,6 @@
                 "npm": ">= 3.0.0"
             }
         },
-        "node_modules/socks-proxy-agent": {
-            "version": "8.0.3",
-            "license": "MIT",
-            "dependencies": {
-                "agent-base": "^7.1.1",
-                "debug": "^4.3.4",
-                "socks": "^2.7.1"
-            },
-            "engines": {
-                "node": ">= 14"
-            }
-        },
-        "node_modules/socks-proxy-agent/node_modules/agent-base": {
-            "version": "7.1.1",
-            "license": "MIT",
-            "dependencies": {
-                "debug": "^4.3.4"
-            },
-            "engines": {
-                "node": ">= 14"
-            }
-        },
         "node_modules/sort-asc": {
             "version": "0.2.0",
             "license": "MIT",
@@ -37302,30 +35994,6 @@
                 "memory-pager": "^1.0.2"
             }
         },
-        "node_modules/spdx-correct": {
-            "version": "3.2.0",
-            "license": "Apache-2.0",
-            "dependencies": {
-                "spdx-expression-parse": "^3.0.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "node_modules/spdx-correct/node_modules/spdx-expression-parse": {
-            "version": "3.0.1",
-            "license": "MIT",
-            "dependencies": {
-                "spdx-exceptions": "^2.1.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "node_modules/spdx-exceptions": {
-            "version": "2.5.0",
-            "license": "CC-BY-3.0"
-        },
-        "node_modules/spdx-license-ids": {
-            "version": "3.0.18",
-            "license": "CC0-1.0"
-        },
         "node_modules/spdy": {
             "version": "4.0.2",
             "dev": true,
@@ -37459,16 +36127,6 @@
                 "node": ">=0.10.0"
             }
         },
-        "node_modules/ssri": {
-            "version": "10.0.6",
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^7.0.3"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/standard-error": {
             "version": "1.1.0"
         },
@@ -37559,6 +36217,12 @@
             "version": "5.1.2",
             "license": "MIT"
         },
+        "node_modules/string-similarity": {
+            "version": "4.0.4",
+            "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz",
+            "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==",
+            "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."
+        },
         "node_modules/string-width": {
             "version": "5.1.2",
             "license": "MIT",
@@ -38401,13 +37065,6 @@
                 "tree-kill": "cli.js"
             }
         },
-        "node_modules/treeverse": {
-            "version": "3.0.0",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/trim-lines": {
             "version": "3.0.1",
             "license": "MIT",
@@ -38958,18 +37615,6 @@
             "version": "1.14.1",
             "license": "0BSD"
         },
-        "node_modules/tuf-js": {
-            "version": "2.2.1",
-            "license": "MIT",
-            "dependencies": {
-                "@tufjs/models": "2.0.1",
-                "debug": "^4.3.4",
-                "make-fetch-happen": "^13.0.1"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
         "node_modules/tunnel": {
             "version": "0.0.6",
             "license": "MIT",
@@ -39306,26 +37951,6 @@
                 "node": ">=0.10.0"
             }
         },
-        "node_modules/unique-filename": {
-            "version": "3.0.0",
-            "license": "ISC",
-            "dependencies": {
-                "unique-slug": "^4.0.0"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
-        "node_modules/unique-slug": {
-            "version": "4.0.0",
-            "license": "ISC",
-            "dependencies": {
-                "imurmurhash": "^0.1.4"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/unist-util-find-after": {
             "version": "5.0.0",
             "license": "MIT",
@@ -39696,29 +38321,6 @@
         "node_modules/valid-url": {
             "version": "1.0.9"
         },
-        "node_modules/validate-npm-package-license": {
-            "version": "3.0.4",
-            "license": "Apache-2.0",
-            "dependencies": {
-                "spdx-correct": "^3.0.0",
-                "spdx-expression-parse": "^3.0.0"
-            }
-        },
-        "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": {
-            "version": "3.0.1",
-            "license": "MIT",
-            "dependencies": {
-                "spdx-exceptions": "^2.1.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "node_modules/validate-npm-package-name": {
-            "version": "5.0.1",
-            "license": "ISC",
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/validate.io-array": {
             "version": "1.0.6",
             "license": "MIT"
@@ -39874,10 +38476,6 @@
                 "node": ">=18"
             }
         },
-        "node_modules/walk-up-path": {
-            "version": "3.0.1",
-            "license": "ISC"
-        },
         "node_modules/warning": {
             "version": "4.0.3",
             "license": "MIT",
@@ -40648,17 +39246,6 @@
                 "node": ">=4"
             }
         },
-        "node_modules/write-file-atomic": {
-            "version": "5.0.1",
-            "license": "ISC",
-            "dependencies": {
-                "imurmurhash": "^0.1.4",
-                "signal-exit": "^4.0.1"
-            },
-            "engines": {
-                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-            }
-        },
         "node_modules/write/node_modules/mkdirp": {
             "version": "0.5.6",
             "dev": true,
diff --git a/package.json b/package.json
index d0b7324e6..8f6105274 100644
--- a/package.json
+++ b/package.json
@@ -139,7 +139,6 @@
         "@types/webpack-hot-middleware": "^2.25.9",
         "@typescript-eslint/parser": "^7.8.0",
         "@webscopeio/react-textarea-autocomplete": "^4.9.2",
-        "D": "^1.0.0",
         "adm-zip": "^0.5.10",
         "archiver": "^7.0.1",
         "async": "^3.2.5",
@@ -176,6 +175,7 @@
         "csv-parser": "^3.0.0",
         "csv-stringify": "^6.4.4",
         "csvtojson": "^2.0.10",
+        "D": "^1.0.0",
         "d3": "^7.8.5",
         "depcheck": "^1.4.7",
         "dotenv": "^16.3.1",
@@ -305,6 +305,7 @@
         "socket.io-client": "^4.7.2",
         "standard-http-error": "^2.0.1",
         "stream-browserify": "^3.0.0",
+        "string-similarity": "^4.0.4",
         "styled-components": "^6.1.1",
         "supercluster": "^8.0.1",
         "tesseract.js": "^5.1.0",
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 0c42f662b..139978a13 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -26,6 +26,7 @@ import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FormattedTextBox } from './formattedText/FormattedTextBox';
 import ReactLoading from 'react-loading';
+
 import { ContextMenu } from '../ContextMenu';
 import { ContextMenuProps } from '../ContextMenuItem';
 import { tickStep } from 'd3';
diff --git a/src/client/views/nodes/ImageBox.scss b/src/client/views/nodes/ImageBox.scss
index be68ac8cd..4690e255f 100644
--- a/src/client/views/nodes/ImageBox.scss
+++ b/src/client/views/nodes/ImageBox.scss
@@ -155,6 +155,24 @@
     color: #17175e;
 }
 
+.check-icon {
+    position: absolute;
+    right: 150;
+    bottom: 10;
+    color: green;
+    display: inline-block;
+    font-size: 100px;
+}
+
+.redo-icon {
+    position: absolute;
+    right: 10;
+    bottom: 10;
+    color: black;
+    display: inline-block;
+    font-size: 100px;
+}
+
 @keyframes spin {
     to {
         transform: rotate(360deg);
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index faf96d616..37827a43a 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -46,6 +46,7 @@ import { canvasSize } from './generativeFill/generativeFillUtils/generativeFillC
 import Tesseract from 'tesseract.js';
 import axios from 'axios';
 import { TupleType } from 'typescript';
+// import stringSimilarity from 'string-similarity';
 
 export class ImageEditorData {
     // eslint-disable-next-line no-use-before-define
@@ -87,9 +88,11 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     private _mainCont: React.RefObject<HTMLDivElement> = React.createRef();
     private _annotationLayer: React.RefObject<HTMLDivElement> = React.createRef();
     private _imageRef: HTMLImageElement | null = null; // <video> ref
+    @observable private _quizBoxes: Doc[] = [];
     @observable private _width: number = 0;
     @observable private _height: number = 0;
     @observable private searchInput = '';
+    @observable private _quizMode = false;
     @observable _savedAnnotations = new ObservableMap<number, HTMLDivElement[]>();
     @observable _curSuffix = '';
     @observable _error = '';
@@ -357,7 +360,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     };
 
     pushInfo = async () => {
-        const formData = new FormData();
+        this._quizMode = true;
 
         const img = {
             file: this.paths[0],
@@ -396,6 +399,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
             newCol.zIndex = 1000;
             newCol.forceActive = true;
             newCol.quiz = text;
+            this._quizBoxes.push(newCol);
             this.addDocument(newCol);
         }
     };
@@ -429,95 +433,93 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         this._loading = false;
     };
 
-    getImageLabels = async () => {
-        this._loading = true;
-        try {
-            const hrefBase64 = await this.createCanvas();
-            // const hw = await gptImageLabel(hrefBase64, 'Find the image dimensions. Return as height and width.');
-            const response = await gptImageLabel(
-                hrefBase64,
-                //'What is the height and width of the image'
-                'For each group of words in the image, find the x-coordinate and ycoordinate of the top left corner. Find the width and height of the group. Return this information in this format with the correct information replacing the underscores: "observed word: _, x: _, y: _, width: _, height: _," No additional text, asterisks and put it all in one line. Divide the x and width by the width of the image. Divide the y and the height by the height of the image.'
-            );
-            // console.log(hw);
-            console.log('RESPONSE: ' + response);
-            this.createTextboxes(response);
+    levenshteinDistance = (a: string, b: string) => {
+        const an = a.length;
+        const bn = b.length;
+        const matrix = [];
 
-            //AnchorMenu.Instance.transferToFlashcard(response, NumCast(this.layoutDoc['x']), NumCast(this.layoutDoc['y']));
-        } catch (error) {
-            console.log('Error');
+        // Ensure non-zero length strings
+        if (an === 0) return bn;
+        if (bn === 0) return an;
+
+        // Initialize the matrix
+        for (let i = 0; i <= an; i++) {
+            matrix[i] = [i];
         }
-        this._loading = false;
+        for (let j = 0; j <= bn; j++) {
+            matrix[0][j] = j;
+        }
+
+        // Populate the matrix
+        for (let i = 1; i <= an; i++) {
+            for (let j = 1; j <= bn; j++) {
+                if (a[i - 1] === b[j - 1]) {
+                    matrix[i][j] = matrix[i - 1][j - 1];
+                } else {
+                    matrix[i][j] = Math.min(
+                        matrix[i - 1][j - 1] + 1, // substitution
+                        Math.min(
+                            matrix[i][j - 1] + 1, // insertion
+                            matrix[i - 1][j] + 1 // deletion
+                        )
+                    );
+                }
+            }
+        }
+
+        return matrix[an][bn];
+    };
+
+    @computed get checkIcon() {
+        return (
+            <Tooltip title={<div className="dash-tooltip">Check</div>}>
+                <div className="check-icon" onPointerDown={this.check}>
+                    <FontAwesomeIcon icon="circle-check" size="lg" />
+                </div>
+            </Tooltip>
+        );
+    }
+
+    @computed get redoIcon() {
+        return (
+            <Tooltip title={<div className="dash-tooltip">Redo</div>}>
+                <div className="redo-icon" onPointerDown={this.redo}>
+                    <FontAwesomeIcon icon="redo-alt" size="lg" />
+                </div>
+            </Tooltip>
+        );
+    }
+
+    compareWords = (input: string, target: string) => {
+        const distance = this.levenshteinDistance(input.toLowerCase(), target.toLowerCase());
+        const threshold = Math.max(input.length, target.length) * 0.2; // Allow up to 20% of the length as difference
+        return distance <= threshold;
     };
 
-    getText = () => {
-        console.log(StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text));
+    check = () => {
+        this._quizBoxes.forEach(doc => {
+            const input = StrCast(RTFCast(DocCast(doc).text)?.Text);
+            console.log('INP: ' + StrCast(input) + '; DOC: ' + StrCast(doc.quiz));
+            const match = this.compareWords(input, StrCast(doc.quiz));
+            doc.backgroundColor = match ? '#11c249' : '#eb2d2d';
+            // console.log(this.compareWords(input, StrCast(doc.quiz)) ? 'Match' : 'No Match');
+        });
     };
 
-    getImageLabels2 = async () => {
-        this._loading = true;
-        try {
-            // const hrefBase64 = await this.createCanvas();
-            // const hw = await gptImageLabel(hrefBase64, 'Find the image dimensions. Return as height and width.');
-            // const response = await gptImageLabel(
-            //     hrefBase64,
-            //     //'What is the height and width of the image'
-            //     'For each group of words in the image, find the x-coordinate and ycoordinate of the top left corner. Find the width and height of the group. Return this information in this format with the correct information replacing the underscores: "observed word: _, x: _, y: _, width: _, height: _," No additional text, asterisks and put it all in one line. Divide the x and width by the width of the image. Divide the y and the height by the height of the image.'
-            // );
-            // console.log(hw);
-            // console.log('RESPONSE: ' + response);
-            // this.createTextboxes(response);
-            Tesseract.recognize(this.paths[0], 'eng', {
-                logger: m => console.log(m),
-            }).then(({ data: { text, words } }) => {
-                console.log('OCR Result:', text);
-                console.log('Words with bounding boxes:', words);
-            });
-            //AnchorMenu.Instance.transferToFlashcard(response, NumCast(this.layoutDoc['x']), NumCast(this.layoutDoc['y']));
-        } catch (error) {
-            console.log('Error');
-        }
-        this._loading = false;
+    redo = () => {
+        this._quizBoxes.forEach(doc => {
+            DocCast(doc)[DocData].text = '';
+            doc.backgroundColor = '#e4e4e4';
+        });
     };
 
-    createTextboxes = (response: string) => {
-        const groups = response.replace('*', '').toLowerCase().split('observed word: ');
-        groups.shift();
-        for (var i = 0; i < groups.length; i++) {
-            console.log('Group ' + i + ': ' + groups[i]);
-        }
-        // console.log('GROUPS: ' + groups);
-        groups.forEach(
-            group => {
-                const groupArr = group.split(', ');
-                const word = groupArr[0];
-                const x = parseFloat(groupArr[1].substring(3));
-                const y = parseFloat(groupArr[2].substring(3));
-                const width = parseFloat(groupArr[3].substring(7));
-                const height = parseFloat(groupArr[4].substring(8));
-                const scaling = 1 / (this._props.NativeDimScaling?.() || 1);
-                const w = AnchorMenu.Instance.marqueeWidth * scaling;
-                const h = AnchorMenu.Instance.marqueeHeight * scaling;
-
-                const newCol = Docs.Create.TextDocument(word, {
-                    _width: w * width,
-                    //width * NumCast(this.dataDoc[this.fieldKey + '_nativeWidth']),
-                    _height: h * height + 20,
-                    //height * NumCast(this.dataDoc[this.fieldKey + '_nativeHeight']),
-                    _layout_fitWidth: true,
-                    _layout_autoHeight: true,
-                });
-                newCol.x = x * w;
-                newCol.y = y * h;
-                // newCol.x = x * NumCast(this.dataDoc[this.fieldKey + '_nativeWidth']);
-                // newCol.y = y * NumCast(this.dataDoc[this.fieldKey + '_nativeHeight']);
-                newCol.zIndex = 1000;
-                newCol.forceActive = true;
-                newCol.quiz = true;
-                this.addDocument(newCol);
-            }
-            // console.log(group);
-        );
+    exitQuizMode = () => {
+        this._quizMode = false;
+        this._quizBoxes.forEach(doc => {
+            // this._props.removeDocument?.(DocCast(doc));
+            // this._props.DocumentView?.()._props.removeDocument?.(doc);
+        });
+        this._quizBoxes = [];
     };
 
     @action
@@ -530,7 +532,16 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         if (field) {
             const funcs: ContextMenuProps[] = [];
             // funcs.push({ description: 'Create ai flashcards', event: () => this.getImageDesc(), icon: 'id-card' });
-            funcs.push({ description: 'Push info', event: this.pushInfo, icon: 'redo-alt' });
+            funcs.push({
+                description: 'Quiz Mode',
+                event: !this._quizMode
+                    ? this.pushInfo
+                    : () => {
+                          this._quizMode = false;
+                      },
+                icon: 'redo-alt',
+            });
+            // funcs.push({ description: 'Get Text', event: this.check, icon: 'redo-alt' });
             // funcs.push({ description: 'Get Labels2', event: this.getImageLabels2, icon: 'redo-alt' });
             // funcs.push({ description: 'Get Labels', event: this.getImageLabels, icon: 'redo-alt' });
             funcs.push({ description: 'Rotate Clockwise 90', event: this.rotate, icon: 'redo-alt' });
@@ -678,6 +689,8 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                     )}
                 </div>
                 {this.overlayImageIcon}
+                {this._quizMode ? this.checkIcon : null}
+                {this._quizMode ? this.redoIcon : null}
             </div>
         );
     }
-- 
cgit v1.2.3-70-g09d2


From 31e04bbd49825bf56c30cb50397a15c5df53c7a8 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Fri, 30 Aug 2024 22:34:32 -0400
Subject: clean up comparison box

---
 package-lock.json                                  |   21 +-
 package.json                                       |    7 +-
 src/client/apis/gpt/GPT.ts                         |    2 +-
 src/client/views/nodes/ComparisonBox.tsx           | 1629 +++++++++++++++-----
 src/client/views/nodes/ComparisonBoxNew.tsx        |  848 ++++++++++
 src/client/views/nodes/ImageBox.tsx                |   93 +-
 src/client/views/nodes/LabelBigText.js             |  270 ++++
 src/client/views/nodes/LabelBox.scss               |   35 +
 src/client/views/nodes/LabelBox.tsx                |   67 +-
 .../nodes/formattedText/FormattedTextBox.scss      |   31 -
 .../views/nodes/formattedText/FormattedTextBox.tsx |   45 -
 src/client/views/webcam/WebCamLogic.js             |  292 ++++
 src/extensions/General/Extensions.ts               |    9 +
 src/extensions/General/ExtensionsTypings.ts        |    8 +
 src/server/public/assets/dash-colon-menu 2.gif     |  Bin 0 -> 348794 bytes
 .../public/assets/dash-create-link-board 2.gif     |  Bin 0 -> 167854 bytes
 src/server/public/assets/dash-following-link 2.gif |  Bin 0 -> 181851 bytes
 src/server/public/assets/documentation 2.png       |  Bin 0 -> 4526 bytes
 src/server/public/assets/pdf.worker.2.4.456.min.js |   22 +
 src/server/public/assets/pdf.worker.js             |   22 +
 20 files changed, 2843 insertions(+), 558 deletions(-)
 create mode 100644 src/client/views/nodes/ComparisonBoxNew.tsx
 create mode 100644 src/client/views/nodes/LabelBigText.js
 create mode 100644 src/client/views/webcam/WebCamLogic.js
 create mode 100644 src/extensions/General/Extensions.ts
 create mode 100644 src/extensions/General/ExtensionsTypings.ts
 create mode 100644 src/server/public/assets/dash-colon-menu 2.gif
 create mode 100644 src/server/public/assets/dash-create-link-board 2.gif
 create mode 100644 src/server/public/assets/dash-following-link 2.gif
 create mode 100644 src/server/public/assets/documentation 2.png
 create mode 100644 src/server/public/assets/pdf.worker.2.4.456.min.js
 create mode 100644 src/server/public/assets/pdf.worker.js

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/package-lock.json b/package-lock.json
index f11d43926..70bd3a390 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,7 +16,7 @@
                 "@emotion/react": "^11.11.1",
                 "@emotion/styled": "^11.11.0",
                 "@ffmpeg/core": "^0.12.5",
-                "@ffmpeg/ffmpeg": "^0.12.8",
+                "@ffmpeg/ffmpeg": "^0.12.10",
                 "@fortawesome/fontawesome-svg-core": "^6.5.1",
                 "@fortawesome/free-brands-svg-icons": "^6.5.1",
                 "@fortawesome/free-regular-svg-icons": "^6.5.1",
@@ -57,7 +57,7 @@
                 "adm-zip": "^0.5.10",
                 "archiver": "^7.0.1",
                 "async": "^3.2.5",
-                "axios": "^1.6.2",
+                "axios": "^1.7.3",
                 "babel": "^6.23.0",
                 "babel-loader": "^9.1.3",
                 "bcrypt-nodejs": "0.0.3",
@@ -108,7 +108,7 @@
                 "find-in-files": "^0.5.0",
                 "fit-curve": "^0.2.0",
                 "flexlayout-react": "^0.7.15",
-                "fluent-ffmpeg": "^2.1.2",
+                "fluent-ffmpeg": "^2.1.3",
                 "forever-agent": "^0.6.1",
                 "fork-ts-checker-webpack-plugin": "^9.0.2",
                 "form-data": "^4.0.0",
@@ -220,6 +220,7 @@
                 "socket.io-client": "^4.7.2",
                 "standard-http-error": "^2.0.1",
                 "stream-browserify": "^3.0.0",
+                "streamifier": "^0.1.1",
                 "string-similarity": "^4.0.4",
                 "styled-components": "^6.1.1",
                 "supercluster": "^8.0.1",
@@ -11084,9 +11085,9 @@
             }
         },
         "node_modules/axios": {
-            "version": "1.7.2",
-            "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
-            "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
+            "version": "1.7.3",
+            "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz",
+            "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==",
             "dependencies": {
                 "follow-redirects": "^1.15.6",
                 "form-data": "^4.0.0",
@@ -38877,6 +38878,14 @@
             "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
             "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
         },
+        "node_modules/streamifier": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz",
+            "integrity": "sha512-zDgl+muIlWzXNsXeyUfOk9dChMjlpkq0DRsxujtYPgyJ676yQ8jEm6zzaaWHFDg5BNcLuif0eD2MTyJdZqXpdg==",
+            "engines": {
+                "node": ">=0.10"
+            }
+        },
         "node_modules/streamx": {
             "version": "2.18.0",
             "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz",
diff --git a/package.json b/package.json
index 8d1026b5a..c9019cd05 100644
--- a/package.json
+++ b/package.json
@@ -102,7 +102,7 @@
         "@emotion/react": "^11.11.1",
         "@emotion/styled": "^11.11.0",
         "@ffmpeg/core": "^0.12.5",
-        "@ffmpeg/ffmpeg": "^0.12.8",
+        "@ffmpeg/ffmpeg": "^0.12.10",
         "@fortawesome/fontawesome-svg-core": "^6.5.1",
         "@fortawesome/free-brands-svg-icons": "^6.5.1",
         "@fortawesome/free-regular-svg-icons": "^6.5.1",
@@ -143,7 +143,7 @@
         "adm-zip": "^0.5.10",
         "archiver": "^7.0.1",
         "async": "^3.2.5",
-        "axios": "^1.6.2",
+        "axios": "^1.7.3",
         "babel": "^6.23.0",
         "babel-loader": "^9.1.3",
         "bcrypt-nodejs": "0.0.3",
@@ -194,7 +194,7 @@
         "find-in-files": "^0.5.0",
         "fit-curve": "^0.2.0",
         "flexlayout-react": "^0.7.15",
-        "fluent-ffmpeg": "^2.1.2",
+        "fluent-ffmpeg": "^2.1.3",
         "forever-agent": "^0.6.1",
         "fork-ts-checker-webpack-plugin": "^9.0.2",
         "form-data": "^4.0.0",
@@ -306,6 +306,7 @@
         "socket.io-client": "^4.7.2",
         "standard-http-error": "^2.0.1",
         "stream-browserify": "^3.0.0",
+        "streamifier": "^0.1.1",
         "string-similarity": "^4.0.4",
         "styled-components": "^6.1.1",
         "supercluster": "^8.0.1",
diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index 3550b6216..2e4dbe9a0 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -64,7 +64,7 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
     pronunciation: {
         model: 'gpt-4-turbo',
         maxTokens: 1024,
-        temp: 0.3, //0.3
+        temp: 0.1, //0.3
         prompt: '',
     },
 };
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 139978a13..4a0820c95 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -26,7 +26,6 @@ import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FormattedTextBox } from './formattedText/FormattedTextBox';
 import ReactLoading from 'react-loading';
-
 import { ContextMenu } from '../ContextMenu';
 import { ContextMenuProps } from '../ContextMenuItem';
 import { tickStep } from 'd3';
@@ -39,6 +38,7 @@ import ReactMarkdown from 'react-markdown';
 import { WebField, nullAudio } from '../../../fields/URLField';
 
 const API_URL = 'https://api.unsplash.com/search/photos';
+
 @observer
 export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     public static LayoutString(fieldKey: string) {
@@ -62,7 +62,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @observable mathJaxConfig = {
         loader: { load: ['input/asciimath'] },
     };
-    private _ref = React.createRef<HTMLDivElement>();
+    @observable private _listening = false;
+    @observable transcriptElement = '';
+    @observable private frontSide = false;
+    SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+    @observable recognition = new this.SpeechRecognition();
+    _closeRef = React.createRef<HTMLDivElement>();
 
     get revealOp() {
         return this.layoutDoc[`_${this._props.fieldKey}_revealOp`];
@@ -84,24 +89,20 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     }
 
     @computed get overlayAlternateIcon() {
-        const usepath = this.layoutDoc[`_${this._props.fieldKey}_usePath`];
         return (
             <Tooltip title={<div className="dash-tooltip">flip</div>}>
                 <div
                     className="formattedTextBox-alternateButton"
                     onPointerDown={e =>
                         setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => {
-                            if (!this.layoutDoc[`_${this._props.fieldKey}_revealOp`] || this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'flip') {
+                            if (!this.revealOp || this.revealOp === 'flip') {
                                 this.flipFlashcard();
-
-                                // console.log('Print Front of cards: ' + (RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text ?? ''));
-                                // console.log('Print Back of cards: ' + (RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text ?? ''));
                             }
                         })
                     }
                     style={{
-                        background: this.revealOp === 'hover' ? 'gray' : usepath === 'alternate' ? 'white' : 'black',
-                        color: this.revealOp === 'hover' ? 'black' : usepath === 'alternate' ? 'black' : 'white',
+                        background: this.revealOp === 'hover' ? 'gray' : this.frontSide ? 'white' : 'black',
+                        color: this.revealOp === 'hover' ? 'black' : this.frontSide ? 'black' : 'white',
                         display: 'inline-block',
                     }}>
                     <div key="alternate" className="formattedTextBox-flip">
@@ -116,14 +117,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return (
             <div>
                 <Tooltip
-                    title={
-                        this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? (
-                            <div className="dash-tooltip">Flip to front side to use GPT</div>
-                        ) : (
-                            <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>
-                        )
-                    }>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={e => (!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? this.findImageTags() : null)}>
+                    title={this.frontSide ? <div className="dash-tooltip">Flip to front side to use GPT</div> : <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>}>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={e => (!this.frontSide ? this.findImageTags() : null)}>
                         <FontAwesomeIcon icon="lightbulb" size="xl" />
                     </div>
                 </Tooltip>
@@ -146,93 +141,18 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="hand-point-up" size="xl" />
                     </div>
                 </Tooltip>
-                {/* <Tooltip title={<div className="dash-tooltip">Remove this side of the flashcard</div>}>
-                    <div
-                        style={{ position: 'absolute', bottom: '3px', right: '80px', cursor: 'pointer' }}
-                        onPointerDown={e => this.closeDown(e, this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._props.fieldKey + '_1' : this._props.fieldKey + '_0')}>
-                        <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="trash-can" size="xl" />
-                    </div>
-                </Tooltip> */}
-                {/* {this.overlayAlternateIcon} */}
             </div>
         );
     }
 
-    componentDidMount() {
-        this._props.setContentViewBox?.(this);
-        reaction(
-            () => this._props.isSelected(), // when this reaction should update
-            selected => !selected && (this.childActive = false) // what it should update to
-        );
-    }
-    protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
-        this._disposers[disposerId]?.();
-        // this.childActive = true;
-        if (ele) {
-            this._disposers[disposerId] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
-        }
-    };
-
-    private internalDrop = undoable((e: Event, dropEvent: DragManager.DropEvent, fieldKey: string) => {
-        if (dropEvent.complete.docDragData) {
-            const { droppedDocuments } = dropEvent.complete.docDragData;
-            const added = dropEvent.complete.docDragData.moveDocument?.(droppedDocuments, this.Document, (doc: Doc | Doc[]) => this.addDoc(toList(doc).lastElement(), fieldKey));
-            Doc.SetContainer(droppedDocuments.lastElement(), this.dataDoc);
-            !added && e.preventDefault();
-            e.stopPropagation(); // prevent parent Doc from registering new position so that it snaps back into place
-            // this.childActive = false;
-            return added;
-        }
-        return undefined;
-    }, 'internal drop');
-
-    private registerSliding = (e: React.PointerEvent<HTMLDivElement>, targetWidth: number) => {
-        if (e.button !== 2) {
-            setupMoveUpEvents(
-                this,
-                e,
-                this.onPointerMove,
-                emptyFunction,
-                action((moveEv, doubleTap) => {
-                    if (doubleTap) {
-                        this.childActive = true;
-                        if (!this.dataDoc[this.fieldKey + '_1'] && !this.dataDoc[this.fieldKey]) this.dataDoc[this.fieldKey + '_1'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
-                        if (!this.dataDoc[this.fieldKey + '_2'] && !this.dataDoc[this.fieldKey + '_alternate']) this.dataDoc[this.fieldKey + '_2'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
-                    }
-                }),
-                false,
-                undefined,
-                action(() => {
-                    if (this.childActive) return;
-                    this._animating = 'all 200ms';
-                    // on click, animate slider movement to the targetWidth
-                    this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
-                    // this.layoutDoc[this.clipHeightKey] = (targetWidth * 100) / this._props.PanelHeight();
-
-                    setTimeout(
-                        action(() => {
-                            this._animating = '';
-                        }),
-                        200
-                    );
-                })
-            );
-        }
-    };
-
-    // private onClick(e: React.PointerEvent<HTMLDivElement>) {
-    //     setupMoveUpEvents(
-    //         this, e, this.onPointerMOve, emptyFunction(), () => {this._isAnyChildContentActive = true;}, emptyFunction(), emptyFunction()
-    //     )
-    // }
-
-    @action
-    private onPointerMove = ({ movementX }: PointerEvent) => {
-        const width = movementX * this.ScreenToLocalBoxXf().Scale + (this.clipWidth / 100) * this._props.PanelWidth();
-        if (width && width > 5 && width < this._props.PanelWidth()) {
-            this.layoutDoc[this.clipWidthKey] = (width * 100) / this._props.PanelWidth();
+    @action handleHover = () => {
+        if (this.revealOp === 'hover') {
+            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip';
+            this.Document.forceActive = false;
+        } else {
+            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover';
+            this.Document.forceActive = true;
         }
-        return false;
     };
 
     @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
@@ -240,107 +160,62 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         console.log(this._inputValue);
     };
 
-    // this.closeDown(e, this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this.fieldKey + '_0' : this.fieldKey + '_1')}
     @action activateContent = () => {
         this.childActive = true;
     };
 
+    @action handleRenderClick = () => {
+        this.frontSide = !this.frontSide;
+    };
+
     @action handleRenderGPTClick = async () => {
-        // Call the GPT model and get the output
-        // await this.pushInfo();
-        // console.log('PHONETIC TRANSCRIPTION: ' + DocCast(this._audio)[DocData]);
-        // this.Document.audio = this._audio;
         console.log('Phonetic transcription: ' + DocCast(this.Document.audio).phoneticTranscription);
         const phonTrans = DocCast(this.Document.audio).phoneticTranscription;
-        // const phonTrans = 's';
         if (phonTrans) {
-            // console.log(phonTrans.toString());
             this._inputValue = StrCast(phonTrans);
             console.log('INPUT:' + this._inputValue);
             this.askGPTPhonemes(this._inputValue);
         } else if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
-        this.layoutDoc[`_${this._props.fieldKey}_usePath`] = 'alternate';
+        this.frontSide = false;
         this._outputValue = '';
     };
 
-    askGPTPhonemes = async (phonemes: string) => {
-        const sentence = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
-        const phon = 'w ʌ ɪ z j ɔː ɹ n e ɪ m ';
-        const phon2 = 'h ʌ ɛ r j ʌ t ʌ d eɪ';
-        const phon3 = 'ʃ eɪ oʊ s i ʃ oʊ z b aɪ ð ə s iː ʃ oʊ';
-        const phon4 = 'kamo estas hɔi';
-        const phon5 = 'la s e n a l';
-        console.log('REG' + this.recognition.lang);
-        const promptEng =
-            'Consider all possible phonetic transcriptions of the intended sentence "' +
-            sentence +
-            '" that is standard in American speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
-            phonemes +
-            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart. The goal is to be understood, not sound like a native speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "ceeffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
-        const promptSpa =
-            'Consider all possible phonetic transcriptions of the intended sentence "' +
-            'como estás hoy' +
-            '" that is standard in Spanish speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
-            phon4 +
-            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in Spanish speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound.  Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart; say good job if it would be understood by a native Spanish speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Identify "ɔi" sounds like "oy". Ignore accents and do not say anything to the user about this.';
-        const promptAll =
-            'Consider all possible phonetic transcriptions of the intended sentence "' +
-            sentence +
-            '" that is standard in ' +
-            this.convertAbr() +
-            ' speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
-            phonemes +
-            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in ' +
-            this.convertAbr() +
-            ' speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "cawffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
-
-        switch (this.recognition.lang) {
-            case 'en-US':
-                console.log('English');
-                this._outputValue = await gptAPICall(promptEng, GPTCallType.PRONUNCIATION);
-                break;
-            case 'es-ES':
-                console.log('Spanish');
-                this._outputValue = await gptAPICall(promptSpa, GPTCallType.PRONUNCIATION);
-                break;
-            default:
-                console.log('All');
-                this._outputValue = await gptAPICall(promptAll, GPTCallType.PRONUNCIATION);
-                break;
+    @action
+    private onPointerMove = ({ movementX }: PointerEvent) => {
+        const width = movementX * this.ScreenToLocalBoxXf().Scale + (this.clipWidth / 100) * this._props.PanelWidth();
+        if (width && width > 5 && width < this._props.PanelWidth()) {
+            this.layoutDoc[this.clipWidthKey] = (width * 100) / this._props.PanelWidth();
         }
+        return false;
     };
 
-    pushInfo = async () => {
-        const formData = new FormData();
-
-        console.log(DocCast(this._audio).dataDoc);
-        const audio = {
-            file: this._audio.url,
-        };
-        const response = await axios.post('http://localhost:105/recognize/', audio, {
-            headers: {
-                'Content-Type': 'application/json',
-            },
-        });
-        this.Document.phoneticTranscription = response.data['transcription'];
-        console.log('RESPONSE: ' + response.data['transcription']);
-    };
+    componentDidMount() {
+        this._props.setContentViewBox?.(this);
+        reaction(
+            () => this._props.isSelected(), // when this reaction should update
+            selected => !selected && (this.childActive = false) // what it should update to
+        );
+    }
 
-    @action handleHover = () => {
-        if (this.revealOp === 'hover') {
-            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip';
-            this.Document.forceActive = false;
-        } else {
-            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover';
-            this.Document.forceActive = true;
+    protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
+        this._disposers[disposerId]?.();
+        if (ele) {
+            this._disposers[disposerId] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
         }
-        //this.revealOp === 'hover' ? (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip') : (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover');
     };
 
-    @action handleRenderClick = () => {
-        // Call the GPT model and get the output
-        this.layoutDoc[`_${this._props.fieldKey}_usePath`] = undefined;
-    };
+    private internalDrop = undoable((e: Event, dropEvent: DragManager.DropEvent, fieldKey: string) => {
+        if (dropEvent.complete.docDragData) {
+            const { droppedDocuments } = dropEvent.complete.docDragData;
+            const added = dropEvent.complete.docDragData.moveDocument?.(droppedDocuments, this.Document, (doc: Doc | Doc[]) => this.addDoc(toList(doc).lastElement(), fieldKey));
+            Doc.SetContainer(droppedDocuments.lastElement(), this.dataDoc);
+            !added && e.preventDefault();
+            e.stopPropagation(); // prevent parent Doc from registering new position so that it snaps back into place
+            // this.childActive = false;
+            return added;
+        }
+        return undefined;
+    }, 'internal drop');
 
     getAnchor = (addAsAnnotation: boolean, pinProps?: PinProps) => {
         const anchor = Docs.Create.ConfigDocument({
@@ -359,13 +234,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     };
 
     clearDoc = undoable((fieldKey: string) => {
-        // delete this.dataDoc[fieldKey];
         this.dataDoc[fieldKey] = undefined;
         this._isEmpty = true;
-        // this.dataDoc[fieldKey] = 'empty';
-        console.log('HERE' + fieldKey + ';');
     }, 'clear doc');
-    // clearDoc = (fieldKey: string) => delete this.dataDoc[fieldKey];
 
     moveDoc = (doc: Doc, addDocument: (document: Doc | Doc[]) => boolean, which: string) => this.remDoc(doc, which) && addDocument(doc);
     addDoc = (doc: Doc, which: string) => {
@@ -409,39 +280,108 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     remDoc1 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_1'), true);
     remDoc2 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_2'), true);
 
-    /**
-     * Tests for whether a comparison box slot (ie, before or after) has renderable text content.
-     * If it does, render a FormattedTextBox for that slot that references the comparisonBox's slot field
-     * @param whichSlot field key for start or end slot
-     * @returns a JSX layout string if a text field is found, othwerise undefined
-     */
-    testForTextFields = (whichSlot: string) => {
-        const slotData = Doc.Get(this.dataDoc, whichSlot, true);
-        const slotHasText = slotData instanceof RichTextField || typeof slotData === 'string';
-        const subjectText = RTFCast(this.Document[this.fieldKey])?.Text.trim();
-        const altText = RTFCast(this.Document[this.fieldKey + '_alternate'])?.Text.trim();
-        const layoutTemplateString =
-            slotHasText ? FormattedTextBox.LayoutString(whichSlot):
-            whichSlot.endsWith('1') ? (subjectText !== undefined ? FormattedTextBox.LayoutString(this.fieldKey) : undefined) :
-                                       altText !== undefined     ? FormattedTextBox.LayoutString(this.fieldKey + '_alternate'): undefined; // prettier-ignore
+    private registerSliding = (e: React.PointerEvent<HTMLDivElement>, targetWidth: number) => {
+        if (e.button !== 2) {
+            setupMoveUpEvents(
+                this,
+                e,
+                this.onPointerMove,
+                emptyFunction,
+                action((moveEv, doubleTap) => {
+                    if (doubleTap) {
+                        this.childActive = true;
+                        if (!this.dataDoc[this.fieldKey + '_1'] && !this.dataDoc[this.fieldKey]) this.dataDoc[this.fieldKey + '_1'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
+                        if (!this.dataDoc[this.fieldKey + '_2'] && !this.dataDoc[this.fieldKey + '_alternate']) this.dataDoc[this.fieldKey + '_2'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
+                    }
+                }),
+                false,
+                undefined,
+                action(() => {
+                    if (this.childActive) return;
+                    this._animating = 'all 200ms';
+                    // on click, animate slider movement to the targetWidth
+                    this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
+                    // this.layoutDoc[this.clipHeightKey] = (targetWidth * 100) / this._props.PanelHeight();
 
-        // A bit hacky to try out the concept of using GPT to fill in flashcards
-        //   If the second slot doesn't have anything in it, but the fieldKey slot has text (e.g., this.text is a string)
-        // and the fieldKey + "_alternate" has text that includes a GPT query (indicated by (( && )) ) that is parameterized (optionally) by the fieldKey text (this) or other metadata (this.<field>).
-        // eg., this.text_alternate is
-        //     "((Provide a one sentence definition for (this) that doesn't use any word in (this.excludeWords) ))"
-        //     where (this) is replaced by the text in the fieldKey slot abd this.excludeWords is repalced by the conetnts of the excludeWords field
-        // The GPT call will put the "answer"  in the second slot of the comparison (eg., text_2)
-        if (whichSlot.endsWith('2') && !layoutTemplateString?.includes(whichSlot)) {
-            const queryText = altText?.replace('(this)', subjectText); // TODO: this should be done in Doc.setField but it doesn't know about the fieldKey ...
-            if (queryText?.match(/\(\(.*\)\)/)) {
-                Doc.SetField(this.Document, whichSlot, ':=' + queryText, false); // make the second slot be a computed field on the data doc that calls ChatGpt
-            }
+                    setTimeout(
+                        action(() => {
+                            this._animating = '';
+                        }),
+                        200
+                    );
+                })
+            );
         }
-        return layoutTemplateString;
     };
 
-    _closeRef = React.createRef<HTMLDivElement>();
+    setListening = () => {
+        const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+        if (SpeechRecognition) {
+            this.recognition.continuous = true;
+            this.recognition.interimResults = true;
+            this.recognition.lang = 'en-US';
+            this.recognition.onresult = this.handleResult.bind(this);
+        }
+        ContextMenu.Instance.setLangIndex(0);
+    };
+
+    startListening = () => {
+        this.recognition.start();
+        this._listening = true;
+    };
+
+    stopListening = () => {
+        this.recognition.stop();
+        this._listening = false;
+    };
+
+    setLanguage = (e: React.MouseEvent, language: string, ind: number) => {
+        this.recognition.lang = language;
+        ContextMenu.Instance.setLangIndex(ind);
+    };
+
+    convertAbr = () => {
+        switch (this.recognition.lang) {
+            case 'en-US': return 'English'; //prettier-ignore
+            case 'es-ES': return 'Spanish'; //prettier-ignore
+            case 'fr-FR': return 'French'; //prettier-ignore
+            case 'it-IT': return 'Italian'; //prettier-ignore
+            case 'zh-CH': return 'Mandarin Chinese'; //prettier-ignore
+            case 'ja': return 'Japanese'; //prettier-ignore
+            default: return 'Korean'; //prettier-ignore
+        }
+    };
+
+    openContextMenu = (x: number, y: number, evalu: boolean) => {
+        ContextMenu.Instance.clearItems();
+        ContextMenu.Instance.addItem({ description: 'English', event: e => this.setLanguage(e, 'en-US', 0) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Spanish', event: e => this.setLanguage(e, 'es-ES', 1 )}); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'French', event: e => this.setLanguage(e, 'fr-FR', 2) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Italian', event: e => this.setLanguage(e, 'it-IT', 3) }); //prettier-ignore
+        if (!evalu) ContextMenu.Instance.addItem({ description: 'Mandarin Chinese', event: e => this.setLanguage(e, 'zh-CH', 4) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Japanese', event: e => this.setLanguage(e, 'ja', 5) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Korean', event: e => this.setLanguage(e, 'ko', 6) }); //prettier-ignore
+        ContextMenu.Instance.displayMenu(x, y);
+    };
+
+    evaluatePronunciation = () => {
+        const newAudio = Docs.Create.AudioDocument(nullAudio, { _width: 200, _height: 100 });
+        this.Document.audio = newAudio[DocData];
+        this._props.DocumentView?.()._props.addDocument?.(newAudio);
+    };
+
+    pushInfo = async () => {
+        const audio = {
+            file: this._audio.url,
+        };
+        const response = await axios.post('http://localhost:105/recognize/', audio, {
+            headers: {
+                'Content-Type': 'application/json',
+            },
+        });
+        this.Document.phoneticTranscription = response.data['transcription'];
+        console.log('RESPONSE: ' + response.data['transcription']);
+    };
 
     createFlashcardPile(collectionArr: Doc[], gpt: boolean) {
         const newCol = Docs.Create.CarouselDocument(collectionArr, {
@@ -453,7 +393,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         newCol['x'] = this.layoutDoc['x'];
         newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
         newCol.type_collection = 'carousel';
-        // console.log(newCol.data);
 
         if (gpt) {
             this._props.DocumentView?.()._props.addDocument?.(newCol);
@@ -467,8 +406,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     gptFlashcardPile = async () => {
         var text = await this.askGPT(GPTCallType.STACK);
-        console.log(text);
-
         var senArr = text?.split('Question: ');
         var collectionArr: Doc[] = [];
         for (let i = 1; i < senArr?.length!; i++) {
@@ -477,8 +414,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             if (StrCast(senArr![i]).includes('Keyword: ')) {
                 const question = StrCast(senArr![i]).split('Keyword: ');
                 const img = await this.fetchImages(question[1]);
-                // newDoc['image'] = img;
-                // const newDoc = Docs.Create.TextDocument(dataSplit[1]);
                 const textSide1 = question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0];
                 const textDoc1 = Docs.Create.TextDocument(question[0]);
                 const rtfiel = new RichTextField(
@@ -503,54 +438,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
                 textDoc1[DocData].text = rtfiel;
                 DocCast(newDoc)[DocData][this.fieldKey + '_1'] = textDoc1;
-
                 DocCast(newDoc)[DocData][this.fieldKey + '_0'] = Docs.Create.TextDocument(question[0].includes('Answer: ') ? question[0].split('Answer: ')[1] : question[1]);
-                // Doc.AddToMyOverlay(img!);
             }
-
             collectionArr.push(newDoc);
         }
         this.createFlashcardPile(collectionArr, true);
     };
 
-    /**
-     * Flips a flashcard to the alternate side for the user to view.
-     */
-    flipFlashcard = () => {
-        const usePath = this.layoutDoc[`_${this._props.fieldKey}_usePath`];
-        this.layoutDoc[`_${this._props.fieldKey}_usePath`] = usePath === undefined ? 'alternate' : undefined;
-    };
-
-    /**
-     * Changes the view option to hover for a flashcard.
-     */
-    hoverFlip = (side: string | undefined) => {
-        if (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'hover') this.layoutDoc[`_${this._props.fieldKey}_usePath`] = side;
-    };
-
-    animateRes = (resIndex: number, newText: string, callType: GPTCallType) => {
-        if (resIndex < newText.length) {
-            // const marks = this._editorView?.state.storedMarks ?? [];
-            switch (callType) {
-                case GPTCallType.CHATCARD:
-                    DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text += newText[resIndex];
-                    break;
-                case GPTCallType.QUIZ:
-                    this._outputValue += newText[resIndex];
-                    break;
-                default:
-                    return;
-            }
-
-            // this._editorView?.dispatch(this._editorView?.state.tr.insertText(newText[resIndex]).setStoredMarks(this._outputValue));
-            setTimeout(() => this.animateRes(resIndex + 1, newText, callType), 20);
-        }
-    };
-
-    /**
-     * Calls the GPT model to create QuizCards. Evaluates how similar the user's response is to the alternate
-     * side of the flashcard.
-     */
     askGPT = async (callType: GPTCallType): Promise<string | undefined> => {
         const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
         const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
@@ -565,30 +459,24 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             this.flipFlashcard();
         }
         try {
+            console.log(queryText);
             const res = await gptAPICall(callType == GPTCallType.QUIZ ? queryText : questionText, callType);
             if (!res) {
                 console.error('GPT call failed');
                 return;
             }
-            // this.animateRes(0, res, callType);
             if (callType == GPTCallType.CHATCARD) {
                 DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
-                // this.flipFlashcard();
             } else if (callType == GPTCallType.QUIZ) {
                 console.log(this._inputValue);
                 this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
-            }
-            // DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
-            // this._outputValue = res;
-            else if (callType === GPTCallType.FLASHCARD) {
-                // console.log(res);
+            } else if (callType === GPTCallType.FLASHCARD) {
                 this._loading = false;
                 return res;
             } else if (callType === GPTCallType.STACK) {
             }
             this._loading = false;
             return res;
-            // console.log(res);
         } catch (err) {
             console.error('GPT call failed');
         }
@@ -597,16 +485,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     layoutWidth = () => NumCast(this.layoutDoc.width, 200);
     layoutHeight = () => NumCast(this.layoutDoc.height, 200);
 
-    // specificMenu = (): void => {
-    //     const cm = ContextMenu.Instance;
-    //     cm.addItem({ description: 'Create an Answer on the Back', event: () => this.askGPT(GPTCallType.CHATCARD), icon: 'pencil' });
-    // };
-
     findImageTags = async () => {
-        // const d = DocCast(this.dataDoc[this.props.fieldKey + '_0']);
-        // const copy = Doc.MakeCopy(this.Document, true);
         const c = this.DocumentView?.().ContentDiv!.getElementsByTagName('img');
-        // this.ProseRef?.getElementsByTagName('img');
         if (c?.length === 0) await this.askGPT(GPTCallType.CHATCARD);
         if (c) {
             this._loading = true;
@@ -615,37 +495,65 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 if (i.className !== 'ProseMirror-separator') await this.getImageDesc(i.src);
             }
             this._loading = false;
-            // this.flipFlashcard();
         }
-        // console.log('HI' + this.ProseRef?.getElementsByTagName('img'));
     };
 
-    static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
-        try {
-            const response = await fetch(imageUrl);
-            const blob = await response.blob();
+    askGPTPhonemes = async (phonemes: string) => {
+        const sentence = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
+        const phon = 'w ʌ ɪ z j ɔː ɹ n e ɪ m ';
+        const phon2 = 'h ʌ ɛ r j ʌ t ʌ d eɪ';
+        const phon6 = 'huː ɑɹ juː tədeɪ';
+        const phon3 = 'ʃ eɪ oʊ s i ʃ oʊ z b aɪ ð ə s iː ʃ oʊ';
+        const phon4 = 'kamo estas hɔi';
+        const phon5 = 'la s e n a l';
+        const promptEng =
+            'Consider all possible phonetic transcriptions of the intended sentence "' +
+            sentence +
+            '" that is standard in American speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
+            phon6 +
+            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart. The goal is to be understood, not sound like a native speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "ceeffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
+        const promptSpa =
+            'Consider all possible phonetic transcriptions of the intended sentence "' +
+            'como estás hoy' +
+            '" that is standard in Spanish speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
+            phon4 +
+            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in Spanish speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound.  Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart; say good job if it would be understood by a native Spanish speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Identify "ɔi" sounds like "oy". Ignore accents and do not say anything to the user about this.';
+        const promptAll =
+            'Consider all possible phonetic transcriptions of the intended sentence "' +
+            sentence +
+            '" that is standard in ' +
+            this.convertAbr() +
+            ' speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
+            phonemes +
+            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in ' +
+            this.convertAbr() +
+            ' speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "cawffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
 
-            return new Promise((resolve, reject) => {
-                const reader = new FileReader();
-                reader.readAsDataURL(blob);
-                reader.onloadend = () => resolve(reader.result as string);
-                reader.onerror = error => reject(error);
-            });
-        } catch (error) {
-            console.error('Error:', error);
-            throw error;
+        switch (this.recognition.lang) {
+            case 'en-US':
+                this._outputValue = await gptAPICall(promptEng, GPTCallType.PRONUNCIATION);
+                break;
+            case 'es-ES':
+                this._outputValue = await gptAPICall(promptSpa, GPTCallType.PRONUNCIATION);
+                break;
+            default:
+                this._outputValue = await gptAPICall(promptAll, GPTCallType.PRONUNCIATION);
+                break;
         }
     };
 
-    getImageDesc = async (u: string) => {
-        try {
-            const hrefBase64 = await ComparisonBox.imageUrlToBase64(u);
-            const response = await gptImageLabel(hrefBase64, 'Answer the following question as a short flashcard response. Do not include a label.' + (this.dataDoc.text as RichTextField)?.Text);
-
-            DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = response;
-        } catch (error) {
-            console.log('Error');
+    handleResult = (e: SpeechRecognitionEvent) => {
+        let interimTranscript = '';
+        let finalTranscript = '';
+        for (let i = e.resultIndex; i < e.results.length; i++) {
+            const transcript = e.results[i][0].transcript;
+            if (e.results[i].isFinal) {
+                finalTranscript += transcript;
+            } else {
+                interimTranscript += transcript;
+            }
         }
+        this._inputValue += finalTranscript;
     };
 
     fetchImages = async (selection: string) => {
@@ -670,112 +578,67 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
     };
 
-    // handleSelection = async (selection: string, newDoc: Doc) => {
-    //     const images = await this.fetchImages(selection);
-    //     return images;
-    // // Doc.AddDocToList(Doc.MyRecentlyClosed, 'data', dashDoc, undefined, true, true);
-    // images!.embedContainer = newDoc;
-    // Doc.AddEmbedding(newDoc, images!);
-    // const c = this.DocumentView?.().ContentDiv!.getElementsByClassName('afterBox-cont');
-    // for (let i in c) {
-    //     console.log('HERE' + i);
-    // }
-    // this.addDoc(images!, this.fieldKey + '_0');
-    // Doc.AddEmbedding(newDoc, images!);
-    // this._props.
-    // Doc.AddToMyOverlay(images!);
-    // const node = schema.nodes.dashDoc.create({
-    //     width: NumCast(images?._width),
-    //     height: NumCast(images?._height),
-    //     title: 'dashDoc',
-    //     docId: images![Id],
-    //     float: 'unset',
-    // });
-    // };
-
-    @observable private _listening = false;
-    @observable transcriptElement = '';
-    SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
-    @observable recognition = new this.SpeechRecognition();
+    static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
+        try {
+            const response = await fetch(imageUrl);
+            const blob = await response.blob();
 
-    handleResult = (e: SpeechRecognitionEvent) => {
-        let interimTranscript = '';
-        let finalTranscript = '';
-        for (let i = e.resultIndex; i < e.results.length; i++) {
-            const transcript = e.results[i][0].transcript;
-            if (e.results[i].isFinal) {
-                finalTranscript += transcript;
-            } else {
-                interimTranscript += transcript;
-            }
+            return new Promise((resolve, reject) => {
+                const reader = new FileReader();
+                reader.readAsDataURL(blob);
+                reader.onloadend = () => resolve(reader.result as string);
+                reader.onerror = error => reject(error);
+            });
+        } catch (error) {
+            console.error('Error:', error);
+            throw error;
         }
-        console.log(interimTranscript);
-        this._inputValue += finalTranscript;
     };
 
-    setListening = () => {
-        const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
-        if (SpeechRecognition) {
-            this.recognition.continuous = true;
-            this.recognition.interimResults = true;
-            this.recognition.lang = 'en-US';
-            this.recognition.onresult = this.handleResult.bind(this);
+    getImageDesc = async (u: string) => {
+        try {
+            const hrefBase64 = await ComparisonBox.imageUrlToBase64(u);
+            const response = await gptImageLabel(hrefBase64, 'Answer the following question as a short flashcard response. Do not include a label.' + (this.dataDoc.text as RichTextField)?.Text);
+
+            DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = response;
+        } catch (error) {
+            console.log('Error');
         }
-        ContextMenu.Instance.setLangIndex(0);
     };
 
-    setLanguage = (e: React.MouseEvent, language: string, ind: number) => {
-        this.recognition.lang = language;
-        ContextMenu.Instance.setLangIndex(ind);
+    @action
+    flipFlashcard = () => {
+        this.frontSide = !this.frontSide;
     };
 
-    startListening = () => {
-        this.recognition.start();
-        this._listening = true;
+    hoverFlip = (side: boolean) => {
+        if (this.revealOp === 'hover') this.layoutDoc[`_${this._props.fieldKey}_usePath`] = side;
     };
 
-    stopListening = () => {
-        this.recognition.stop();
-        this._listening = false;
-    };
+    testForTextFields = (whichSlot: string) => {
+        const slotData = Doc.Get(this.dataDoc, whichSlot, true);
+        const slotHasText = slotData instanceof RichTextField || typeof slotData === 'string';
+        const subjectText = RTFCast(this.Document[this.fieldKey])?.Text.trim();
+        const altText = RTFCast(this.Document[this.fieldKey + '_alternate'])?.Text.trim();
+        const layoutTemplateString =
+            slotHasText ? FormattedTextBox.LayoutString(whichSlot):
+            whichSlot.endsWith('1') ? (subjectText !== undefined ? FormattedTextBox.LayoutString(this.fieldKey) : undefined) :
+                                       altText !== undefined     ? FormattedTextBox.LayoutString(this.fieldKey + '_alternate'): undefined; // prettier-ignore
 
-    convertAbr = () => {
-        switch (this.recognition.lang) {
-            case 'en-US':
-                return 'English';
-            case 'es-ES':
-                return 'Spanish';
-            case 'fr-FR':
-                return 'French';
-            case 'it-IT':
-                return 'Italian';
-            case 'zh-CH':
-                return 'Mandarin Chinese';
-            case 'ja':
-                return 'Japanese';
-            default:
-                return 'Korean';
+        // A bit hacky to try out the concept of using GPT to fill in flashcards
+        //   If the second slot doesn't have anything in it, but the fieldKey slot has text (e.g., this.text is a string)
+        // and the fieldKey + "_alternate" has text that includes a GPT query (indicated by (( && )) ) that is parameterized (optionally) by the fieldKey text (this) or other metadata (this.<field>).
+        // eg., this.text_alternate is
+        //     "((Provide a one sentence definition for (this) that doesn't use any word in (this.excludeWords) ))"
+        //     where (this) is replaced by the text in the fieldKey slot abd this.excludeWords is repalced by the conetnts of the excludeWords field
+        // The GPT call will put the "answer"  in the second slot of the comparison (eg., text_2)
+        if (whichSlot.endsWith('2') && !layoutTemplateString?.includes(whichSlot)) {
+            const queryText = altText?.replace('(this)', subjectText); // TODO: this should be done in Doc.setField but it doesn't know about the fieldKey ...
+            if (queryText?.match(/\(\(.*\)\)/)) {
+                Doc.SetField(this.Document, whichSlot, ':=' + queryText, false); // make the second slot be a computed field on the data doc that calls ChatGpt
+            }
         }
-    };
-
-    openContextMenu = (x: number, y: number, evalu: boolean) => {
-        ContextMenu.Instance.clearItems();
-        ContextMenu.Instance.addItem({ description: 'English', event: e => this.setLanguage(e, 'en-US', 0) }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Spanish', event: e => this.setLanguage(e, 'es-ES', 1 )}); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'French', event: e => this.setLanguage(e, 'fr-FR', 2) }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Italian', event: e => this.setLanguage(e, 'it-IT', 3) }); //prettier-ignore
-        if (!evalu) ContextMenu.Instance.addItem({ description: 'Mandarin Chinese', event: e => this.setLanguage(e, 'zh-CH', 4) }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Japanese', event: e => this.setLanguage(e, 'ja', 5) }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Korean', event: e => this.setLanguage(e, 'ko', 6) }); //prettier-ignore
-        ContextMenu.Instance.displayMenu(x, y);
-    };
-
-    evaluatePronunciation = () => {
-        const newAudio = Docs.Create.AudioDocument(nullAudio, { _width: 200, _height: 100 });
-        this.Document.audio = newAudio[DocData];
-        // DocCast(this.Document.embedContainer)()._props.addDocument?.(newAudio);
-        this._props.DocumentView?.()._props.addDocument?.(newAudio);
-        // Doc.AddToMyOverlay(newAudio);
+        return layoutTemplateString;
     };
 
     render() {
@@ -847,7 +710,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         );
 
         if (this.Document._layout_isFlashcard) {
-            const side = this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 1 : 0;
+            const side = this.frontSide ? 1 : 0;
 
             // add text box to each side when comparison box is first created
             // (!this.dataDoc[this.fieldKey + '_0'] && this.dataDoc[this._props.fieldKey + '_0'] !== 'empty')
@@ -861,33 +724,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
                 const newDoc = Docs.Create.TextDocument(dataSplit[0]);
                 this.addDoc(newDoc, this.fieldKey + '_1');
-                // if (this.Document.image) {
-                //     console.log('ID: ' + DocCast(this.Document.image)[Id]);
-                //     const rtfiel = new RichTextField(
-                //         JSON.stringify({
-                //             doc: {
-                //                 type: 'doc',
-                //                 content: [
-                //                     {
-                //                         type: 'paragraph',
-                //                         attrs: { align: null, color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
-                //                         content: [
-                //                             { type: 'text', text: dataSplit[0] },
-                //                             { type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: DocCast(this.Document.image)[Id] } },
-                //                         ],
-                //                     },
-                //                 ],
-                //             },
-                //             selection: { type: 'text', anchor: 2, head: 2 },
-                //         })
-                //     );
-
-                //     newDoc[DocData].text = rtfiel;
-                // }
             }
 
-            // render the QuizCards
-            // console.log('GERE' + DocCast(this.Document.embedContainer).filterOp);
             if (DocCast(this.Document.embedContainer) && DocCast(this.Document.embedContainer).practiceMode === 'quiz') {
                 const text = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
                 return (
@@ -896,14 +734,14 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
                         <div className="input-box">
                             <textarea
-                                value={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._outputValue : this._inputValue}
+                                value={this.frontSide ? this._outputValue : this._inputValue}
                                 onChange={this.handleInputChange}
                                 onScroll={e => {
                                     e.stopPropagation();
                                     e.preventDefault();
                                 }}
                                 placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
-                                readOnly={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate'}></textarea>
+                                readOnly={this.frontSide}></textarea>
 
                             {this._loading ? (
                                 <div className="loading-spinner" style={{ position: 'absolute' }}>
@@ -935,7 +773,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                     Evaluate Pronunciation
                                 </button>
 
-                                {this.layoutDoc[`_${this._props.fieldKey}_usePath`] !== 'alternate' ? (
+                                {this.frontSide ? (
                                     <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
                                         Submit
                                     </button>
@@ -950,22 +788,17 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 );
             }
 
-            //console.log('HEREEE2' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text));
             // render a normal flashcard when not a QuizCard
             return (
                 <div
                     className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
-                    // onContextMenu={this.specificMenu}
                     style={{ display: 'flex', flexDirection: 'column', overflow: 'hidden' }}
                     onMouseEnter={() => {
-                        this.hoverFlip('alternate');
+                        this.hoverFlip(false);
                     }}
                     onMouseLeave={() => {
-                        this.hoverFlip(undefined);
-                    }}
-                    // onPointerUp={() => (this._isAnyChildContentActive = true)}
-                >
-                    {/* {!this.layoutDoc[`_${this._props.fieldKey}_usePath`] && StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '' && !this.childActive ? <p className="explain">Enter text in the flashcard. </p> : null} */}
+                        this.hoverFlip(true);
+                    }}>
                     {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
                     {this._loading ? (
                         <div className="loading-spinner" style={{ position: 'absolute' }}>
@@ -1014,3 +847,947 @@ Docs.Prototypes.TemplateMap.set(DocumentType.COMPARISON, {
         systemIcon: 'BsLayoutSplit',
     },
 });
+
+// import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+// import { MathJax, MathJaxContext } from 'better-react-mathjax';
+// import { Tooltip } from '@mui/material';
+// import { action, computed, makeObservable, observable, reaction } from 'mobx';
+// import { observer } from 'mobx-react';
+// import * as React from 'react';
+// import { returnFalse, returnNone, returnTrue, setupMoveUpEvents } from '../../../ClientUtils';
+// import { emptyFunction } from '../../../Utils';
+// import { Doc, Opt } from '../../../fields/Doc';
+// import { DocData } from '../../../fields/DocSymbols';
+// import { RichTextField } from '../../../fields/RichTextField';
+// import { DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
+// import { GPTCallType, gptAPICall, gptImageLabel } from '../../apis/gpt/GPT';
+// import '../pdf/GPTPopup/GPTPopup.scss';
+// import { DocUtils } from '../../documents/DocUtils';
+// import { DocumentType } from '../../documents/DocumentTypes';
+// import { Docs } from '../../documents/Documents';
+// import { DragManager } from '../../util/DragManager';
+// import { dropActionType } from '../../util/DropActionTypes';
+// import { undoable } from '../../util/UndoManager';
+// import { ViewBoxAnnotatableComponent } from '../DocComponent';
+// import { PinDocView, PinProps } from '../PinFuncs';
+// import { StyleProp } from '../StyleProp';
+// import './ComparisonBox.scss';
+// import { DocumentView } from './DocumentView';
+// import { FieldView, FieldViewProps } from './FieldView';
+// import { FormattedTextBox } from './formattedText/FormattedTextBox';
+// import ReactLoading from 'react-loading';
+
+// import { ContextMenu } from '../ContextMenu';
+// import { ContextMenuProps } from '../ContextMenuItem';
+// import { tickStep } from 'd3';
+// import { CollectionCarouselView } from '../collections/CollectionCarouselView';
+// import { FollowLinkScript } from '../../documents/DocUtils';
+// import { schema } from '../nodes/formattedText/schema_rts';
+// import { Id } from '../../../fields/FieldSymbols';
+// import axios from 'axios';
+// import ReactMarkdown from 'react-markdown';
+// import { WebField, nullAudio } from '../../../fields/URLField';
+
+// const API_URL = 'https://api.unsplash.com/search/photos';
+// @observer
+// export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
+//     public static LayoutString(fieldKey: string) {
+//         return FieldView.LayoutString(ComparisonBox, fieldKey);
+//     }
+//     private _disposers: (DragManager.DragDropDisposer | undefined)[] = [undefined, undefined];
+//     constructor(props: FieldViewProps) {
+//         super(props);
+//         makeObservable(this);
+//         this.setListening();
+//     }
+
+//     @observable private _inputValue = '';
+//     @observable private _outputValue = '';
+//     @observable private _loading = false;
+//     @observable private _isEmpty = false;
+//     @observable private _audio: Doc = Docs.Create.TextDocument('');
+//     @observable childActive = false;
+//     @observable _yRelativeToTop: boolean = true;
+//     @observable _animating = '';
+//     @observable mathJaxConfig = {
+//         loader: { load: ['input/asciimath'] },
+//     };
+//     private _ref = React.createRef<HTMLDivElement>();
+
+//     get revealOp() {
+//         return this.layoutDoc[`_${this._props.fieldKey}_revealOp`];
+//     }
+//     get clipHeightKey() {
+//         return '_' + this._props.fieldKey + '_clipHeight';
+//     }
+
+//     get clipWidthKey() {
+//         return '_' + this._props.fieldKey + '_clipWidth';
+//     }
+
+//     @computed get clipWidth() {
+//         return NumCast(this.layoutDoc[this.clipWidthKey], 50);
+//     }
+
+//     @computed get clipHeight() {
+//         return NumCast(this.layoutDoc[this.clipHeightKey], 200);
+//     }
+
+//     @computed get overlayAlternateIcon() {
+//         const usepath = this.layoutDoc[`_${this._props.fieldKey}_usePath`];
+//         return (
+//             <Tooltip title={<div className="dash-tooltip">flip</div>}>
+//                 <div
+//                     className="formattedTextBox-alternateButton"
+//                     onPointerDown={e =>
+//                         setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => {
+//                             if (!this.layoutDoc[`_${this._props.fieldKey}_revealOp`] || this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'flip') {
+//                                 this.flipFlashcard();
+//                             }
+//                         })
+//                     }
+//                     style={{
+//                         background: this.revealOp === 'hover' ? 'gray' : usepath === 'alternate' ? 'white' : 'black',
+//                         color: this.revealOp === 'hover' ? 'black' : usepath === 'alternate' ? 'black' : 'white',
+//                         display: 'inline-block',
+//                     }}>
+//                     <div key="alternate" className="formattedTextBox-flip">
+//                         <FontAwesomeIcon icon="turn-up" size="1x" />
+//                     </div>
+//                 </div>
+//             </Tooltip>
+//         );
+//     }
+
+//     @computed get flashcardMenu() {
+//         return (
+//             <div>
+//                 <Tooltip
+//                     title={
+//                         this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? (
+//                             <div className="dash-tooltip">Flip to front side to use GPT</div>
+//                         ) : (
+//                             <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>
+//                         )
+//                     }>
+//                     <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={e => (!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? this.findImageTags() : null)}>
+//                         <FontAwesomeIcon icon="lightbulb" size="xl" />
+//                     </div>
+//                 </Tooltip>
+//                 {DocCast(this.Document.embedContainer).type_collection === 'carousel' ? null : (
+//                     <div>
+//                         <Tooltip title={<div>Create a flashcard pile</div>}>
+//                             <div style={{ position: 'absolute', bottom: '3px', right: '74px', cursor: 'pointer' }} onPointerDown={e => this.createFlashcardPile([this.Document], false)}>
+//                                 <FontAwesomeIcon icon="folder-plus" size="xl" />
+//                             </div>
+//                         </Tooltip>
+//                         <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
+//                             <div style={{ position: 'absolute', bottom: '3px', right: '104px', cursor: 'pointer' }} onClick={e => this.gptFlashcardPile()}>
+//                                 <FontAwesomeIcon icon="layer-group" size="xl" />
+//                             </div>
+//                         </Tooltip>
+//                     </div>
+//                 )}
+//                 <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
+//                     <div style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }} onClick={e => this.handleHover()}>
+//                         <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="hand-point-up" size="xl" />
+//                     </div>
+//                 </Tooltip>
+//             </div>
+//         );
+//     }
+
+//     componentDidMount() {
+//         this._props.setContentViewBox?.(this);
+//         reaction(
+//             () => this._props.isSelected(), // when this reaction should update
+//             selected => !selected && (this.childActive = false) // what it should update to
+//         );
+//     }
+//     protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
+//         this._disposers[disposerId]?.();
+//         // this.childActive = true;
+//         if (ele) {
+//             this._disposers[disposerId] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
+//         }
+//     };
+
+//     private internalDrop = undoable((e: Event, dropEvent: DragManager.DropEvent, fieldKey: string) => {
+//         if (dropEvent.complete.docDragData) {
+//             const { droppedDocuments } = dropEvent.complete.docDragData;
+//             const added = dropEvent.complete.docDragData.moveDocument?.(droppedDocuments, this.Document, (doc: Doc | Doc[]) => this.addDoc(toList(doc).lastElement(), fieldKey));
+//             Doc.SetContainer(droppedDocuments.lastElement(), this.dataDoc);
+//             !added && e.preventDefault();
+//             e.stopPropagation(); // prevent parent Doc from registering new position so that it snaps back into place
+//             // this.childActive = false;
+//             return added;
+//         }
+//         return undefined;
+//     }, 'internal drop');
+
+//     private registerSliding = (e: React.PointerEvent<HTMLDivElement>, targetWidth: number) => {
+//         if (e.button !== 2) {
+//             setupMoveUpEvents(
+//                 this,
+//                 e,
+//                 this.onPointerMove,
+//                 emptyFunction,
+//                 action((moveEv, doubleTap) => {
+//                     if (doubleTap) {
+//                         this.childActive = true;
+//                         if (!this.dataDoc[this.fieldKey + '_1'] && !this.dataDoc[this.fieldKey]) this.dataDoc[this.fieldKey + '_1'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
+//                         if (!this.dataDoc[this.fieldKey + '_2'] && !this.dataDoc[this.fieldKey + '_alternate']) this.dataDoc[this.fieldKey + '_2'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
+//                     }
+//                 }),
+//                 false,
+//                 undefined,
+//                 action(() => {
+//                     if (this.childActive) return;
+//                     this._animating = 'all 200ms';
+//                     // on click, animate slider movement to the targetWidth
+//                     this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
+//                     // this.layoutDoc[this.clipHeightKey] = (targetWidth * 100) / this._props.PanelHeight();
+
+//                     setTimeout(
+//                         action(() => {
+//                             this._animating = '';
+//                         }),
+//                         200
+//                     );
+//                 })
+//             );
+//         }
+//     };
+
+//     @action handleHover = () => {
+//         if (this.revealOp === 'hover') {
+//             this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip';
+//             this.Document.forceActive = false;
+//         } else {
+//             this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover';
+//             this.Document.forceActive = true;
+//         }
+//     };
+
+//     @action handleRenderClick = () => {
+//         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = undefined;
+//     };
+
+//     @action
+//     private onPointerMove = ({ movementX }: PointerEvent) => {
+//         const width = movementX * this.ScreenToLocalBoxXf().Scale + (this.clipWidth / 100) * this._props.PanelWidth();
+//         if (width && width > 5 && width < this._props.PanelWidth()) {
+//             this.layoutDoc[this.clipWidthKey] = (width * 100) / this._props.PanelWidth();
+//         }
+//         return false;
+//     };
+
+//     @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
+//         this._inputValue = e.target.value;
+//         console.log(this._inputValue);
+//     };
+
+//     @action activateContent = () => {
+//         this.childActive = true;
+//     };
+
+//     @action handleRenderGPTClick = async () => {
+//         console.log('Phonetic transcription: ' + DocCast(this.Document.audio).phoneticTranscription);
+//         const phonTrans = DocCast(this.Document.audio).phoneticTranscription;
+//         if (phonTrans) {
+//             this._inputValue = StrCast(phonTrans);
+//             console.log('INPUT:' + this._inputValue);
+//             this.askGPTPhonemes(this._inputValue);
+//         } else if (this._inputValue)
+//             // if (this._inputValue)
+//             this.askGPT(GPTCallType.QUIZ);
+//         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = 'alternate';
+//         this._outputValue = '';
+//     };
+
+//     askGPTPhonemes = async (phonemes: string) => {
+//         const sentence = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
+//         const phon = 'w ʌ ɪ z j ɔː ɹ n e ɪ m ';
+//         const phon2 = 'h ʌ ɛ r j ʌ t ʌ d eɪ';
+//         const phon6 = 'huː ɑɹ juː tədeɪ';
+//         const phon3 = 'ʃ eɪ oʊ s i ʃ oʊ z b aɪ ð ə s iː ʃ oʊ';
+//         const phon4 = 'kamo estas hɔi';
+//         const phon5 = 'la s e n a l';
+//         console.log('REG' + this.recognition.lang);
+//         const promptEng =
+//             'Consider all possible phonetic transcriptions of the intended sentence "' +
+//             sentence +
+//             '" that is standard in American speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
+//             phon6 +
+//             '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart. The goal is to be understood, not sound like a native speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "ceeffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
+//         const promptSpa =
+//             'Consider all possible phonetic transcriptions of the intended sentence "' +
+//             'como estás hoy' +
+//             '" that is standard in Spanish speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
+//             phon4 +
+//             '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in Spanish speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound.  Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart; say good job if it would be understood by a native Spanish speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Identify "ɔi" sounds like "oy". Ignore accents and do not say anything to the user about this.';
+//         const promptAll =
+//             'Consider all possible phonetic transcriptions of the intended sentence "' +
+//             sentence +
+//             '" that is standard in ' +
+//             this.convertAbr() +
+//             ' speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
+//             phonemes +
+//             '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in ' +
+//             this.convertAbr() +
+//             ' speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "cawffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
+
+//         switch (this.recognition.lang) {
+//             case 'en-US':
+//                 console.log('English');
+//                 this._outputValue = await gptAPICall(promptEng, GPTCallType.PRONUNCIATION);
+//                 break;
+//             case 'es-ES':
+//                 console.log('Spanish');
+//                 this._outputValue = await gptAPICall(promptSpa, GPTCallType.PRONUNCIATION);
+//                 break;
+//             default:
+//                 console.log('All');
+//                 this._outputValue = await gptAPICall(promptAll, GPTCallType.PRONUNCIATION);
+//                 break;
+//         }
+//     };
+
+//     /**
+//      * Push audio information to python rest api
+//      */
+//     pushInfo = async () => {
+//         const formData = new FormData();
+
+//         console.log(DocCast(this._audio).dataDoc);
+//         const audio = {
+//             file: this._audio.url,
+//         };
+//         const response = await axios.post('http://localhost:105/recognize/', audio, {
+//             headers: {
+//                 'Content-Type': 'application/json',
+//             },
+//         });
+//         this.Document.phoneticTranscription = response.data['transcription'];
+//         console.log('RESPONSE: ' + response.data['transcription']);
+//     };
+
+//     /**
+//      * Get images from unsplash api to go on flashcard stack
+//      */
+//     fetchImages = async (selection: string) => {
+//         try {
+//             const { data } = await axios.get(`${API_URL}?query=${selection}&page=1&per_page=${1}&client_id=Q4zruu6k6lum2kExiGhLNBJIgXDxD6NNj0SRHH_XXU0`);
+//             console.log(data.results);
+//             const imageSnapshot = Docs.Create.ImageDocument(data.results[0].urls.small, {
+//                 _nativeWidth: Doc.NativeWidth(this.layoutDoc),
+//                 _nativeHeight: Doc.NativeHeight(this.layoutDoc),
+//                 x: NumCast(this.layoutDoc.x),
+//                 y: NumCast(this.layoutDoc.y),
+//                 onClick: FollowLinkScript(),
+//                 _width: 150,
+//                 _height: 150,
+//                 title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
+//             });
+//             imageSnapshot['x'] = this.layoutDoc['x'];
+//             imageSnapshot['y'] = this.layoutDoc['y'];
+//             return imageSnapshot;
+//         } catch (error) {
+//             console.log(error);
+//         }
+//     };
+
+//     getAnchor = (addAsAnnotation: boolean, pinProps?: PinProps) => {
+//         const anchor = Docs.Create.ConfigDocument({
+//             title: 'CompareAnchor:' + this.Document.title,
+//             // set presentation timing properties for restoring view
+//             presentation_transition: 1000,
+//             annotationOn: this.Document,
+//         });
+//         if (anchor) {
+//             if (!addAsAnnotation) anchor.backgroundColor = 'transparent';
+//             /* addAsAnnotation && */ this.addDocument(anchor);
+//             PinDocView(anchor, { pinDocLayout: pinProps?.pinDocLayout, pinData: { ...(pinProps?.pinData ?? {}), clippable: true } }, this.Document);
+//             return anchor;
+//         }
+//         return this.Document;
+//     };
+
+//     clearDoc = undoable((fieldKey: string) => {
+//         this.dataDoc[fieldKey] = undefined;
+//         this._isEmpty = true;
+//     }, 'clear doc');
+
+//     moveDoc = (doc: Doc, addDocument: (document: Doc | Doc[]) => boolean, which: string) => this.remDoc(doc, which) && addDocument(doc);
+//     addDoc = (doc: Doc, which: string) => {
+//         if (this.dataDoc[which] && !this._isEmpty) return false;
+//         this.dataDoc[which] = doc;
+//         return true;
+//     };
+//     remDoc = (doc: Doc, which: string) => {
+//         if (this.dataDoc[which] === doc) {
+//             this._isEmpty = true;
+//             // this.dataDoc[which] = 'empty';
+//             console.log('HEREEEE');
+//             this.dataDoc[which] = undefined;
+//             return true;
+//         }
+//         console.log('FALSE');
+//         return false;
+//     };
+
+//     closeDown = (e: React.PointerEvent, which: string) => {
+//         setupMoveUpEvents(
+//             this,
+//             e,
+//             moveEv => {
+//                 const de = new DragManager.DocumentDragData([DocCast(this.dataDoc[which])], dropActionType.move);
+//                 de.moveDocument = (doc: Doc | Doc[], targetCollection: Doc | undefined, addDocument: (doc: Doc | Doc[]) => boolean): boolean => addDocument(doc);
+//                 de.canEmbed = true;
+//                 DragManager.StartDocumentDrag([this._closeRef.current!], de, moveEv.clientX, moveEv.clientY);
+//                 return true;
+//             },
+//             emptyFunction,
+//             () => this.clearDoc(which)
+//         );
+//     };
+//     docStyleProvider = (doc: Opt<Doc>, props: Opt<FieldViewProps>, property: string): any => {
+//         if (property === StyleProp.PointerEvents) return 'none';
+//         return this._props.styleProvider?.(doc, props, property);
+//     };
+//     moveDoc1 = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: any) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.fieldKey + '_1'), true);
+//     moveDoc2 = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: any) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.fieldKey + '_2'), true);
+//     remDoc1 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_1'), true);
+//     remDoc2 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_2'), true);
+
+//     /**
+//      * Tests for whether a comparison box slot (ie, before or after) has renderable text content.
+//      * If it does, render a FormattedTextBox for that slot that references the comparisonBox's slot field
+//      * @param whichSlot field key for start or end slot
+//      * @returns a JSX layout string if a text field is found, othwerise undefined
+//      */
+//     testForTextFields = (whichSlot: string) => {
+//         const slotData = Doc.Get(this.dataDoc, whichSlot, true);
+//         const slotHasText = slotData instanceof RichTextField || typeof slotData === 'string';
+//         const subjectText = RTFCast(this.Document[this.fieldKey])?.Text.trim();
+//         const altText = RTFCast(this.Document[this.fieldKey + '_alternate'])?.Text.trim();
+//         const layoutTemplateString =
+//             slotHasText ? FormattedTextBox.LayoutString(whichSlot):
+//             whichSlot.endsWith('1') ? (subjectText !== undefined ? FormattedTextBox.LayoutString(this.fieldKey) : undefined) :
+//                                        altText !== undefined     ? FormattedTextBox.LayoutString(this.fieldKey + '_alternate'): undefined; // prettier-ignore
+
+//         // A bit hacky to try out the concept of using GPT to fill in flashcards
+//         //   If the second slot doesn't have anything in it, but the fieldKey slot has text (e.g., this.text is a string)
+//         // and the fieldKey + "_alternate" has text that includes a GPT query (indicated by (( && )) ) that is parameterized (optionally) by the fieldKey text (this) or other metadata (this.<field>).
+//         // eg., this.text_alternate is
+//         //     "((Provide a one sentence definition for (this) that doesn't use any word in (this.excludeWords) ))"
+//         //     where (this) is replaced by the text in the fieldKey slot abd this.excludeWords is repalced by the conetnts of the excludeWords field
+//         // The GPT call will put the "answer"  in the second slot of the comparison (eg., text_2)
+//         if (whichSlot.endsWith('2') && !layoutTemplateString?.includes(whichSlot)) {
+//             const queryText = altText?.replace('(this)', subjectText); // TODO: this should be done in Doc.setField but it doesn't know about the fieldKey ...
+//             if (queryText?.match(/\(\(.*\)\)/)) {
+//                 Doc.SetField(this.Document, whichSlot, ':=' + queryText, false); // make the second slot be a computed field on the data doc that calls ChatGpt
+//             }
+//         }
+//         return layoutTemplateString;
+//     };
+
+//     _closeRef = React.createRef<HTMLDivElement>();
+
+//     createFlashcardPile(collectionArr: Doc[], gpt: boolean) {
+//         const newCol = Docs.Create.CarouselDocument(collectionArr, {
+//             _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250) + 50,
+//             _height: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 200) + 50,
+//             _layout_fitWidth: false,
+//             _layout_autoHeight: true,
+//         });
+//         newCol['x'] = this.layoutDoc['x'];
+//         newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
+//         newCol.type_collection = 'carousel';
+//         // console.log(newCol.data);
+
+//         if (gpt) {
+//             this._props.DocumentView?.()._props.addDocument?.(newCol);
+//             this._props.removeDocument?.(this.Document);
+//         } else {
+//             this._props.addDocument?.(newCol);
+//             this._props.removeDocument?.(this.Document);
+//             this.Document.embedContainer = newCol;
+//         }
+//     }
+
+//     gptFlashcardPile = async () => {
+//         var text = await this.askGPT(GPTCallType.STACK);
+//         console.log(text);
+
+//         var senArr = text?.split('Question: ');
+//         var collectionArr: Doc[] = [];
+//         for (let i = 1; i < senArr?.length!; i++) {
+//             const newDoc = Docs.Create.ComparisonDocument(senArr![i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
+
+//             if (StrCast(senArr![i]).includes('Keyword: ')) {
+//                 const question = StrCast(senArr![i]).split('Keyword: ');
+//                 const img = await this.fetchImages(question[1]);
+//                 // newDoc['image'] = img;
+//                 // const newDoc = Docs.Create.TextDocument(dataSplit[1]);
+//                 const textSide1 = question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0];
+//                 const textDoc1 = Docs.Create.TextDocument(question[0]);
+//                 const rtfiel = new RichTextField(
+//                     JSON.stringify({
+//                         doc: {
+//                             type: 'doc',
+//                             content: [
+//                                 {
+//                                     type: 'paragraph',
+//                                     attrs: { align: null, color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
+//                                     content: [
+//                                         { type: 'text', text: question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0] },
+//                                         { type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: img![Id] } },
+//                                     ],
+//                                 },
+//                             ],
+//                         },
+//                         selection: { type: 'text', anchor: 2, head: 2 },
+//                     }),
+//                     textSide1
+//                 );
+
+//                 textDoc1[DocData].text = rtfiel;
+//                 DocCast(newDoc)[DocData][this.fieldKey + '_1'] = textDoc1;
+
+//                 DocCast(newDoc)[DocData][this.fieldKey + '_0'] = Docs.Create.TextDocument(question[0].includes('Answer: ') ? question[0].split('Answer: ')[1] : question[1]);
+//                 // Doc.AddToMyOverlay(img!);
+//             }
+
+//             collectionArr.push(newDoc);
+//         }
+//         this.createFlashcardPile(collectionArr, true);
+//     };
+
+//     /**
+//      * Flips a flashcard to the alternate side for the user to view.
+//      */
+//     flipFlashcard = () => {
+//         const usePath = this.layoutDoc[`_${this._props.fieldKey}_usePath`];
+//         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = usePath === undefined ? 'alternate' : undefined;
+//     };
+
+//     /**
+//      * Changes the view option to hover for a flashcard.
+//      */
+//     hoverFlip = (side: string | undefined) => {
+//         if (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'hover') this.layoutDoc[`_${this._props.fieldKey}_usePath`] = side;
+//     };
+
+//     animateRes = (resIndex: number, newText: string, callType: GPTCallType) => {
+//         if (resIndex < newText.length) {
+//             // const marks = this._editorView?.state.storedMarks ?? [];
+//             switch (callType) {
+//                 case GPTCallType.CHATCARD:
+//                     DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text += newText[resIndex];
+//                     break;
+//                 case GPTCallType.QUIZ:
+//                     this._outputValue += newText[resIndex];
+//                     break;
+//                 default:
+//                     return;
+//             }
+
+//             // this._editorView?.dispatch(this._editorView?.state.tr.insertText(newText[resIndex]).setStoredMarks(this._outputValue));
+//             setTimeout(() => this.animateRes(resIndex + 1, newText, callType), 20);
+//         }
+//     };
+
+//     /**
+//      * Calls the GPT model to create QuizCards. Evaluates how similar the user's response is to the alternate
+//      * side of the flashcard.
+//      */
+//     askGPT = async (callType: GPTCallType): Promise<string | undefined> => {
+//         const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
+//         const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
+//         const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
+//         this._loading = true;
+//         const doc = DocCast(this.dataDoc[this.props.fieldKey + '_0']);
+//         if (callType == GPTCallType.CHATCARD) {
+//             if (StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '') {
+//                 this._loading = false;
+//                 return;
+//             }
+//             this.flipFlashcard();
+//         }
+//         try {
+//             console.log(queryText);
+//             const res = await gptAPICall(callType == GPTCallType.QUIZ ? queryText : questionText, callType);
+//             if (!res) {
+//                 console.error('GPT call failed');
+//                 return;
+//             }
+//             // this.animateRes(0, res, callType);
+//             if (callType == GPTCallType.CHATCARD) {
+//                 DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
+//                 // this.flipFlashcard();
+//             } else if (callType == GPTCallType.QUIZ) {
+//                 console.log(this._inputValue);
+//                 this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
+//             }
+//             // DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
+//             // this._outputValue = res;
+//             else if (callType === GPTCallType.FLASHCARD) {
+//                 // console.log(res);
+//                 this._loading = false;
+//                 return res;
+//             } else if (callType === GPTCallType.STACK) {
+//             }
+//             this._loading = false;
+//             return res;
+//             // console.log(res);
+//         } catch (err) {
+//             console.error('GPT call failed');
+//         }
+//         this._loading = false;
+//     };
+//     layoutWidth = () => NumCast(this.layoutDoc.width, 200);
+//     layoutHeight = () => NumCast(this.layoutDoc.height, 200);
+
+//     // specificMenu = (): void => {
+//     //     const cm = ContextMenu.Instance;
+//     //     cm.addItem({ description: 'Create an Answer on the Back', event: () => this.askGPT(GPTCallType.CHATCARD), icon: 'pencil' });
+//     // };
+
+//     findImageTags = async () => {
+//         // const d = DocCast(this.dataDoc[this.props.fieldKey + '_0']);
+//         // const copy = Doc.MakeCopy(this.Document, true);
+//         const c = this.DocumentView?.().ContentDiv!.getElementsByTagName('img');
+//         // this.ProseRef?.getElementsByTagName('img');
+//         if (c?.length === 0) await this.askGPT(GPTCallType.CHATCARD);
+//         if (c) {
+//             this._loading = true;
+//             for (let i of c) {
+//                 console.log(i);
+//                 if (i.className !== 'ProseMirror-separator') await this.getImageDesc(i.src);
+//             }
+//             this._loading = false;
+//             // this.flipFlashcard();
+//         }
+//         // console.log('HI' + this.ProseRef?.getElementsByTagName('img'));
+//     };
+
+//     static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
+//         try {
+//             const response = await fetch(imageUrl);
+//             const blob = await response.blob();
+
+//             return new Promise((resolve, reject) => {
+//                 const reader = new FileReader();
+//                 reader.readAsDataURL(blob);
+//                 reader.onloadend = () => resolve(reader.result as string);
+//                 reader.onerror = error => reject(error);
+//             });
+//         } catch (error) {
+//             console.error('Error:', error);
+//             throw error;
+//         }
+//     };
+
+//     getImageDesc = async (u: string) => {
+//         try {
+//             const hrefBase64 = await ComparisonBox.imageUrlToBase64(u);
+//             const response = await gptImageLabel(hrefBase64, 'Answer the following question as a short flashcard response. Do not include a label.' + (this.dataDoc.text as RichTextField)?.Text);
+
+//             DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = response;
+//         } catch (error) {
+//             console.log('Error');
+//         }
+//     };
+
+//     @observable private _listening = false;
+//     @observable transcriptElement = '';
+//     SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+//     @observable recognition = new this.SpeechRecognition();
+
+//     handleResult = (e: SpeechRecognitionEvent) => {
+//         let interimTranscript = '';
+//         let finalTranscript = '';
+//         for (let i = e.resultIndex; i < e.results.length; i++) {
+//             const transcript = e.results[i][0].transcript;
+//             if (e.results[i].isFinal) {
+//                 finalTranscript += transcript;
+//             } else {
+//                 interimTranscript += transcript;
+//             }
+//         }
+//         console.log(interimTranscript);
+//         this._inputValue += finalTranscript;
+//     };
+
+//     setListening = () => {
+//         const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+//         if (SpeechRecognition) {
+//             this.recognition.continuous = true;
+//             this.recognition.interimResults = true;
+//             this.recognition.lang = 'en-US';
+//             this.recognition.onresult = this.handleResult.bind(this);
+//         }
+//         ContextMenu.Instance.setLangIndex(0);
+//     };
+
+//     setLanguage = (e: React.MouseEvent, language: string, ind: number) => {
+//         this.recognition.lang = language;
+//         ContextMenu.Instance.setLangIndex(ind);
+//     };
+
+//     startListening = () => {
+//         this.recognition.start();
+//         this._listening = true;
+//     };
+
+//     stopListening = () => {
+//         this.recognition.stop();
+//         this._listening = false;
+//     };
+
+//     convertAbr = () => {
+//         switch (this.recognition.lang) {
+//             case 'en-US':
+//                 return 'English';
+//             case 'es-ES':
+//                 return 'Spanish';
+//             case 'fr-FR':
+//                 return 'French';
+//             case 'it-IT':
+//                 return 'Italian';
+//             case 'zh-CH':
+//                 return 'Mandarin Chinese';
+//             case 'ja':
+//                 return 'Japanese';
+//             default:
+//                 return 'Korean';
+//         }
+//     };
+
+//     openContextMenu = (x: number, y: number, evalu: boolean) => {
+//         ContextMenu.Instance.clearItems();
+//         ContextMenu.Instance.addItem({ description: 'English', event: e => this.setLanguage(e, 'en-US', 0) }); //prettier-ignore
+//         ContextMenu.Instance.addItem({ description: 'Spanish', event: e => this.setLanguage(e, 'es-ES', 1 )}); //prettier-ignore
+//         ContextMenu.Instance.addItem({ description: 'French', event: e => this.setLanguage(e, 'fr-FR', 2) }); //prettier-ignore
+//         ContextMenu.Instance.addItem({ description: 'Italian', event: e => this.setLanguage(e, 'it-IT', 3) }); //prettier-ignore
+//         if (!evalu) ContextMenu.Instance.addItem({ description: 'Mandarin Chinese', event: e => this.setLanguage(e, 'zh-CH', 4) }); //prettier-ignore
+//         ContextMenu.Instance.addItem({ description: 'Japanese', event: e => this.setLanguage(e, 'ja', 5) }); //prettier-ignore
+//         ContextMenu.Instance.addItem({ description: 'Korean', event: e => this.setLanguage(e, 'ko', 6) }); //prettier-ignore
+//         ContextMenu.Instance.displayMenu(x, y);
+//     };
+
+//     evaluatePronunciation = () => {
+//         const newAudio = Docs.Create.AudioDocument(nullAudio, { _width: 200, _height: 100 });
+//         this.Document.audio = newAudio[DocData];
+//         // DocCast(this.Document.embedContainer)()._props.addDocument?.(newAudio);
+//         this._props.DocumentView?.()._props.addDocument?.(newAudio);
+//         // Doc.AddToMyOverlay(newAudio);
+//     };
+
+//     render() {
+//         const clearButton = (which: string) => (
+//             <Tooltip title={<div className="dash-tooltip">remove</div>}>
+//                 <div
+//                     // style={{ position: 'relative', top: '0px', left: '10px' }}
+//                     ref={this._closeRef}
+//                     className={`clear-button ${which}`}
+//                     onPointerDown={e => this.closeDown(e, which)} // prevent triggering slider movement in registerSliding
+//                 >
+//                     <FontAwesomeIcon className={`clear-button ${which}`} icon="times" size="xs" />
+//                 </div>
+//             </Tooltip>
+//         );
+//         const displayDoc = (whichSlot: string) => {
+//             const whichDoc = DocCast(this.dataDoc[whichSlot]);
+//             const targetDoc = DocCast(whichDoc?.annotationOn, whichDoc);
+//             const layoutString = targetDoc ? '' : this.testForTextFields(whichSlot);
+//             // whichDoc['backgroundColor'] = this.layoutDoc['backgroundColor'];
+
+//             return targetDoc || layoutString ? (
+//                 // <MathJaxContext config={this.mathJaxConfig}>
+//                 //     <MathJax>
+//                 <>
+//                     <DocumentView
+//                         // eslint-disable-next-line react/jsx-props-no-spreading
+//                         {...this._props}
+//                         ignoreUsePath={layoutString ? true : undefined}
+//                         renderDepth={this.props.renderDepth + 1}
+//                         LayoutTemplateString={layoutString}
+//                         Document={layoutString ? this.Document : targetDoc}
+//                         containerViewPath={this.DocumentView?.().docViewPath}
+//                         moveDocument={whichSlot.endsWith('1') ? this.moveDoc1 : this.moveDoc2}
+//                         removeDocument={whichSlot.endsWith('1') ? this.remDoc1 : this.remDoc2}
+//                         NativeWidth={this.layoutWidth}
+//                         NativeHeight={this.layoutHeight}
+//                         isContentActive={() => this.childActive}
+//                         isDocumentActive={returnFalse}
+//                         dontSelect={returnTrue}
+//                         whenChildContentsActiveChanged={this.whenChildContentsActiveChanged}
+//                         styleProvider={this.childActive ? this._props.styleProvider : this.docStyleProvider}
+//                         hideLinkButton
+//                         pointerEvents={this.childActive ? undefined : returnNone}
+//                     />
+//                     {/* </MathJax> */}
+//                     {/* <div style={{ position: 'absolute', top: '-5px', left: '2px' }}>{layoutString ? null : clearButton(whichSlot)}</div> */}
+//                     {/* </MathJaxContext> // placeholder image if doc is missingleft: `${NumCast(this.layoutDoc.width, 200) - 33}px` */}
+//                 </>
+//             ) : (
+//                 <div className="placeholder">
+//                     <FontAwesomeIcon className="upload-icon" icon="cloud-upload-alt" size="lg" />
+//                 </div>
+//             );
+//         };
+//         const displayBox = (which: string, index: number, cover: number) => (
+//             <div
+//                 className={`${index === 0 ? 'before' : 'after'}Box-cont`}
+//                 key={which}
+//                 style={{ width: this._props.PanelWidth() }}
+//                 onPointerDown={e => {
+//                     this.registerSliding(e, cover);
+//                     this.activateContent();
+//                 }}
+//                 ref={ele => this.createDropTarget(ele, which, index)}>
+//                 {!this._isEmpty ? displayDoc(which) : null}
+//                 {/* {this.dataDoc[this.fieldKey + '_0'] !== 'empty' ? displayDoc(which) : null} */}
+//             </div>
+//         );
+
+//         if (this.Document._layout_isFlashcard) {
+//             const side = this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 1 : 0;
+
+//             // add text box to each side when comparison box is first created
+//             // (!this.dataDoc[this.fieldKey + '_0'] && this.dataDoc[this._props.fieldKey + '_0'] !== 'empty')
+//             if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
+//                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
+//                 const newDoc = Docs.Create.TextDocument(dataSplit[1]);
+//                 this.addDoc(newDoc, this.fieldKey + '_0');
+//             }
+
+//             if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
+//                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
+//                 const newDoc = Docs.Create.TextDocument(dataSplit[0]);
+//                 this.addDoc(newDoc, this.fieldKey + '_1');
+//             }
+
+//             if (DocCast(this.Document.embedContainer) && DocCast(this.Document.embedContainer).practiceMode === 'quiz') {
+//                 const text = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
+//                 return (
+//                     <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} style={{ display: 'flex', flexDirection: 'column' }}>
+//                         <p style={{ color: 'white', padding: 10 }}>{text}</p>
+//                         <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
+//                         <div className="input-box">
+//                             <textarea
+//                                 value={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._outputValue : this._inputValue}
+//                                 onChange={this.handleInputChange}
+//                                 onScroll={e => {
+//                                     e.stopPropagation();
+//                                     e.preventDefault();
+//                                 }}
+//                                 placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
+//                                 readOnly={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate'}></textarea>
+
+//                             {this._loading ? (
+//                                 <div className="loading-spinner" style={{ position: 'absolute' }}>
+//                                     <ReactLoading type="spin" height={30} width={30} color={'blue'} />
+//                                 </div>
+//                             ) : null}
+//                         </div>
+//                         <div>
+//                             <div className="submit-button" style={{ overflow: 'hidden', display: 'flex', width: '100%' }}>
+//                                 <div
+//                                     className="submit-buttonschema-header-button"
+//                                     onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, false)}
+//                                     style={{ position: 'absolute', top: '5px', left: '11px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
+//                                     <FontAwesomeIcon color={'white'} icon="caret-down" />
+//                                 </div>
+//                                 <button className="submit-buttonrecord" onClick={this._listening ? this.stopListening : this.startListening} style={{ background: this._listening ? 'lightgray' : '', borderRadius: '2px' }}>
+//                                     {<FontAwesomeIcon icon="microphone" size="lg" />}
+//                                 </button>
+//                                 <div
+//                                     className="submit-buttonschema-header-button"
+//                                     onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, true)}
+//                                     style={{ position: 'absolute', top: '5px', left: '50px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
+//                                     <FontAwesomeIcon color={'white'} icon="caret-down" />
+//                                 </div>
+//                                 <button
+//                                     className="submit-buttonpronunciation"
+//                                     onClick={this.evaluatePronunciation}
+//                                     style={{ display: 'inline-flex', alignItems: 'center', background: this._listening ? 'lightgray' : '', borderRadius: '2px', width: '100%' }}>
+//                                     Evaluate Pronunciation
+//                                 </button>
+
+//                                 {this.layoutDoc[`_${this._props.fieldKey}_usePath`] !== 'alternate' ? (
+//                                     <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
+//                                         Submit
+//                                     </button>
+//                                 ) : (
+//                                     <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderClick} style={{ display: 'inline-flex', alignItems: 'center', borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
+//                                         Redo the Question
+//                                     </button>
+//                                 )}
+//                             </div>
+//                         </div>
+//                     </div>
+//                 );
+//             }
+
+//             // render a normal flashcard when not a QuizCard
+//             return (
+//                 <div
+//                     className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
+//                     style={{ display: 'flex', flexDirection: 'column', overflow: 'hidden' }}
+//                     onMouseEnter={() => {
+//                         this.hoverFlip('alternate');
+//                     }}
+//                     onMouseLeave={() => {
+//                         this.hoverFlip(undefined);
+//                     }}>
+//                     {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
+//                     {this._loading ? (
+//                         <div className="loading-spinner" style={{ position: 'absolute' }}>
+//                             <ReactLoading type="spin" height={30} width={30} color={'blue'} />
+//                         </div>
+//                     ) : null}
+//                     {this._props.isContentActive() ? this.flashcardMenu : null}
+//                     {this.overlayAlternateIcon}
+//                 </div>
+//             );
+//         }
+//         // render a comparison box that compares items side by side
+//         return (
+//             <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}` /* change className to easily disable/enable pointer events in CSS */}>
+//                 {displayBox(`${this.fieldKey}_2`, 1, this._props.PanelWidth() - 3)}
+//                 <div className="clip-div" style={{ width: this.clipWidth + '%', transition: this._animating, background: StrCast(this.layoutDoc._backgroundColor, 'gray') }}>
+//                     {displayBox(`${this.fieldKey}_1`, 0, 0)}
+//                 </div>
+
+//                 <div
+//                     className="slide-bar"
+//                     style={{
+//                         left: `calc(${this.clipWidth + '%'} - 0.5px)`,
+//                         cursor: this.clipWidth < 5 ? 'e-resize' : this.clipWidth / 100 > (this._props.PanelWidth() - 5) / this._props.PanelWidth() ? 'w-resize' : undefined,
+//                     }}
+//                     onPointerDown={e => !this.childActive && this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
+//                 >
+//                     <div className="slide-handle" />
+//                 </div>
+//             </div>
+//         );
+//     }
+// }
+
+// Docs.Prototypes.TemplateMap.set(DocumentType.COMPARISON, {
+//     data: '',
+//     layout: { view: ComparisonBox, dataField: 'data' },
+//     options: {
+//         acl: '',
+//         backgroundColor: 'gray',
+//         dropAction: dropActionType.move,
+//         waitForDoubleClickToClick: 'always',
+//         _layout_reflowHorizontal: true,
+//         _layout_reflowVertical: true,
+//         _layout_nativeDimEditable: true,
+//         systemIcon: 'BsLayoutSplit',
+//     },
+// });
diff --git a/src/client/views/nodes/ComparisonBoxNew.tsx b/src/client/views/nodes/ComparisonBoxNew.tsx
new file mode 100644
index 000000000..0fcf2d3c7
--- /dev/null
+++ b/src/client/views/nodes/ComparisonBoxNew.tsx
@@ -0,0 +1,848 @@
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { MathJax, MathJaxContext } from 'better-react-mathjax';
+import { Tooltip } from '@mui/material';
+import { action, computed, makeObservable, observable, reaction } from 'mobx';
+import { observer } from 'mobx-react';
+import * as React from 'react';
+import { returnFalse, returnNone, returnTrue, setupMoveUpEvents } from '../../../ClientUtils';
+import { emptyFunction } from '../../../Utils';
+import { Doc, Opt } from '../../../fields/Doc';
+import { DocData } from '../../../fields/DocSymbols';
+import { RichTextField } from '../../../fields/RichTextField';
+import { DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
+import { GPTCallType, gptAPICall, gptImageLabel } from '../../apis/gpt/GPT';
+import '../pdf/GPTPopup/GPTPopup.scss';
+import { DocUtils } from '../../documents/DocUtils';
+import { DocumentType } from '../../documents/DocumentTypes';
+import { Docs } from '../../documents/Documents';
+import { DragManager } from '../../util/DragManager';
+import { dropActionType } from '../../util/DropActionTypes';
+import { undoable } from '../../util/UndoManager';
+import { ViewBoxAnnotatableComponent } from '../DocComponent';
+import { PinDocView, PinProps } from '../PinFuncs';
+import { StyleProp } from '../StyleProp';
+import './ComparisonBox.scss';
+import { DocumentView } from './DocumentView';
+import { FieldView, FieldViewProps } from './FieldView';
+import { FormattedTextBox } from './formattedText/FormattedTextBox';
+import ReactLoading from 'react-loading';
+import { ContextMenu } from '../ContextMenu';
+import { ContextMenuProps } from '../ContextMenuItem';
+import { tickStep } from 'd3';
+import { CollectionCarouselView } from '../collections/CollectionCarouselView';
+import { FollowLinkScript } from '../../documents/DocUtils';
+import { schema } from '../nodes/formattedText/schema_rts';
+import { Id } from '../../../fields/FieldSymbols';
+import axios from 'axios';
+import ReactMarkdown from 'react-markdown';
+import { WebField, nullAudio } from '../../../fields/URLField';
+
+const API_URL = 'https://api.unsplash.com/search/photos';
+
+@observer
+export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
+    public static LayoutString(fieldKey: string) {
+        return FieldView.LayoutString(ComparisonBox, fieldKey);
+    }
+    private _disposers: (DragManager.DragDropDisposer | undefined)[] = [undefined, undefined];
+    constructor(props: FieldViewProps) {
+        super(props);
+        makeObservable(this);
+        this.setListening();
+    }
+
+    @observable private _inputValue = '';
+    @observable private _outputValue = '';
+    @observable private _loading = false;
+    @observable private _isEmpty = false;
+    @observable private _audio: Doc = Docs.Create.TextDocument('');
+    @observable childActive = false;
+    @observable _yRelativeToTop: boolean = true;
+    @observable _animating = '';
+    @observable mathJaxConfig = {
+        loader: { load: ['input/asciimath'] },
+    };
+    @observable private _listening = false;
+    @observable transcriptElement = '';
+    @observable private frontSide = false;
+    SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+    @observable recognition = new this.SpeechRecognition();
+    _closeRef = React.createRef<HTMLDivElement>();
+
+    get revealOp() {
+        return this.layoutDoc[`_${this._props.fieldKey}_revealOp`];
+    }
+    get clipHeightKey() {
+        return '_' + this._props.fieldKey + '_clipHeight';
+    }
+
+    get clipWidthKey() {
+        return '_' + this._props.fieldKey + '_clipWidth';
+    }
+
+    @computed get clipWidth() {
+        return NumCast(this.layoutDoc[this.clipWidthKey], 50);
+    }
+
+    @computed get clipHeight() {
+        return NumCast(this.layoutDoc[this.clipHeightKey], 200);
+    }
+
+    @computed get overlayAlternateIcon() {
+        return (
+            <Tooltip title={<div className="dash-tooltip">flip</div>}>
+                <div
+                    className="formattedTextBox-alternateButton"
+                    onPointerDown={e =>
+                        setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => {
+                            if (!this.revealOp || this.revealOp === 'flip') {
+                                this.flipFlashcard();
+                            }
+                        })
+                    }
+                    style={{
+                        background: this.revealOp === 'hover' ? 'gray' : this.frontSide ? 'white' : 'black',
+                        color: this.revealOp === 'hover' ? 'black' : this.frontSide ? 'black' : 'white',
+                        display: 'inline-block',
+                    }}>
+                    <div key="alternate" className="formattedTextBox-flip">
+                        <FontAwesomeIcon icon="turn-up" size="1x" />
+                    </div>
+                </div>
+            </Tooltip>
+        );
+    }
+
+    @computed get flashcardMenu() {
+        return (
+            <div>
+                <Tooltip
+                    title={this.frontSide ? <div className="dash-tooltip">Flip to front side to use GPT</div> : <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>}>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={e => (!this.frontSide ? this.findImageTags() : null)}>
+                        <FontAwesomeIcon icon="lightbulb" size="xl" />
+                    </div>
+                </Tooltip>
+                {DocCast(this.Document.embedContainer).type_collection === 'carousel' ? null : (
+                    <div>
+                        <Tooltip title={<div>Create a flashcard pile</div>}>
+                            <div style={{ position: 'absolute', bottom: '3px', right: '74px', cursor: 'pointer' }} onPointerDown={e => this.createFlashcardPile([this.Document], false)}>
+                                <FontAwesomeIcon icon="folder-plus" size="xl" />
+                            </div>
+                        </Tooltip>
+                        <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
+                            <div style={{ position: 'absolute', bottom: '3px', right: '104px', cursor: 'pointer' }} onClick={e => this.gptFlashcardPile()}>
+                                <FontAwesomeIcon icon="layer-group" size="xl" />
+                            </div>
+                        </Tooltip>
+                    </div>
+                )}
+                <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }} onClick={e => this.handleHover()}>
+                        <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="hand-point-up" size="xl" />
+                    </div>
+                </Tooltip>
+            </div>
+        );
+    }
+
+    @action handleHover = () => {
+        if (this.revealOp === 'hover') {
+            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip';
+            this.Document.forceActive = false;
+        } else {
+            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover';
+            this.Document.forceActive = true;
+        }
+    };
+
+    @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
+        this._inputValue = e.target.value;
+        console.log(this._inputValue);
+    };
+
+    @action activateContent = () => {
+        this.childActive = true;
+    };
+
+    @action handleRenderClick = () => {
+        this.frontSide = !this.frontSide;
+    };
+
+    @action handleRenderGPTClick = async () => {
+        console.log('Phonetic transcription: ' + DocCast(this.Document.audio).phoneticTranscription);
+        const phonTrans = DocCast(this.Document.audio).phoneticTranscription;
+        if (phonTrans) {
+            this._inputValue = StrCast(phonTrans);
+            console.log('INPUT:' + this._inputValue);
+            this.askGPTPhonemes(this._inputValue);
+        } else if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
+        this.frontSide = false;
+        this._outputValue = '';
+    };
+
+    @action
+    private onPointerMove = ({ movementX }: PointerEvent) => {
+        const width = movementX * this.ScreenToLocalBoxXf().Scale + (this.clipWidth / 100) * this._props.PanelWidth();
+        if (width && width > 5 && width < this._props.PanelWidth()) {
+            this.layoutDoc[this.clipWidthKey] = (width * 100) / this._props.PanelWidth();
+        }
+        return false;
+    };
+
+    componentDidMount() {
+        this._props.setContentViewBox?.(this);
+        reaction(
+            () => this._props.isSelected(), // when this reaction should update
+            selected => !selected && (this.childActive = false) // what it should update to
+        );
+    }
+
+    protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
+        this._disposers[disposerId]?.();
+        if (ele) {
+            this._disposers[disposerId] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
+        }
+    };
+
+    private internalDrop = undoable((e: Event, dropEvent: DragManager.DropEvent, fieldKey: string) => {
+        if (dropEvent.complete.docDragData) {
+            const { droppedDocuments } = dropEvent.complete.docDragData;
+            const added = dropEvent.complete.docDragData.moveDocument?.(droppedDocuments, this.Document, (doc: Doc | Doc[]) => this.addDoc(toList(doc).lastElement(), fieldKey));
+            Doc.SetContainer(droppedDocuments.lastElement(), this.dataDoc);
+            !added && e.preventDefault();
+            e.stopPropagation(); // prevent parent Doc from registering new position so that it snaps back into place
+            // this.childActive = false;
+            return added;
+        }
+        return undefined;
+    }, 'internal drop');
+
+    getAnchor = (addAsAnnotation: boolean, pinProps?: PinProps) => {
+        const anchor = Docs.Create.ConfigDocument({
+            title: 'CompareAnchor:' + this.Document.title,
+            // set presentation timing properties for restoring view
+            presentation_transition: 1000,
+            annotationOn: this.Document,
+        });
+        if (anchor) {
+            if (!addAsAnnotation) anchor.backgroundColor = 'transparent';
+            /* addAsAnnotation && */ this.addDocument(anchor);
+            PinDocView(anchor, { pinDocLayout: pinProps?.pinDocLayout, pinData: { ...(pinProps?.pinData ?? {}), clippable: true } }, this.Document);
+            return anchor;
+        }
+        return this.Document;
+    };
+
+    clearDoc = undoable((fieldKey: string) => {
+        this.dataDoc[fieldKey] = undefined;
+        this._isEmpty = true;
+    }, 'clear doc');
+
+    moveDoc = (doc: Doc, addDocument: (document: Doc | Doc[]) => boolean, which: string) => this.remDoc(doc, which) && addDocument(doc);
+    addDoc = (doc: Doc, which: string) => {
+        if (this.dataDoc[which] && !this._isEmpty) return false;
+        this.dataDoc[which] = doc;
+        return true;
+    };
+    remDoc = (doc: Doc, which: string) => {
+        if (this.dataDoc[which] === doc) {
+            this._isEmpty = true;
+            // this.dataDoc[which] = 'empty';
+            console.log('HEREEEE');
+            this.dataDoc[which] = undefined;
+            return true;
+        }
+        console.log('FALSE');
+        return false;
+    };
+
+    closeDown = (e: React.PointerEvent, which: string) => {
+        setupMoveUpEvents(
+            this,
+            e,
+            moveEv => {
+                const de = new DragManager.DocumentDragData([DocCast(this.dataDoc[which])], dropActionType.move);
+                de.moveDocument = (doc: Doc | Doc[], targetCollection: Doc | undefined, addDocument: (doc: Doc | Doc[]) => boolean): boolean => addDocument(doc);
+                de.canEmbed = true;
+                DragManager.StartDocumentDrag([this._closeRef.current!], de, moveEv.clientX, moveEv.clientY);
+                return true;
+            },
+            emptyFunction,
+            () => this.clearDoc(which)
+        );
+    };
+    docStyleProvider = (doc: Opt<Doc>, props: Opt<FieldViewProps>, property: string): any => {
+        if (property === StyleProp.PointerEvents) return 'none';
+        return this._props.styleProvider?.(doc, props, property);
+    };
+    moveDoc1 = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: any) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.fieldKey + '_1'), true);
+    moveDoc2 = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: any) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.fieldKey + '_2'), true);
+    remDoc1 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_1'), true);
+    remDoc2 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_2'), true);
+
+    private registerSliding = (e: React.PointerEvent<HTMLDivElement>, targetWidth: number) => {
+        if (e.button !== 2) {
+            setupMoveUpEvents(
+                this,
+                e,
+                this.onPointerMove,
+                emptyFunction,
+                action((moveEv, doubleTap) => {
+                    if (doubleTap) {
+                        this.childActive = true;
+                        if (!this.dataDoc[this.fieldKey + '_1'] && !this.dataDoc[this.fieldKey]) this.dataDoc[this.fieldKey + '_1'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
+                        if (!this.dataDoc[this.fieldKey + '_2'] && !this.dataDoc[this.fieldKey + '_alternate']) this.dataDoc[this.fieldKey + '_2'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
+                    }
+                }),
+                false,
+                undefined,
+                action(() => {
+                    if (this.childActive) return;
+                    this._animating = 'all 200ms';
+                    // on click, animate slider movement to the targetWidth
+                    this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
+                    // this.layoutDoc[this.clipHeightKey] = (targetWidth * 100) / this._props.PanelHeight();
+
+                    setTimeout(
+                        action(() => {
+                            this._animating = '';
+                        }),
+                        200
+                    );
+                })
+            );
+        }
+    };
+
+    setListening = () => {
+        const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+        if (SpeechRecognition) {
+            this.recognition.continuous = true;
+            this.recognition.interimResults = true;
+            this.recognition.lang = 'en-US';
+            this.recognition.onresult = this.handleResult.bind(this);
+        }
+        ContextMenu.Instance.setLangIndex(0);
+    };
+
+    startListening = () => {
+        this.recognition.start();
+        this._listening = true;
+    };
+
+    stopListening = () => {
+        this.recognition.stop();
+        this._listening = false;
+    };
+
+    setLanguage = (e: React.MouseEvent, language: string, ind: number) => {
+        this.recognition.lang = language;
+        ContextMenu.Instance.setLangIndex(ind);
+    };
+
+    convertAbr = () => {
+        switch (this.recognition.lang) {
+            case 'en-US': return 'English'; //prettier-ignore
+            case 'es-ES': return 'Spanish'; //prettier-ignore
+            case 'fr-FR': return 'French'; //prettier-ignore
+            case 'it-IT': return 'Italian'; //prettier-ignore
+            case 'zh-CH': return 'Mandarin Chinese'; //prettier-ignore
+            case 'ja': return 'Japanese'; //prettier-ignore
+            default: return 'Korean'; //prettier-ignore
+        }
+    };
+
+    openContextMenu = (x: number, y: number, evalu: boolean) => {
+        ContextMenu.Instance.clearItems();
+        ContextMenu.Instance.addItem({ description: 'English', event: e => this.setLanguage(e, 'en-US', 0) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Spanish', event: e => this.setLanguage(e, 'es-ES', 1 )}); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'French', event: e => this.setLanguage(e, 'fr-FR', 2) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Italian', event: e => this.setLanguage(e, 'it-IT', 3) }); //prettier-ignore
+        if (!evalu) ContextMenu.Instance.addItem({ description: 'Mandarin Chinese', event: e => this.setLanguage(e, 'zh-CH', 4) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Japanese', event: e => this.setLanguage(e, 'ja', 5) }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Korean', event: e => this.setLanguage(e, 'ko', 6) }); //prettier-ignore
+        ContextMenu.Instance.displayMenu(x, y);
+    };
+
+    evaluatePronunciation = () => {
+        const newAudio = Docs.Create.AudioDocument(nullAudio, { _width: 200, _height: 100 });
+        this.Document.audio = newAudio[DocData];
+        this._props.DocumentView?.()._props.addDocument?.(newAudio);
+    };
+
+    pushInfo = async () => {
+        const audio = {
+            file: this._audio.url,
+        };
+        const response = await axios.post('http://localhost:105/recognize/', audio, {
+            headers: {
+                'Content-Type': 'application/json',
+            },
+        });
+        this.Document.phoneticTranscription = response.data['transcription'];
+        console.log('RESPONSE: ' + response.data['transcription']);
+    };
+
+    createFlashcardPile(collectionArr: Doc[], gpt: boolean) {
+        const newCol = Docs.Create.CarouselDocument(collectionArr, {
+            _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250) + 50,
+            _height: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 200) + 50,
+            _layout_fitWidth: false,
+            _layout_autoHeight: true,
+        });
+        newCol['x'] = this.layoutDoc['x'];
+        newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
+        newCol.type_collection = 'carousel';
+
+        if (gpt) {
+            this._props.DocumentView?.()._props.addDocument?.(newCol);
+            this._props.removeDocument?.(this.Document);
+        } else {
+            this._props.addDocument?.(newCol);
+            this._props.removeDocument?.(this.Document);
+            this.Document.embedContainer = newCol;
+        }
+    }
+
+    gptFlashcardPile = async () => {
+        var text = await this.askGPT(GPTCallType.STACK);
+        var senArr = text?.split('Question: ');
+        var collectionArr: Doc[] = [];
+        for (let i = 1; i < senArr?.length!; i++) {
+            const newDoc = Docs.Create.ComparisonDocument(senArr![i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
+
+            if (StrCast(senArr![i]).includes('Keyword: ')) {
+                const question = StrCast(senArr![i]).split('Keyword: ');
+                const img = await this.fetchImages(question[1]);
+                const textSide1 = question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0];
+                const textDoc1 = Docs.Create.TextDocument(question[0]);
+                const rtfiel = new RichTextField(
+                    JSON.stringify({
+                        doc: {
+                            type: 'doc',
+                            content: [
+                                {
+                                    type: 'paragraph',
+                                    attrs: { align: null, color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
+                                    content: [
+                                        { type: 'text', text: question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0] },
+                                        { type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: img![Id] } },
+                                    ],
+                                },
+                            ],
+                        },
+                        selection: { type: 'text', anchor: 2, head: 2 },
+                    }),
+                    textSide1
+                );
+
+                textDoc1[DocData].text = rtfiel;
+                DocCast(newDoc)[DocData][this.fieldKey + '_1'] = textDoc1;
+                DocCast(newDoc)[DocData][this.fieldKey + '_0'] = Docs.Create.TextDocument(question[0].includes('Answer: ') ? question[0].split('Answer: ')[1] : question[1]);
+            }
+            collectionArr.push(newDoc);
+        }
+        this.createFlashcardPile(collectionArr, true);
+    };
+
+    askGPT = async (callType: GPTCallType): Promise<string | undefined> => {
+        const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
+        const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
+        const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
+        this._loading = true;
+        const doc = DocCast(this.dataDoc[this.props.fieldKey + '_0']);
+        if (callType == GPTCallType.CHATCARD) {
+            if (StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '') {
+                this._loading = false;
+                return;
+            }
+            this.flipFlashcard();
+        }
+        try {
+            console.log(queryText);
+            const res = await gptAPICall(callType == GPTCallType.QUIZ ? queryText : questionText, callType);
+            if (!res) {
+                console.error('GPT call failed');
+                return;
+            }
+            if (callType == GPTCallType.CHATCARD) {
+                DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
+            } else if (callType == GPTCallType.QUIZ) {
+                console.log(this._inputValue);
+                this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
+            } else if (callType === GPTCallType.FLASHCARD) {
+                this._loading = false;
+                return res;
+            } else if (callType === GPTCallType.STACK) {
+            }
+            this._loading = false;
+            return res;
+        } catch (err) {
+            console.error('GPT call failed');
+        }
+        this._loading = false;
+    };
+    layoutWidth = () => NumCast(this.layoutDoc.width, 200);
+    layoutHeight = () => NumCast(this.layoutDoc.height, 200);
+
+    findImageTags = async () => {
+        const c = this.DocumentView?.().ContentDiv!.getElementsByTagName('img');
+        if (c?.length === 0) await this.askGPT(GPTCallType.CHATCARD);
+        if (c) {
+            this._loading = true;
+            for (let i of c) {
+                console.log(i);
+                if (i.className !== 'ProseMirror-separator') await this.getImageDesc(i.src);
+            }
+            this._loading = false;
+        }
+    };
+
+    askGPTPhonemes = async (phonemes: string) => {
+        const sentence = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
+        const phon = 'w ʌ ɪ z j ɔː ɹ n e ɪ m ';
+        const phon2 = 'h ʌ ɛ r j ʌ t ʌ d eɪ';
+        const phon6 = 'huː ɑɹ juː tədeɪ';
+        const phon3 = 'ʃ eɪ oʊ s i ʃ oʊ z b aɪ ð ə s iː ʃ oʊ';
+        const phon4 = 'kamo estas hɔi';
+        const phon5 = 'la s e n a l';
+        const promptEng =
+            'Consider all possible phonetic transcriptions of the intended sentence "' +
+            sentence +
+            '" that is standard in American speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
+            phon6 +
+            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart. The goal is to be understood, not sound like a native speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "ceeffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
+        const promptSpa =
+            'Consider all possible phonetic transcriptions of the intended sentence "' +
+            'como estás hoy' +
+            '" that is standard in Spanish speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
+            phon4 +
+            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in Spanish speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound.  Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart; say good job if it would be understood by a native Spanish speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Identify "ɔi" sounds like "oy". Ignore accents and do not say anything to the user about this.';
+        const promptAll =
+            'Consider all possible phonetic transcriptions of the intended sentence "' +
+            sentence +
+            '" that is standard in ' +
+            this.convertAbr() +
+            ' speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
+            phonemes +
+            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in ' +
+            this.convertAbr() +
+            ' speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "cawffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
+
+        switch (this.recognition.lang) {
+            case 'en-US':
+                this._outputValue = await gptAPICall(promptEng, GPTCallType.PRONUNCIATION);
+                break;
+            case 'es-ES':
+                this._outputValue = await gptAPICall(promptSpa, GPTCallType.PRONUNCIATION);
+                break;
+            default:
+                this._outputValue = await gptAPICall(promptAll, GPTCallType.PRONUNCIATION);
+                break;
+        }
+    };
+
+    handleResult = (e: SpeechRecognitionEvent) => {
+        let interimTranscript = '';
+        let finalTranscript = '';
+        for (let i = e.resultIndex; i < e.results.length; i++) {
+            const transcript = e.results[i][0].transcript;
+            if (e.results[i].isFinal) {
+                finalTranscript += transcript;
+            } else {
+                interimTranscript += transcript;
+            }
+        }
+        this._inputValue += finalTranscript;
+    };
+
+    fetchImages = async (selection: string) => {
+        try {
+            const { data } = await axios.get(`${API_URL}?query=${selection}&page=1&per_page=${1}&client_id=Q4zruu6k6lum2kExiGhLNBJIgXDxD6NNj0SRHH_XXU0`);
+            console.log(data.results);
+            const imageSnapshot = Docs.Create.ImageDocument(data.results[0].urls.small, {
+                _nativeWidth: Doc.NativeWidth(this.layoutDoc),
+                _nativeHeight: Doc.NativeHeight(this.layoutDoc),
+                x: NumCast(this.layoutDoc.x),
+                y: NumCast(this.layoutDoc.y),
+                onClick: FollowLinkScript(),
+                _width: 150,
+                _height: 150,
+                title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
+            });
+            imageSnapshot['x'] = this.layoutDoc['x'];
+            imageSnapshot['y'] = this.layoutDoc['y'];
+            return imageSnapshot;
+        } catch (error) {
+            console.log(error);
+        }
+    };
+
+    static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
+        try {
+            const response = await fetch(imageUrl);
+            const blob = await response.blob();
+
+            return new Promise((resolve, reject) => {
+                const reader = new FileReader();
+                reader.readAsDataURL(blob);
+                reader.onloadend = () => resolve(reader.result as string);
+                reader.onerror = error => reject(error);
+            });
+        } catch (error) {
+            console.error('Error:', error);
+            throw error;
+        }
+    };
+
+    getImageDesc = async (u: string) => {
+        try {
+            const hrefBase64 = await ComparisonBox.imageUrlToBase64(u);
+            const response = await gptImageLabel(hrefBase64, 'Answer the following question as a short flashcard response. Do not include a label.' + (this.dataDoc.text as RichTextField)?.Text);
+
+            DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = response;
+        } catch (error) {
+            console.log('Error');
+        }
+    };
+
+    flipFlashcard = () => {
+        this.frontSide = !this.frontSide;
+    };
+
+    hoverFlip = (side: boolean) => {
+        if (this.revealOp === 'hover') this.layoutDoc[`_${this._props.fieldKey}_usePath`] = side;
+    };
+
+    testForTextFields = (whichSlot: string) => {
+        const slotData = Doc.Get(this.dataDoc, whichSlot, true);
+        const slotHasText = slotData instanceof RichTextField || typeof slotData === 'string';
+        const subjectText = RTFCast(this.Document[this.fieldKey])?.Text.trim();
+        const altText = RTFCast(this.Document[this.fieldKey + '_alternate'])?.Text.trim();
+        const layoutTemplateString =
+            slotHasText ? FormattedTextBox.LayoutString(whichSlot):
+            whichSlot.endsWith('1') ? (subjectText !== undefined ? FormattedTextBox.LayoutString(this.fieldKey) : undefined) :
+                                       altText !== undefined     ? FormattedTextBox.LayoutString(this.fieldKey + '_alternate'): undefined; // prettier-ignore
+
+        // A bit hacky to try out the concept of using GPT to fill in flashcards
+        //   If the second slot doesn't have anything in it, but the fieldKey slot has text (e.g., this.text is a string)
+        // and the fieldKey + "_alternate" has text that includes a GPT query (indicated by (( && )) ) that is parameterized (optionally) by the fieldKey text (this) or other metadata (this.<field>).
+        // eg., this.text_alternate is
+        //     "((Provide a one sentence definition for (this) that doesn't use any word in (this.excludeWords) ))"
+        //     where (this) is replaced by the text in the fieldKey slot abd this.excludeWords is repalced by the conetnts of the excludeWords field
+        // The GPT call will put the "answer"  in the second slot of the comparison (eg., text_2)
+        if (whichSlot.endsWith('2') && !layoutTemplateString?.includes(whichSlot)) {
+            const queryText = altText?.replace('(this)', subjectText); // TODO: this should be done in Doc.setField but it doesn't know about the fieldKey ...
+            if (queryText?.match(/\(\(.*\)\)/)) {
+                Doc.SetField(this.Document, whichSlot, ':=' + queryText, false); // make the second slot be a computed field on the data doc that calls ChatGpt
+            }
+        }
+        return layoutTemplateString;
+    };
+
+    render() {
+        const clearButton = (which: string) => (
+            <Tooltip title={<div className="dash-tooltip">remove</div>}>
+                <div
+                    // style={{ position: 'relative', top: '0px', left: '10px' }}
+                    ref={this._closeRef}
+                    className={`clear-button ${which}`}
+                    onPointerDown={e => this.closeDown(e, which)} // prevent triggering slider movement in registerSliding
+                >
+                    <FontAwesomeIcon className={`clear-button ${which}`} icon="times" size="xs" />
+                </div>
+            </Tooltip>
+        );
+        const displayDoc = (whichSlot: string) => {
+            const whichDoc = DocCast(this.dataDoc[whichSlot]);
+            const targetDoc = DocCast(whichDoc?.annotationOn, whichDoc);
+            const layoutString = targetDoc ? '' : this.testForTextFields(whichSlot);
+            // whichDoc['backgroundColor'] = this.layoutDoc['backgroundColor'];
+
+            return targetDoc || layoutString ? (
+                // <MathJaxContext config={this.mathJaxConfig}>
+                //     <MathJax>
+                <>
+                    <DocumentView
+                        // eslint-disable-next-line react/jsx-props-no-spreading
+                        {...this._props}
+                        ignoreUsePath={layoutString ? true : undefined}
+                        renderDepth={this.props.renderDepth + 1}
+                        LayoutTemplateString={layoutString}
+                        Document={layoutString ? this.Document : targetDoc}
+                        containerViewPath={this.DocumentView?.().docViewPath}
+                        moveDocument={whichSlot.endsWith('1') ? this.moveDoc1 : this.moveDoc2}
+                        removeDocument={whichSlot.endsWith('1') ? this.remDoc1 : this.remDoc2}
+                        NativeWidth={this.layoutWidth}
+                        NativeHeight={this.layoutHeight}
+                        isContentActive={() => this.childActive}
+                        isDocumentActive={returnFalse}
+                        dontSelect={returnTrue}
+                        whenChildContentsActiveChanged={this.whenChildContentsActiveChanged}
+                        styleProvider={this.childActive ? this._props.styleProvider : this.docStyleProvider}
+                        hideLinkButton
+                        pointerEvents={this.childActive ? undefined : returnNone}
+                    />
+                    {/* </MathJax> */}
+                    {/* <div style={{ position: 'absolute', top: '-5px', left: '2px' }}>{layoutString ? null : clearButton(whichSlot)}</div> */}
+                    {/* </MathJaxContext> // placeholder image if doc is missingleft: `${NumCast(this.layoutDoc.width, 200) - 33}px` */}
+                </>
+            ) : (
+                <div className="placeholder">
+                    <FontAwesomeIcon className="upload-icon" icon="cloud-upload-alt" size="lg" />
+                </div>
+            );
+        };
+        const displayBox = (which: string, index: number, cover: number) => (
+            <div
+                className={`${index === 0 ? 'before' : 'after'}Box-cont`}
+                key={which}
+                style={{ width: this._props.PanelWidth() }}
+                onPointerDown={e => {
+                    this.registerSliding(e, cover);
+                    this.activateContent();
+                }}
+                ref={ele => this.createDropTarget(ele, which, index)}>
+                {!this._isEmpty ? displayDoc(which) : null}
+                {/* {this.dataDoc[this.fieldKey + '_0'] !== 'empty' ? displayDoc(which) : null} */}
+            </div>
+        );
+
+        if (this.Document._layout_isFlashcard) {
+            const side = this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 1 : 0;
+
+            // add text box to each side when comparison box is first created
+            // (!this.dataDoc[this.fieldKey + '_0'] && this.dataDoc[this._props.fieldKey + '_0'] !== 'empty')
+            if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
+                const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
+                const newDoc = Docs.Create.TextDocument(dataSplit[1]);
+                this.addDoc(newDoc, this.fieldKey + '_0');
+            }
+
+            if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
+                const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
+                const newDoc = Docs.Create.TextDocument(dataSplit[0]);
+                this.addDoc(newDoc, this.fieldKey + '_1');
+            }
+
+            if (DocCast(this.Document.embedContainer) && DocCast(this.Document.embedContainer).practiceMode === 'quiz') {
+                const text = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
+                return (
+                    <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} style={{ display: 'flex', flexDirection: 'column' }}>
+                        <p style={{ color: 'white', padding: 10 }}>{text}</p>
+                        <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
+                        <div className="input-box">
+                            <textarea
+                                value={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._outputValue : this._inputValue}
+                                onChange={this.handleInputChange}
+                                onScroll={e => {
+                                    e.stopPropagation();
+                                    e.preventDefault();
+                                }}
+                                placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
+                                readOnly={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate'}></textarea>
+
+                            {this._loading ? (
+                                <div className="loading-spinner" style={{ position: 'absolute' }}>
+                                    <ReactLoading type="spin" height={30} width={30} color={'blue'} />
+                                </div>
+                            ) : null}
+                        </div>
+                        <div>
+                            <div className="submit-button" style={{ overflow: 'hidden', display: 'flex', width: '100%' }}>
+                                <div
+                                    className="submit-buttonschema-header-button"
+                                    onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, false)}
+                                    style={{ position: 'absolute', top: '5px', left: '11px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
+                                    <FontAwesomeIcon color={'white'} icon="caret-down" />
+                                </div>
+                                <button className="submit-buttonrecord" onClick={this._listening ? this.stopListening : this.startListening} style={{ background: this._listening ? 'lightgray' : '', borderRadius: '2px' }}>
+                                    {<FontAwesomeIcon icon="microphone" size="lg" />}
+                                </button>
+                                <div
+                                    className="submit-buttonschema-header-button"
+                                    onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, true)}
+                                    style={{ position: 'absolute', top: '5px', left: '50px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
+                                    <FontAwesomeIcon color={'white'} icon="caret-down" />
+                                </div>
+                                <button
+                                    className="submit-buttonpronunciation"
+                                    onClick={this.evaluatePronunciation}
+                                    style={{ display: 'inline-flex', alignItems: 'center', background: this._listening ? 'lightgray' : '', borderRadius: '2px', width: '100%' }}>
+                                    Evaluate Pronunciation
+                                </button>
+
+                                {this.layoutDoc[`_${this._props.fieldKey}_usePath`] !== 'alternate' ? (
+                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
+                                        Submit
+                                    </button>
+                                ) : (
+                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderClick} style={{ display: 'inline-flex', alignItems: 'center', borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
+                                        Redo the Question
+                                    </button>
+                                )}
+                            </div>
+                        </div>
+                    </div>
+                );
+            }
+
+            // render a normal flashcard when not a QuizCard
+            return (
+                <div
+                    className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
+                    style={{ display: 'flex', flexDirection: 'column', overflow: 'hidden' }}
+                    onMouseEnter={() => {
+                        this.hoverFlip(false);
+                    }}
+                    onMouseLeave={() => {
+                        this.hoverFlip(true);
+                    }}>
+                    {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
+                    {this._loading ? (
+                        <div className="loading-spinner" style={{ position: 'absolute' }}>
+                            <ReactLoading type="spin" height={30} width={30} color={'blue'} />
+                        </div>
+                    ) : null}
+                    {this._props.isContentActive() ? this.flashcardMenu : null}
+                    {this.overlayAlternateIcon}
+                </div>
+            );
+        }
+        // render a comparison box that compares items side by side
+        return (
+            <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}` /* change className to easily disable/enable pointer events in CSS */}>
+                {displayBox(`${this.fieldKey}_2`, 1, this._props.PanelWidth() - 3)}
+                <div className="clip-div" style={{ width: this.clipWidth + '%', transition: this._animating, background: StrCast(this.layoutDoc._backgroundColor, 'gray') }}>
+                    {displayBox(`${this.fieldKey}_1`, 0, 0)}
+                </div>
+
+                <div
+                    className="slide-bar"
+                    style={{
+                        left: `calc(${this.clipWidth + '%'} - 0.5px)`,
+                        cursor: this.clipWidth < 5 ? 'e-resize' : this.clipWidth / 100 > (this._props.PanelWidth() - 5) / this._props.PanelWidth() ? 'w-resize' : undefined,
+                    }}
+                    onPointerDown={e => !this.childActive && this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
+                >
+                    <div className="slide-handle" />
+                </div>
+            </div>
+        );
+    }
+}
+
+Docs.Prototypes.TemplateMap.set(DocumentType.COMPARISON, {
+    data: '',
+    layout: { view: ComparisonBox, dataField: 'data' },
+    options: {
+        acl: '',
+        backgroundColor: 'gray',
+        dropAction: dropActionType.move,
+        waitForDoubleClickToClick: 'always',
+        _layout_reflowHorizontal: true,
+        _layout_reflowVertical: true,
+        _layout_nativeDimEditable: true,
+        systemIcon: 'BsLayoutSplit',
+    },
+});
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index 86da64e5e..1b1431373 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -385,7 +385,11 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         console.log('RESPONSE:');
         console.log(response.data['boxes']);
         console.log(response.data['text']);
-        this.createBoxes(response.data['boxes'], response.data['text']);
+        if (response.data['boxes'].length != 0) {
+            this.createBoxes(response.data['boxes'], response.data['text']);
+        } else {
+            this._loading = false;
+        }
     };
 
     createBoxes = (boxes: [[[number, number]]], texts: [string]) => {
@@ -397,12 +401,13 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
             const height = coords[2][1] - coords[0][1];
             const text = texts[i];
 
-            const newCol = Docs.Create.TextDocument('', {
+            const newCol = Docs.Create.LabelDocument({
                 _width: width,
                 //width * NumCast(this.dataDoc[this.fieldKey + '_nativeWidth']),
                 _height: height,
                 //height * NumCast(this.dataDoc[this.fieldKey + '_nativeHeight']),
                 _layout_fitWidth: true,
+                title: '',
                 // _layout_autoHeight: true,
             });
             const scaling = 1 / (this._props.NativeDimScaling?.() || 1);
@@ -414,6 +419,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
             newCol.forceActive = true;
             newCol.quiz = text;
             newCol.showQuiz = false;
+            newCol[DocData].textTransform = 'none';
             this._quizBoxes.push(newCol);
             this.addDocument(newCol);
             this._loading = false;
@@ -434,7 +440,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     };
 
     makeLabels = async () => {
-        this._loading = true;
         try {
             const hrefBase64 = await this.createCanvas();
             this.pushInfo(quizMode.NORMAL, hrefBase64);
@@ -443,43 +448,51 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         }
     };
 
-    levenshteinDistance = (a: string, b: string) => {
-        const an = a.length;
-        const bn = b.length;
-        const matrix = [];
+    levenshteinDistance = (str1: string, str2: string) => {
+        const len1 = str1.length;
+        const len2 = str2.length;
+        const dp = Array.from(Array(len1 + 1), () => Array(len2 + 1).fill(0));
+
+        if (len1 === 0) return len2;
+        if (len2 === 0) return len1;
+
+        for (let i = 0; i <= len1; i++) dp[i][0] = i;
+        for (let j = 0; j <= len2; j++) dp[0][j] = j;
+
+        for (let i = 1; i <= len1; i++) {
+            for (let j = 1; j <= len2; j++) {
+                const cost = str1[i - 1] === str2[j - 1] ? 0 : 1;
+                dp[i][j] = Math.min(
+                    dp[i - 1][j] + 1, // deletion
+                    dp[i][j - 1] + 1, // insertion
+                    dp[i - 1][j - 1] + cost // substitution
+                );
+            }
+        }
 
-        // Ensure non-zero length strings
-        if (an === 0) return bn;
-        if (bn === 0) return an;
+        return dp[len1][len2];
+    };
 
-        // Initialize the matrix
-        for (let i = 0; i <= an; i++) {
-            matrix[i] = [i];
-        }
-        for (let j = 0; j <= bn; j++) {
-            matrix[0][j] = j;
-        }
+    jaccardSimilarity = (str1: string, str2: string) => {
+        const set1 = new Set(str1.split(' '));
+        const set2 = new Set(str2.split(' '));
 
-        // Populate the matrix
-        for (let i = 1; i <= an; i++) {
-            for (let j = 1; j <= bn; j++) {
-                if (a[i - 1] === b[j - 1]) {
-                    matrix[i][j] = matrix[i - 1][j - 1];
-                } else {
-                    matrix[i][j] = Math.min(
-                        matrix[i - 1][j - 1] + 1, // substitution
-                        Math.min(
-                            matrix[i][j - 1] + 1, // insertion
-                            matrix[i - 1][j] + 1 // deletion
-                        )
-                    );
-                }
-            }
-        }
+        const intersection = new Set([...set1].filter(x => set2.has(x)));
+        const union = new Set([...set1, ...set2]);
 
-        return matrix[an][bn];
+        return intersection.size / union.size;
     };
 
+    stringSimilarity(str1: string, str2: string) {
+        const levenshteinDist = this.levenshteinDistance(str1, str2);
+        const levenshteinScore = 1 - levenshteinDist / Math.max(str1.length, str2.length);
+
+        const jaccardScore = this.jaccardSimilarity(str1, str2);
+
+        // Combine the scores with a higher weight on Jaccard similarity
+        return 0.5 * levenshteinScore + 0.5 * jaccardScore;
+    }
+
     @computed get checkIcon() {
         return (
             <Tooltip title={<div className="dash-tooltip">Check</div>}>
@@ -501,9 +514,9 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     }
 
     compareWords = (input: string, target: string) => {
-        const distance = this.levenshteinDistance(input.toLowerCase(), target.toLowerCase());
-        const threshold = Math.max(input.length, target.length) * 0.2; // Allow up to 20% of the length as difference
-        return distance <= threshold;
+        const distance = this.stringSimilarity(input.toLowerCase(), target.toLowerCase());
+        // const threshold = Math.max(input.length, target.length) * 0.2; // Allow up to 20% of the length as difference
+        return distance >= 0.7;
     };
 
     extractHexAndSentences = (inputString: string) => {
@@ -523,7 +536,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     check = () => {
         this._loading = true;
         this._quizBoxes.forEach(async doc => {
-            const input = StrCast(RTFCast(DocCast(doc).text)?.Text);
+            const input = StrCast(doc[DocData].title);
             console.log('INP: ' + StrCast(input) + '; DOC: ' + StrCast(doc.quiz));
             if (this._quizMode == quizMode.SMART && input) {
                 const questionText = 'Question: What was labeled in this image?';
@@ -553,7 +566,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
 
     redo = () => {
         this._quizBoxes.forEach(doc => {
-            DocCast(doc)[DocData].text = '';
+            doc[DocData].title = '';
             doc.backgroundColor = '#e4e4e4';
             doc.showQuiz = false;
         });
@@ -564,8 +577,10 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         this._quizBoxes.forEach(doc => {
             // this._props.removeDocument?.(DocCast(doc));
             // this._props.DocumentView?.()._props.removeDocument?.(doc);
+            this.removeDocument?.(doc);
         });
         this._quizBoxes = [];
+        console.log('remove');
     };
 
     @action
diff --git a/src/client/views/nodes/LabelBigText.js b/src/client/views/nodes/LabelBigText.js
new file mode 100644
index 000000000..290152cd0
--- /dev/null
+++ b/src/client/views/nodes/LabelBigText.js
@@ -0,0 +1,270 @@
+/*
+Brorlandi/big-text.js v1.0.0, 2017
+Adapted from DanielHoffmann/jquery-bigtext, v1.3.0, May 2014
+And from Jetroid/bigtext.js v1.0.0, September 2016
+
+Usage:
+BigText("#myElement",{
+    rotateText: {Number}, (null)
+    fontSizeFactor: {Number}, (0.8)
+    maximumFontSize: {Number}, (null)
+    limitingDimension: {String}, ("both")
+    horizontalAlign: {String}, ("center")
+    verticalAlign: {String}, ("center")
+    textAlign: {String}, ("center")
+    whiteSpace: {String}, ("nowrap")
+});
+
+
+Original Projects: 
+https://github.com/DanielHoffmann/jquery-bigtext
+https://github.com/Jetroid/bigtext.js
+
+Options:
+
+rotateText: Rotates the text inside the element by X degrees.
+
+fontSizeFactor: This option is used to give some vertical spacing for letters that overflow the line-height (like 'g', 'Á' and most other accentuated uppercase letters). This does not affect the font-size if the limiting factor is the width of the parent div. The default is 0.8
+
+maximumFontSize: maximum font size to use.
+
+minimumFontSize: minimum font size to use.  if font is calculated smaller than this, text will be rendered at this size and wrapped
+
+limitingDimension: In which dimension the font size should be limited. Possible values: "width", "height" or "both". Defaults to both. Using this option with values different than "both" overwrites the element parent width or height.
+
+horizontalAlign: Where to align the text horizontally. Possible values: "left", "center", "right". Defaults to "center".
+
+verticalAlign: Where to align the text vertically. Possible values: "top", "center", "bottom". Defaults to "center".
+
+textAlign: Sets the text align of the element. Possible values: "left", "center", "right". Defaults to "center". This option is only useful if there are linebreaks (<br> tags) inside the text.
+
+whiteSpace: Sets whitespace handling. Possible values: "nowrap", "pre". Defaults to "nowrap". (Can also be set to enable wrapping but this doesn't work well.)
+
+Bruno Orlandi - 2017
+
+Copyright (C) 2013 Daniel Hoffmann Bernardes, Ícaro Technologies
+Copyright (C) 2016 Jet Holt
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+function _calculateInnerDimensions(computedStyle) {
+    //Calculate the inner width and height
+    var innerWidth;
+    var innerHeight;
+
+    var width = parseInt(computedStyle.getPropertyValue("width"));
+    var height = parseInt(computedStyle.getPropertyValue("height"));
+    var paddingLeft = parseInt(computedStyle.getPropertyValue("padding-left"));
+    var paddingRight = parseInt(computedStyle.getPropertyValue("padding-right"));
+    var paddingTop = parseInt(computedStyle.getPropertyValue("padding-top"));
+    var paddingBottom = parseInt(computedStyle.getPropertyValue("padding-bottom"));
+    var borderLeft = parseInt(computedStyle.getPropertyValue("border-left-width"));
+    var borderRight = parseInt(computedStyle.getPropertyValue("border-right-width"));
+    var borderTop = parseInt(computedStyle.getPropertyValue("border-top-width"));
+    var borderBottom = parseInt(computedStyle.getPropertyValue("border-bottom-width"));
+
+    //If box-sizing is border-box, we need to subtract padding and border.
+    var parentBoxSizing = computedStyle.getPropertyValue("box-sizing");
+    if (parentBoxSizing == "border-box") {
+        innerWidth = width - (paddingLeft + paddingRight + borderLeft + borderRight);
+        innerHeight = height - (paddingTop + paddingBottom + borderTop + borderBottom);
+    } else {
+        innerWidth = width;
+        innerHeight = height;
+    }
+    var obj = {};
+    obj["width"] = innerWidth;
+    obj["height"] = innerHeight;
+    return obj;
+}
+
+export default function BigText(element, options) {
+
+    if (typeof element === 'string') {
+        element = document.querySelector(element);
+    } else if (element.length) {
+        // Support for array based queries (such as jQuery)
+        element = element[0];
+    }
+
+    var defaultOptions = {
+        rotateText: null,
+        fontSizeFactor: 0.8,
+        maximumFontSize: null,
+        limitingDimension: "both",
+        horizontalAlign: "center",
+        verticalAlign: "center",
+        textAlign: "center",
+        whiteSpace: "nowrap",
+        singleLine: true
+    };
+
+    //Merge provided options and default options
+    options = options || {};
+    for (var opt in defaultOptions)
+        if (defaultOptions.hasOwnProperty(opt) && !options.hasOwnProperty(opt))
+            options[opt] = defaultOptions[opt];
+
+    //Get variables which we will reference frequently
+    var style = element.style;
+    var parent = element.parentNode;
+    var parentStyle = parent.style;
+    var parentComputedStyle = document.defaultView.getComputedStyle(parent);
+
+    //hides the element to prevent "flashing"
+    style.visibility = "hidden";
+    //Set some properties
+    style.display = "inline-block";
+    style.clear = "both";
+    style.float = "left";
+    var fontSize = options.maximumFontSize;
+    if (options.singleLine) {
+        style.fontSize = (fontSize * options.fontSizeFactor) + "px";
+        style.lineHeight = fontSize + "px";
+    } else {
+        for (; fontSize > options.minimumFontSize; fontSize = fontSize - Math.min(fontSize / 2, Math.max(0, fontSize - 48) + 2)) {
+            style.fontSize = (fontSize * options.fontSizeFactor) + "px";
+            style.lineHeight = "1";
+            if (element.offsetHeight <= +parentComputedStyle.height.replace("px", "")) {
+                break;
+            }
+        }
+    }
+    style.whiteSpace = options.whiteSpace;
+    style.textAlign = options.textAlign;
+    style.position = "relative";
+    style.padding = 0;
+    style.margin = 0;
+    style.left = "50%";
+    style.top = "50%";
+    var computedStyle = document.defaultView.getComputedStyle(element);
+
+    //Get properties of parent to allow easier referencing later.
+    var parentPadding = {
+        top: parseInt(parentComputedStyle.getPropertyValue("padding-top")),
+        right: parseInt(parentComputedStyle.getPropertyValue("padding-right")),
+        bottom: parseInt(parentComputedStyle.getPropertyValue("padding-bottom")),
+        left: parseInt(parentComputedStyle.getPropertyValue("padding-left")),
+    };
+    var parentBorder = {
+        top: parseInt(parentComputedStyle.getPropertyValue("border-top")),
+        right: parseInt(parentComputedStyle.getPropertyValue("border-right")),
+        bottom: parseInt(parentComputedStyle.getPropertyValue("border-bottom")),
+        left: parseInt(parentComputedStyle.getPropertyValue("border-left")),
+    };
+
+    //Calculate the parent inner width and height
+    var parentInnerDimensions = _calculateInnerDimensions(parentComputedStyle);
+    var parentInnerWidth = parentInnerDimensions["width"];
+    var parentInnerHeight = parentInnerDimensions["height"];
+
+    var box = {
+        width: element.offsetWidth, //Note: This is slightly larger than the jQuery version
+        height: element.offsetHeight,
+    };
+    if (!box.width || !box.height) return element;
+
+
+    if (options.rotateText !== null) {
+        if (typeof options.rotateText !== "number")
+            throw "bigText error: rotateText value must be a number";
+        var rotate = "rotate(" + options.rotateText + "deg)";
+        style.webkitTransform = rotate;
+        style.msTransform = rotate;
+        style.MozTransform = rotate;
+        style.OTransform = rotate;
+        style.transform = rotate;
+        //calculating bounding box of the rotated element
+        var sine = Math.abs(Math.sin(options.rotateText * Math.PI / 180));
+        var cosine = Math.abs(Math.cos(options.rotateText * Math.PI / 180));
+        box.width = element.offsetWidth * cosine + element.offsetHeight * sine;
+        box.height = element.offsetWidth * sine + element.offsetHeight * cosine;
+    }
+
+    var parentWidth = (parentInnerWidth - parentPadding.left - parentPadding.right);
+    var parentHeight = (parentInnerHeight - parentPadding.top - parentPadding.bottom);
+    var widthFactor = parentWidth / box.width;
+    var heightFactor = parentHeight / box.height;
+    var lineHeight;
+
+    if (options.limitingDimension.toLowerCase() === "width") {
+        lineHeight = Math.floor(widthFactor * fontSize);
+    } else if (options.limitingDimension.toLowerCase() === "height") {
+        lineHeight = Math.floor(heightFactor * fontSize);
+    } else if (widthFactor < heightFactor)
+        lineHeight = Math.floor(widthFactor * fontSize);
+    else if (widthFactor >= heightFactor)
+        lineHeight = Math.floor(heightFactor * fontSize);
+
+    var fontSize = lineHeight * options.fontSizeFactor;
+    if (fontSize < options.minimumFontSize) {
+        parentStyle.display = "flex";
+        parentStyle.alignItems = "center";
+        style.textAlign = "center";
+        style.visibility = "";
+        style.fontSize = options.minimumFontSize + "px";
+        style.lineHeight = "";
+        style.overflow = "hidden";
+        style.textOverflow = "ellipsis";
+        style.top = "";
+        style.left = "";
+        style.margin = "";
+        return element;
+    }
+    if (options.maximumFontSize && fontSize > options.maximumFontSize) {
+        fontSize = options.maximumFontSize;
+        lineHeight = fontSize / options.fontSizeFactor;
+    }
+
+    style.fontSize = Math.floor(fontSize) + "px";
+    style.lineHeight = Math.ceil(lineHeight) + "px";
+    style.marginBottom = "0px";
+    style.marginRight = "0px";
+
+    // if (options.limitingDimension.toLowerCase() === "height") {
+    //     //this option needs the font-size to be set already so computedStyle.getPropertyValue("width") returns the right size
+    //     //this +4 is to compensate the rounding erros that can occur due to the calls to Math.floor in the centering code
+    //     parentStyle.width = (parseInt(computedStyle.getPropertyValue("width")) + 4) + "px";
+    // }
+
+    //Calculate the inner width and height
+    var innerDimensions = _calculateInnerDimensions(computedStyle);
+    var innerWidth = innerDimensions["width"];
+    var innerHeight = innerDimensions["height"];
+
+    switch (options.verticalAlign.toLowerCase()) {
+        case "top":
+            style.top = "0%";
+            break;
+        case "bottom":
+            style.top = "100%";
+            style.marginTop = Math.floor(-innerHeight) + "px";
+            break;
+        default:
+            style.marginTop = Math.ceil((-innerHeight / 2)) + "px";
+            break;
+    }
+
+    switch (options.horizontalAlign.toLowerCase()) {
+        case "left":
+            style.left = "0%";
+            break;
+        case "right":
+            style.left = "100%";
+            style.marginLeft = Math.floor(-innerWidth) + "px";
+            break;
+        default:
+            style.marginLeft = Math.ceil((-innerWidth / 2)) + "px";
+            break;
+    }
+
+    //shows the element after the work is done
+    style.visibility = "visible";
+
+    return element;
+}
diff --git a/src/client/views/nodes/LabelBox.scss b/src/client/views/nodes/LabelBox.scss
index 0b195713d..ca4b3d467 100644
--- a/src/client/views/nodes/LabelBox.scss
+++ b/src/client/views/nodes/LabelBox.scss
@@ -23,6 +23,41 @@
     }
 }
 
+.answer-icon {
+    position: absolute;
+    right: 8;
+    bottom: 5;
+    color: black;
+    display: inline-block;
+    font-size: 10px;
+    cursor: pointer;
+    border-radius: 50%;
+    overflow: hidden;
+}
+
+.q-icon {
+    position: absolute;
+    right: 6;
+    bottom: 5;
+    color: white;
+    display: inline-block;
+    font-size: 10px;
+    cursor: pointer;
+    border-radius: 50%;
+    overflow: hidden;
+}
+
+.edit-icon {
+    position: absolute;
+    right: 20;
+    bottom: 5;
+    display: inline-block;
+    font-size: 10px;
+    cursor: pointer;
+    border-radius: 50%;
+    overflow: hidden;
+}
+
 .labelBox-params {
     display: flex;
     flex-direction: row;
diff --git a/src/client/views/nodes/LabelBox.tsx b/src/client/views/nodes/LabelBox.tsx
index d33d12603..daf8e3300 100644
--- a/src/client/views/nodes/LabelBox.tsx
+++ b/src/client/views/nodes/LabelBox.tsx
@@ -1,10 +1,10 @@
 import { Property } from 'csstype';
-import { action, computed, makeObservable, trace } from 'mobx';
+import { action, computed, makeObservable, observable, trace } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import * as textfit from 'textfit';
 import { Field, FieldType } from '../../../fields/Doc';
-import { BoolCast, NumCast, StrCast } from '../../../fields/Types';
+import { BoolCast, NumCast, StrCast, RTFCast } from '../../../fields/Types';
 import { DocumentType } from '../../documents/DocumentTypes';
 import { Docs } from '../../documents/Documents';
 import { DragManager } from '../../util/DragManager';
@@ -12,6 +12,10 @@ import { ViewBoxBaseComponent } from '../DocComponent';
 import { PinDocView, PinProps } from '../PinFuncs';
 import { StyleProp } from '../StyleProp';
 import { FieldView, FieldViewProps } from './FieldView';
+import { Tooltip } from '@mui/material';
+import { emptyFunction } from '../../../Utils';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { returnFalse, setupMoveUpEvents } from '../../../ClientUtils';
 import './LabelBox.scss';
 
 @observer
@@ -21,6 +25,7 @@ export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
     }
     private dropDisposer?: DragManager.DragDropDisposer;
     private _timeout: NodeJS.Timeout | undefined;
+    @observable private _editLabel = false;
     _divRef: HTMLDivElement | null = null;
 
     constructor(props: FieldViewProps) {
@@ -43,6 +48,48 @@ export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
         return this._props.styleProvider?.(this.Document, this._props, StyleProp.BackgroundColor) as string;
     }
 
+    @computed get answerIcon() {
+        return (
+            <Tooltip
+                title={
+                    <div className="answer-tooltip" style={{ minWidth: '150px' }}>
+                        {StrCast(this.Document.quiz)}
+                    </div>
+                }>
+                <div className="answer-tool-tip">
+                    <FontAwesomeIcon className="q-icon" icon="circle" color="white" />
+                    <FontAwesomeIcon className="answer-icon" icon="question" />
+                </div>
+            </Tooltip>
+        );
+    }
+
+    @computed get editAnswer() {
+        return (
+            <Tooltip
+                title={
+                    <div className="answer-tooltip" style={{ minWidth: '150px' }}>
+                        {this._editLabel ? 'save' : 'edit correct answer'}
+                    </div>
+                }>
+                <div className="answer-tool-tip" onPointerDown={e => setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => this.editLabelAnswer())}>
+                    <FontAwesomeIcon className="edit-icon" color={this._editLabel ? 'white' : 'black'} icon="pencil" size="sm" />
+                </div>
+            </Tooltip>
+        );
+    }
+
+    editLabelAnswer = () => {
+        // when click the pencil, set the text to the quiz content. when click off, set the quiz text to that and set textbox to nothing.
+        if (!this._editLabel) {
+            this.dataDoc.title = StrCast(this.Document.quiz);
+        } else {
+            this.Document.quiz = this.Title;
+            this.dataDoc.title = '';
+        }
+        this._editLabel = !this._editLabel;
+    };
+
     componentDidMount() {
         this._props.setContentViewBox?.(this);
     }
@@ -121,7 +168,11 @@ export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
                         width: this._props.PanelWidth(),
                         height: this._props.PanelHeight(),
                         whiteSpace: 'multiLine' in boxParams && boxParams.multiLine ? 'pre-wrap' : 'pre',
-                    }}>
+                    }}
+                    // onMouseLeave={() => {
+                    //     this.hoverFlip(undefined);
+                    // }}
+                >
                     <div
                         style={{
                             width: this._props.PanelWidth() - 2 * NumCast(this.layoutDoc._xPadding),
@@ -133,10 +184,10 @@ export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
                         })}
                         onKeyUp={action(e => {
                             e.stopPropagation();
-                            if (e.key === 'Enter') {
-                                this.dataDoc[this.fieldKey] = this._divRef?.innerText ?? '';
-                                setTimeout(() => this._props.select(false));
-                            }
+                            // if (e.key === 'Enter') {
+                            this.dataDoc[this.fieldKey] = this._divRef?.innerText ?? '';
+                            setTimeout(() => this._props.select(false));
+                            // }
                         })}
                         onBlur={() => {
                             this.dataDoc[this.fieldKey] = this._divRef?.innerText ?? '';
@@ -157,6 +208,8 @@ export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
                         {label}
                     </div>
                 </div>
+                {this.Document.showQuiz ? this.answerIcon : null}
+                {this.Document.showQuiz ? this.editAnswer : null}
             </div>
         );
     }
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.scss b/src/client/views/nodes/formattedText/FormattedTextBox.scss
index 71706084f..d6f13d9ee 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.scss
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.scss
@@ -79,37 +79,6 @@ audiotag:hover {
         right: 8px;
         position: absolute;
     }
-    .answer-icon {
-        position: absolute;
-        right: 10;
-        bottom: 10;
-        color: black;
-        display: inline-block;
-        font-size: 20px;
-        cursor: pointer;
-        border-radius: 50%;
-    }
-
-    .q-icon {
-        position: absolute;
-        right: 6;
-        bottom: 10;
-        color: white;
-        display: inline-block;
-        font-size: 20px;
-        cursor: pointer;
-        border-radius: 50%;
-    }
-
-    .edit-icon {
-        position: absolute;
-        right: 35;
-        bottom: 10;
-        display: inline-block;
-        font-size: 20px;
-        cursor: pointer;
-        border-radius: 50%;
-    }
 }
 
 .answer-tooltip {
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index e1ea93c3f..faef78469 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -114,7 +114,6 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
     private _rules: RichTextRules | undefined;
     private _forceUncollapse = true; // if the cursor doesn't move between clicks, then the selection will disappear for some reason.  This flags the 2nd click as happening on a selection which allows bullet points to toggle
     private _break = true;
-    @observable private _editLabel = false;
     public ProseRef?: HTMLDivElement;
     public get EditorView() {
         return this._editorView;
@@ -2092,48 +2091,6 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
         );
     }
 
-    @computed get answerIcon() {
-        return (
-            <Tooltip
-                title={
-                    <div className="answer-tooltip" style={{ minWidth: '150px' }}>
-                        {StrCast(this.Document.quiz)}
-                    </div>
-                }>
-                <div className="answer-tool-tip">
-                    <FontAwesomeIcon className="q-icon" icon="circle" color="white" />
-                    <FontAwesomeIcon className="answer-icon" icon="question" />
-                </div>
-            </Tooltip>
-        );
-    }
-
-    @computed get editAnswer() {
-        return (
-            <Tooltip
-                title={
-                    <div className="answer-tooltip" style={{ minWidth: '150px' }}>
-                        {this._editLabel ? 'save' : 'edit correct answer'}
-                    </div>
-                }>
-                <div className="answer-tool-tip" onPointerDown={e => setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => this.editLabelAnswer())}>
-                    <FontAwesomeIcon className="edit-icon" color={this._editLabel ? 'white' : 'black'} icon="pencil" size="sm" />
-                </div>
-            </Tooltip>
-        );
-    }
-
-    editLabelAnswer = () => {
-        // when click the pencil, set the text to the quiz content. when click off, set the quiz text to that and set textbox to nothing.
-        if (!this._editLabel) {
-            this.dataDoc.text = StrCast(this.Document.quiz);
-        } else {
-            this.Document.quiz = RTFCast(this.dataDoc.text).Text;
-            this.dataDoc.text = '';
-        }
-        this._editLabel = !this._editLabel;
-    };
-
     get fieldKey() {
         return this._fieldKey;
     }
@@ -2252,8 +2209,6 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
                     {this.noSidebar || this.Document._layout_noSidebar || this.Document._createDocOnCR || this.layoutDoc._chromeHidden || this.Document.quiz ? null : this.sidebarHandle}
                     {this.audioHandle}
                     {this.layoutDoc._layout_enableAltContentUI && !this.layoutDoc._chromeHidden ? this.overlayAlternateIcon : null}
-                    {this.Document.showQuiz ? this.answerIcon : null}
-                    {this.Document.showQuiz ? this.editAnswer : null}
                 </div>
             </div>
         );
diff --git a/src/client/views/webcam/WebCamLogic.js b/src/client/views/webcam/WebCamLogic.js
new file mode 100644
index 000000000..5f6202bc8
--- /dev/null
+++ b/src/client/views/webcam/WebCamLogic.js
@@ -0,0 +1,292 @@
+'use strict';
+import io from "socket.io-client";
+
+var socket;
+var isChannelReady = false;
+var isInitiator = false;
+var isStarted = false;
+var localStream;
+var pc;
+var remoteStream;
+var turnReady;
+var room;
+
+export function initialize(roomName, handlerUI) {
+
+    var pcConfig = {
+        'iceServers': [{
+            'urls': 'stun:stun.l.google.com:19302'
+        }]
+    };
+
+    // Set up audio and video regardless of what devices are present.
+    var sdpConstraints = {
+        offerToReceiveAudio: true,
+        offerToReceiveVideo: true
+    };
+
+    /////////////////////////////////////////////
+
+    room = roomName;
+
+    socket = io.connect(`${window.location.protocol}//${window.location.hostname}:4321`);
+
+    if (room !== '') {
+        socket.emit('create or join', room);
+        console.log('Attempted to create or  join room', room);
+    }
+
+    socket.on('created', function (room) {
+        console.log('Created room ' + room);
+        isInitiator = true;
+    });
+
+    socket.on('full', function (room) {
+        console.log('Room ' + room + ' is full');
+    });
+
+    socket.on('join', function (room) {
+        console.log('Another peer made a request to join room ' + room);
+        console.log('This peer is the initiator of room ' + room + '!');
+        isChannelReady = true;
+    });
+
+    socket.on('joined', function (room) {
+        console.log('joined: ' + room);
+        isChannelReady = true;
+    });
+
+    socket.on('log', function (array) {
+        console.log.apply(console, array);
+    });
+
+    ////////////////////////////////////////////////
+
+
+    // This client receives a message
+    socket.on('message', function (message) {
+        console.log('Client received message:', message);
+        if (message === 'got user media') {
+            maybeStart();
+        } else if (message.type === 'offer') {
+            if (!isInitiator && !isStarted) {
+                maybeStart();
+            }
+            pc.setRemoteDescription(new RTCSessionDescription(message));
+            doAnswer();
+        } else if (message.type === 'answer' && isStarted) {
+            pc.setRemoteDescription(new RTCSessionDescription(message));
+        } else if (message.type === 'candidate' && isStarted) {
+            var candidate = new RTCIceCandidate({
+                sdpMLineIndex: message.label,
+                candidate: message.candidate
+            });
+            pc.addIceCandidate(candidate);
+        } else if (message === 'bye' && isStarted) {
+            handleRemoteHangup();
+        }
+    });
+
+    ////////////////////////////////////////////////////
+
+    var localVideo = document.querySelector('#localVideo');
+    var remoteVideo = document.querySelector('#remoteVideo');
+
+    const gotStream = (stream) => {
+        console.log('Adding local stream.');
+        localStream = stream;
+        localVideo.srcObject = stream;
+        sendMessage('got user media');
+        if (isInitiator) {
+            maybeStart();
+        }
+    }
+
+
+    navigator.mediaDevices.getUserMedia({
+            audio: true,
+            video: true
+        })
+        .then(gotStream)
+        .catch(function (e) {
+            alert('getUserMedia() error: ' + e.name);
+        });
+
+
+
+    var constraints = {
+        video: true
+    };
+
+    console.log('Getting user media with constraints', constraints);
+
+    const requestTurn = (turnURL) => {
+        var turnExists = false;
+        for (var i in pcConfig.iceServers) {
+            if (pcConfig.iceServers[i].urls.substr(0, 5) === 'turn:') {
+                turnExists = true;
+                turnReady = true;
+                break;
+            }
+        }
+        if (!turnExists) {
+            console.log('Getting TURN server from ', turnURL);
+            // No TURN server. Get one from computeengineondemand.appspot.com:
+            var xhr = new XMLHttpRequest();
+            xhr.onreadystatechange = function () {
+                if (xhr.readyState === 4 && xhr.status === 200) {
+                    var turnServer = JSON.parse(xhr.responseText);
+                    console.log('Got TURN server: ', turnServer);
+                    pcConfig.iceServers.push({
+                        'urls': 'turn:' + turnServer.username + '@' + turnServer.turn,
+                        'credential': turnServer.password
+                    });
+                    turnReady = true;
+                }
+            };
+            xhr.open('GET', turnURL, true);
+            xhr.send();
+        }
+    }
+
+
+
+
+    if (location.hostname !== 'localhost') {
+        requestTurn(
+            `${window.location.origin}/corsProxy/${encodeURIComponent("https://computeengineondemand.appspot.com/turn?username=41784574&key=4080218913")}`
+        );
+    }
+
+    const maybeStart = () => {
+        console.log('>>>>>>> maybeStart() ', isStarted, localStream, isChannelReady);
+        if (!isStarted && typeof localStream !== 'undefined' && isChannelReady) {
+            console.log('>>>>>> creating peer connection');
+            createPeerConnection();
+            pc.addStream(localStream);
+            isStarted = true;
+            console.log('isInitiator', isInitiator);
+            if (isInitiator) {
+                doCall();
+            }
+        }
+    };
+
+    window.onbeforeunload = function () {
+        sendMessage('bye');
+    };
+
+    /////////////////////////////////////////////////////////
+
+    const createPeerConnection = () => {
+        try {
+            pc = new RTCPeerConnection(null);
+            pc.onicecandidate = handleIceCandidate;
+            pc.onaddstream = handleRemoteStreamAdded;
+            pc.onremovestream = handleRemoteStreamRemoved;
+            console.log('Created RTCPeerConnnection');
+        } catch (e) {
+            console.log('Failed to create PeerConnection, exception: ' + e.message);
+            alert('Cannot create RTCPeerConnection object.');
+            return;
+        }
+    }
+
+    const handleIceCandidate = (event) => {
+        console.log('icecandidate event: ', event);
+        if (event.candidate) {
+            sendMessage({
+                type: 'candidate',
+                label: event.candidate.sdpMLineIndex,
+                id: event.candidate.sdpMid,
+                candidate: event.candidate.candidate
+            });
+        } else {
+            console.log('End of candidates.');
+        }
+    }
+
+    const handleCreateOfferError = (event) => {
+        console.log('createOffer() error: ', event);
+    }
+
+    const doCall = () => {
+        console.log('Sending offer to peer');
+        pc.createOffer(setLocalAndSendMessage, handleCreateOfferError);
+    }
+
+    const doAnswer = () => {
+        console.log('Sending answer to peer.');
+        pc.createAnswer().then(
+            setLocalAndSendMessage,
+            onCreateSessionDescriptionError
+        );
+    }
+
+    const setLocalAndSendMessage = (sessionDescription) => {
+        pc.setLocalDescription(sessionDescription);
+        console.log('setLocalAndSendMessage sending message', sessionDescription);
+        sendMessage(sessionDescription);
+    }
+
+    const onCreateSessionDescriptionError = (error) => {
+        trace('Failed to create session description: ' + error.toString());
+    }
+
+
+
+    const handleRemoteStreamAdded = (event) => {
+        console.log('Remote stream added.');
+        remoteStream = event.stream;
+        remoteVideo.srcObject = remoteStream;
+        handlerUI();
+
+    };
+
+    const handleRemoteStreamRemoved = (event) => {
+        console.log('Remote stream removed. Event: ', event);
+    }
+}
+
+export function hangup() {
+    console.log('Hanging up.');
+    stop();
+    sendMessage('bye');
+    if (localStream) {
+        localStream.getTracks().forEach(track => track.stop());
+    }
+}
+
+function stop() {
+    isStarted = false;
+    if (pc) {
+        pc.close();
+    }
+    pc = null;
+}
+
+function handleRemoteHangup() {
+    console.log('Session terminated.');
+    stop();
+    isInitiator = false;
+    if (localStream) {
+        localStream.getTracks().forEach(track => track.stop());
+    }
+}
+
+function sendMessage(message) {
+    console.log('Client sending message: ', message);
+    socket.emit('message', message, room);
+};
+
+export function refreshVideos() {
+    var localVideo = document.querySelector('#localVideo');
+    var remoteVideo = document.querySelector('#remoteVideo');
+    if (localVideo) {
+        localVideo.srcObject = localStream;
+    }
+    if (remoteVideo) {
+        remoteVideo.srcObject = remoteStream;
+    }
+
+}
\ No newline at end of file
diff --git a/src/extensions/General/Extensions.ts b/src/extensions/General/Extensions.ts
new file mode 100644
index 000000000..4b6d05d5f
--- /dev/null
+++ b/src/extensions/General/Extensions.ts
@@ -0,0 +1,9 @@
+import { Assign as ArrayAssign } from "../ArrayExtensions";
+import { Assign as StringAssign } from "../StringExtensions";
+
+function AssignAllExtensions() {
+    ArrayAssign();
+    StringAssign();
+}
+
+export { AssignAllExtensions };
\ No newline at end of file
diff --git a/src/extensions/General/ExtensionsTypings.ts b/src/extensions/General/ExtensionsTypings.ts
new file mode 100644
index 000000000..370157ed0
--- /dev/null
+++ b/src/extensions/General/ExtensionsTypings.ts
@@ -0,0 +1,8 @@
+interface Array<T> {
+    lastElement(): T;
+}
+
+interface String {
+    removeTrailingNewlines(): string;
+    hasNewline(): boolean;
+}
\ No newline at end of file
diff --git a/src/server/public/assets/dash-colon-menu 2.gif b/src/server/public/assets/dash-colon-menu 2.gif
new file mode 100644
index 000000000..b5512afb1
Binary files /dev/null and b/src/server/public/assets/dash-colon-menu 2.gif differ
diff --git a/src/server/public/assets/dash-create-link-board 2.gif b/src/server/public/assets/dash-create-link-board 2.gif
new file mode 100644
index 000000000..354188fd9
Binary files /dev/null and b/src/server/public/assets/dash-create-link-board 2.gif differ
diff --git a/src/server/public/assets/dash-following-link 2.gif b/src/server/public/assets/dash-following-link 2.gif
new file mode 100644
index 000000000..9e3e6df82
Binary files /dev/null and b/src/server/public/assets/dash-following-link 2.gif differ
diff --git a/src/server/public/assets/documentation 2.png b/src/server/public/assets/documentation 2.png
new file mode 100644
index 000000000..95c76b198
Binary files /dev/null and b/src/server/public/assets/documentation 2.png differ
diff --git a/src/server/public/assets/pdf.worker.2.4.456.min.js b/src/server/public/assets/pdf.worker.2.4.456.min.js
new file mode 100644
index 000000000..54eb544f6
--- /dev/null
+++ b/src/server/public/assets/pdf.worker.2.4.456.min.js
@@ -0,0 +1,22 @@
+/**
+ * @licstart The following is the entire license notice for the
+ * Javascript code in this page
+ *
+ * Copyright 2020 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @licend The above is the entire license notice for the
+ * Javascript code in this page
+ */
+!function (e, t) { "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define("pdfjs-dist/build/pdf.worker", [], t) : "object" == typeof exports ? exports["pdfjs-dist/build/pdf.worker"] = t() : e["pdfjs-dist/build/pdf.worker"] = e.pdfjsWorker = t() }(this, (function () { return function (e) { var t = {}; function a(r) { if (t[r]) return t[r].exports; var i = t[r] = { i: r, l: !1, exports: {} }; e[r].call(i.exports, i, i.exports, a); i.l = !0; return i.exports } a.m = e; a.c = t; a.d = function (e, t, r) { a.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r }) }; a.r = function (e) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }); Object.defineProperty(e, "__esModule", { value: !0 }) }; a.t = function (e, t) { 1 & t && (e = a(e)); if (8 & t) return e; if (4 & t && "object" == typeof e && e && e.__esModule) return e; var r = Object.create(null); a.r(r); Object.defineProperty(r, "default", { enumerable: !0, value: e }); if (2 & t && "string" != typeof e) for (var i in e) a.d(r, i, function (t) { return e[t] }.bind(null, i)); return r }; a.n = function (e) { var t = e && e.__esModule ? function () { return e.default } : function () { return e }; a.d(t, "a", t); return t }; a.o = function (e, t) { return Object.prototype.hasOwnProperty.call(e, t) }; a.p = ""; return a(a.s = 0) }([function (e, t, a) { "use strict"; const r = a(1); t.WorkerMessageHandler = r.WorkerMessageHandler }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.WorkerMessageHandler = t.WorkerTask = void 0; var r = a(2), i = a(4), n = a(5), s = a(44), o = a(45), c = a(46), l = a(7), h = function () { function e(e) { this.name = e; this.terminated = !1; this._capability = (0, r.createPromiseCapability)() } e.prototype = { get finished() { return this._capability.promise }, finish() { this._capability.resolve() }, terminate() { this.terminated = !0 }, ensureNotTerminated() { if (this.terminated) throw new Error("Worker task was terminated") } }; return e }(); t.WorkerTask = h; var u, d = { setup(e, t) { var a = !1; e.on("test", (function (t) { if (a) return; a = !0; if (!(t instanceof Uint8Array)) { e.send("test", null); return } const r = 255 === t[0]; e.postMessageTransfers = r; e.send("test", { supportTransfers: r }) })); e.on("configure", (function (e) { (0, r.setVerbosityLevel)(e.verbosity) })); e.on("GetDocRequest", (function (e) { return d.createDocumentHandler(e, t) })) }, createDocumentHandler(e, t) { var a, s = !1, u = null, d = []; const f = (0, r.getVerbosityLevel)(), g = e.apiVersion; if ("2.4.456" !== g) throw new Error(`The API version "${g}" does not match ` + 'the Worker version "2.4.456".'); const m = []; for (const e in []) m.push(e); if (m.length) throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + m.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s."); var p = e.docId, b = e.docBaseUrl, y = e.docId + "_worker", v = new o.MessageHandler(y, p, t); v.postMessageTransfers = e.postMessageTransfers; function w() { if (s) throw new Error("Worker was terminated") } function k(e) { d.push(e) } function S(e) { e.finish(); var t = d.indexOf(e); d.splice(t, 1) } async function C(e) { await a.ensureDoc("checkHeader"); await a.ensureDoc("parseStartXRef"); await a.ensureDoc("parse", [e]); e || await a.ensureDoc("checkFirstPage"); const [t, r] = await Promise.all([a.ensureDoc("numPages"), a.ensureDoc("fingerprint")]); return { numPages: t, fingerprint: r } } function x(e, t) { var a, i = (0, r.createPromiseCapability)(), s = e.source; if (s.data) { try { a = new n.LocalPdfManager(p, s.data, s.password, t, b); i.resolve(a) } catch (e) { i.reject(e) } return i.promise } var o, l = []; try { o = new c.PDFWorkerStream(v) } catch (e) { i.reject(e); return i.promise } var h = o.getFullReader(); h.headersReady.then((function () { if (h.isRangeSupported) { var e = s.disableAutoFetch || h.isStreamingSupported; a = new n.NetworkPdfManager(p, o, { msgHandler: v, password: s.password, length: h.contentLength, disableAutoFetch: e, rangeChunkSize: s.rangeChunkSize }, t, b); for (let e = 0; e < l.length; e++)a.sendProgressiveData(l[e]); l = []; i.resolve(a); u = null } })).catch((function (e) { i.reject(e); u = null })); var d = 0; new Promise((function (e, o) { var c = function (e) { try { w(); if (e.done) { a || function () { var e = (0, r.arraysToBytes)(l); s.length && e.length !== s.length && (0, r.warn)("reported HTTP length is different from actual"); try { a = new n.LocalPdfManager(p, e, s.password, t, b); i.resolve(a) } catch (e) { i.reject(e) } l = [] }(); u = null; return } var f = e.value; d += (0, r.arrayByteLength)(f); h.isStreamingSupported || v.send("DocProgress", { loaded: d, total: Math.max(d, h.contentLength || 0) }); a ? a.sendProgressiveData(f) : l.push(f); h.read().then(c, o) } catch (e) { o(e) } }; h.read().then(c, o) })).catch((function (e) { i.reject(e); u = null })); u = function (e) { o.cancelAllRequests(e) }; return i.promise } v.on("GetPage", (function (e) { return a.getPage(e.pageIndex).then((function (e) { return Promise.all([a.ensure(e, "rotate"), a.ensure(e, "ref"), a.ensure(e, "userUnit"), a.ensure(e, "view")]).then((function ([e, t, a, r]) { return { rotate: e, ref: t, userUnit: a, view: r } })) })) })); v.on("GetPageIndex", (function (e) { var t = i.Ref.get(e.ref.num, e.ref.gen); return a.pdfDocument.catalog.getPageIndex(t) })); v.on("GetDestinations", (function (e) { return a.ensureCatalog("destinations") })); v.on("GetDestination", (function (e) { return a.ensureCatalog("getDestination", [e.id]) })); v.on("GetPageLabels", (function (e) { return a.ensureCatalog("pageLabels") })); v.on("GetPageLayout", (function (e) { return a.ensureCatalog("pageLayout") })); v.on("GetPageMode", (function (e) { return a.ensureCatalog("pageMode") })); v.on("GetViewerPreferences", (function (e) { return a.ensureCatalog("viewerPreferences") })); v.on("GetOpenAction", (function (e) { return a.ensureCatalog("openAction") })); v.on("GetAttachments", (function (e) { return a.ensureCatalog("attachments") })); v.on("GetJavaScript", (function (e) { return a.ensureCatalog("javaScript") })); v.on("GetOutline", (function (e) { return a.ensureCatalog("documentOutline") })); v.on("GetPermissions", (function (e) { return a.ensureCatalog("permissions") })); v.on("GetMetadata", (function (e) { return Promise.all([a.ensureDoc("documentInfo"), a.ensureCatalog("metadata")]) })); v.on("GetData", (function (e) { a.requestLoadedStream(); return a.onLoadedStream().then((function (e) { return e.bytes })) })); v.on("GetStats", (function (e) { return a.pdfDocument.xref.stats })); v.on("GetAnnotations", (function ({ pageIndex: e, intent: t }) { return a.getPage(e).then((function (e) { return e.getAnnotationsData(t) })) })); v.on("GetOperatorList", (function (e, t) { var i = e.pageIndex; a.getPage(i).then((function (a) { var n = new h(`GetOperatorList: page ${i}`); k(n); const s = f >= r.VerbosityLevel.INFOS ? Date.now() : 0; a.getOperatorList({ handler: v, sink: t, task: n, intent: e.intent, renderInteractiveForms: e.renderInteractiveForms }).then((function (e) { S(n); s && (0, r.info)(`page=${i + 1} - getOperatorList: time=` + `${Date.now() - s}ms, len=${e.length}`); t.close() }), (function (e) { S(n); if (!n.terminated) { v.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.unknown }); t.error(e) } })) })) }), this); v.on("GetTextContent", (function (e, t) { var i = e.pageIndex; t.onPull = function (e) { }; t.onCancel = function (e) { }; a.getPage(i).then((function (a) { var n = new h("GetTextContent: page " + i); k(n); const s = f >= r.VerbosityLevel.INFOS ? Date.now() : 0; a.extractTextContent({ handler: v, task: n, sink: t, normalizeWhitespace: e.normalizeWhitespace, combineTextItems: e.combineTextItems }).then((function () { S(n); s && (0, r.info)(`page=${i + 1} - getTextContent: time=` + `${Date.now() - s}ms`); t.close() }), (function (e) { S(n); n.terminated || t.error(e) })) })) })); v.on("FontFallback", (function (e) { return a.fontFallback(e.id, v) })); v.on("Cleanup", (function (e) { return a.cleanup() })); v.on("Terminate", (function (e) { s = !0; const t = []; if (a) { a.terminate(new r.AbortException("Worker was terminated.")); const e = a.cleanup(); t.push(e); a = null } else (0, i.clearPrimitiveCaches)(); u && u(new r.AbortException("Worker was terminated.")); d.forEach((function (e) { t.push(e.finished); e.terminate() })); return Promise.all(t).then((function () { v.destroy(); v = null })) })); v.on("Ready", (function (t) { !function (e) { function t(e) { w(); v.send("GetDoc", { pdfInfo: e }) } function i(e) { w(); if (e instanceof r.PasswordException) { var t = new h(`PasswordException: response ${e.code}`); k(t); v.sendWithPromise("PasswordRequest", e).then((function (e) { S(t); a.updatePassword(e.password); n() })).catch((function () { S(t); v.send("DocException", e) })) } else e instanceof r.InvalidPDFException || e instanceof r.MissingPDFException || e instanceof r.UnexpectedResponseException || e instanceof r.UnknownErrorException ? v.send("DocException", e) : v.send("DocException", new r.UnknownErrorException(e.message, e.toString())) } function n() { w(); C(!1).then(t, (function (e) { w(); if (e instanceof l.XRefParseException) { a.requestLoadedStream(); a.onLoadedStream().then((function () { w(); C(!0).then(t, i) })) } else i(e) }), i) } w(); x(e, { forceDataSchema: e.disableCreateObjectURL, maxImageSize: e.maxImageSize, disableFontFace: e.disableFontFace, nativeImageDecoderSupport: e.nativeImageDecoderSupport, ignoreErrors: e.ignoreErrors, isEvalSupported: e.isEvalSupported }).then((function (e) { if (s) { e.terminate(new r.AbortException("Worker was terminated.")); throw new Error("Worker was terminated") } (a = e).onLoadedStream().then((function (e) { v.send("DataLoaded", { length: e.bytes.byteLength }) })) })).then(n, i) }(e); e = null })); return y }, initializeFromPort(e) { var t = new o.MessageHandler("worker", "main", e); d.setup(t, e); t.send("ready", null) } }; t.WorkerMessageHandler = d; "undefined" == typeof window && !s.isNodeJS && "undefined" != typeof self && ("function" == typeof (u = self).postMessage && "onmessage" in u) && d.initializeFromPort(self) }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.arrayByteLength = d; t.arraysToBytes = function (e) { const t = e.length; if (1 === t && e[0] instanceof Uint8Array) return e[0]; let a = 0; for (let r = 0; r < t; r++)a += d(e[r]); let r = 0; const i = new Uint8Array(a); for (let a = 0; a < t; a++) { let t = e[a]; t instanceof Uint8Array || (t = "string" == typeof t ? u(t) : new Uint8Array(t)); const n = t.byteLength; i.set(t, r); r += n } return i }; t.assert = o; t.bytesToString = function (e) { o(null !== e && "object" == typeof e && void 0 !== e.length, "Invalid argument for bytesToString"); const t = e.length; if (t < 8192) return String.fromCharCode.apply(null, e); const a = []; for (let r = 0; r < t; r += 8192) { const i = Math.min(r + 8192, t), n = e.subarray(r, i); a.push(String.fromCharCode.apply(null, n)) } return a.join("") }; t.createPromiseCapability = function () { const e = Object.create(null); let t = !1; Object.defineProperty(e, "settled", { get: () => t }); e.promise = new Promise((function (a, r) { e.resolve = function (e) { t = !0; a(e) }; e.reject = function (e) { t = !0; r(e) } })); return e }; t.getVerbosityLevel = function () { return i }; t.info = function (e) { i >= r.INFOS && console.log(`Info: ${e}`) }; t.isArrayBuffer = function (e) { return "object" == typeof e && null !== e && void 0 !== e.byteLength }; t.isArrayEqual = function (e, t) { if (e.length !== t.length) return !1; return e.every((function (e, a) { return e === t[a] })) }; t.isBool = function (e) { return "boolean" == typeof e }; t.isEmptyObj = function (e) { for (const t in e) return !1; return !0 }; t.isNum = function (e) { return "number" == typeof e }; t.isString = function (e) { return "string" == typeof e }; t.isSameOrigin = function (e, t) { let a; try { a = new URL(e); if (!a.origin || "null" === a.origin) return !1 } catch (e) { return !1 } const r = new URL(t, a); return a.origin === r.origin }; t.createValidAbsoluteUrl = function (e, t) { if (!e) return null; try { const a = t ? new URL(e, t) : new URL(e); if (function (e) { if (!e) return !1; switch (e.protocol) { case "http:": case "https:": case "ftp:": case "mailto:": case "tel:": return !0; default: return !1 } }(a)) return a } catch (e) { } return null }; t.removeNullCharacters = function (e) { if ("string" != typeof e) { n("The argument for removeNullCharacters must be a string."); return e } return e.replace(h, "") }; t.setVerbosityLevel = function (e) { Number.isInteger(e) && (i = e) }; t.shadow = c; t.string32 = function (e) { return String.fromCharCode(e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e) }; t.stringToBytes = u; t.stringToPDFString = function (e) { const t = e.length, a = []; if ("þ" === e[0] && "ÿ" === e[1]) for (let r = 2; r < t; r += 2)a.push(String.fromCharCode(e.charCodeAt(r) << 8 | e.charCodeAt(r + 1))); else if ("ÿ" === e[0] && "þ" === e[1]) for (let r = 2; r < t; r += 2)a.push(String.fromCharCode(e.charCodeAt(r + 1) << 8 | e.charCodeAt(r))); else for (let r = 0; r < t; ++r) { const t = b[e.charCodeAt(r)]; a.push(t ? String.fromCharCode(t) : e.charAt(r)) } return a.join("") }; t.stringToUTF8String = function (e) { return decodeURIComponent(escape(e)) }; t.utf8StringToString = function (e) { return unescape(encodeURIComponent(e)) }; t.warn = n; t.unreachable = s; t.IsEvalSupportedCached = t.IsLittleEndianCached = t.createObjectURL = t.FormatError = t.Util = t.UnknownErrorException = t.UnexpectedResponseException = t.TextRenderingMode = t.StreamType = t.PermissionFlag = t.PasswordResponses = t.PasswordException = t.NativeImageDecoding = t.MissingPDFException = t.InvalidPDFException = t.AbortException = t.CMapCompressionType = t.ImageKind = t.FontType = t.AnnotationType = t.AnnotationStateModelType = t.AnnotationReviewState = t.AnnotationReplyType = t.AnnotationMarkedState = t.AnnotationFlag = t.AnnotationFieldFlag = t.AnnotationBorderStyleType = t.UNSUPPORTED_FEATURES = t.VerbosityLevel = t.OPS = t.IDENTITY_MATRIX = t.FONT_IDENTITY_MATRIX = t.BaseException = void 0; a(3); t.IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; t.FONT_IDENTITY_MATRIX = [.001, 0, 0, .001, 0, 0]; t.NativeImageDecoding = { NONE: "none", DECODE: "decode", DISPLAY: "display" }; t.PermissionFlag = { PRINT: 4, MODIFY_CONTENTS: 8, COPY: 16, MODIFY_ANNOTATIONS: 32, FILL_INTERACTIVE_FORMS: 256, COPY_FOR_ACCESSIBILITY: 512, ASSEMBLE: 1024, PRINT_HIGH_QUALITY: 2048 }; t.TextRenderingMode = { FILL: 0, STROKE: 1, FILL_STROKE: 2, INVISIBLE: 3, FILL_ADD_TO_PATH: 4, STROKE_ADD_TO_PATH: 5, FILL_STROKE_ADD_TO_PATH: 6, ADD_TO_PATH: 7, FILL_STROKE_MASK: 3, ADD_TO_PATH_FLAG: 4 }; t.ImageKind = { GRAYSCALE_1BPP: 1, RGB_24BPP: 2, RGBA_32BPP: 3 }; t.AnnotationType = { TEXT: 1, LINK: 2, FREETEXT: 3, LINE: 4, SQUARE: 5, CIRCLE: 6, POLYGON: 7, POLYLINE: 8, HIGHLIGHT: 9, UNDERLINE: 10, SQUIGGLY: 11, STRIKEOUT: 12, STAMP: 13, CARET: 14, INK: 15, POPUP: 16, FILEATTACHMENT: 17, SOUND: 18, MOVIE: 19, WIDGET: 20, SCREEN: 21, PRINTERMARK: 22, TRAPNET: 23, WATERMARK: 24, THREED: 25, REDACT: 26 }; t.AnnotationStateModelType = { MARKED: "Marked", REVIEW: "Review" }; t.AnnotationMarkedState = { MARKED: "Marked", UNMARKED: "Unmarked" }; t.AnnotationReviewState = { ACCEPTED: "Accepted", REJECTED: "Rejected", CANCELLED: "Cancelled", COMPLETED: "Completed", NONE: "None" }; t.AnnotationReplyType = { GROUP: "Group", REPLY: "R" }; t.AnnotationFlag = { INVISIBLE: 1, HIDDEN: 2, PRINT: 4, NOZOOM: 8, NOROTATE: 16, NOVIEW: 32, READONLY: 64, LOCKED: 128, TOGGLENOVIEW: 256, LOCKEDCONTENTS: 512 }; t.AnnotationFieldFlag = { READONLY: 1, REQUIRED: 2, NOEXPORT: 4, MULTILINE: 4096, PASSWORD: 8192, NOTOGGLETOOFF: 16384, RADIO: 32768, PUSHBUTTON: 65536, COMBO: 131072, EDIT: 262144, SORT: 524288, FILESELECT: 1048576, MULTISELECT: 2097152, DONOTSPELLCHECK: 4194304, DONOTSCROLL: 8388608, COMB: 16777216, RICHTEXT: 33554432, RADIOSINUNISON: 33554432, COMMITONSELCHANGE: 67108864 }; t.AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, BEVELED: 3, INSET: 4, UNDERLINE: 5 }; t.StreamType = { UNKNOWN: "UNKNOWN", FLATE: "FLATE", LZW: "LZW", DCT: "DCT", JPX: "JPX", JBIG: "JBIG", A85: "A85", AHX: "AHX", CCF: "CCF", RLX: "RLX" }; t.FontType = { UNKNOWN: "UNKNOWN", TYPE1: "TYPE1", TYPE1C: "TYPE1C", CIDFONTTYPE0: "CIDFONTTYPE0", CIDFONTTYPE0C: "CIDFONTTYPE0C", TRUETYPE: "TRUETYPE", CIDFONTTYPE2: "CIDFONTTYPE2", TYPE3: "TYPE3", OPENTYPE: "OPENTYPE", TYPE0: "TYPE0", MMTYPE1: "MMTYPE1" }; const r = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }; t.VerbosityLevel = r; t.CMapCompressionType = { NONE: 0, BINARY: 1, STREAM: 2 }; t.OPS = { dependency: 1, setLineWidth: 2, setLineCap: 3, setLineJoin: 4, setMiterLimit: 5, setDash: 6, setRenderingIntent: 7, setFlatness: 8, setGState: 9, save: 10, restore: 11, transform: 12, moveTo: 13, lineTo: 14, curveTo: 15, curveTo2: 16, curveTo3: 17, closePath: 18, rectangle: 19, stroke: 20, closeStroke: 21, fill: 22, eoFill: 23, fillStroke: 24, eoFillStroke: 25, closeFillStroke: 26, closeEOFillStroke: 27, endPath: 28, clip: 29, eoClip: 30, beginText: 31, endText: 32, setCharSpacing: 33, setWordSpacing: 34, setHScale: 35, setLeading: 36, setFont: 37, setTextRenderingMode: 38, setTextRise: 39, moveText: 40, setLeadingMoveText: 41, setTextMatrix: 42, nextLine: 43, showText: 44, showSpacedText: 45, nextLineShowText: 46, nextLineSetSpacingShowText: 47, setCharWidth: 48, setCharWidthAndBounds: 49, setStrokeColorSpace: 50, setFillColorSpace: 51, setStrokeColor: 52, setStrokeColorN: 53, setFillColor: 54, setFillColorN: 55, setStrokeGray: 56, setFillGray: 57, setStrokeRGBColor: 58, setFillRGBColor: 59, setStrokeCMYKColor: 60, setFillCMYKColor: 61, shadingFill: 62, beginInlineImage: 63, beginImageData: 64, endInlineImage: 65, paintXObject: 66, markPoint: 67, markPointProps: 68, beginMarkedContent: 69, beginMarkedContentProps: 70, endMarkedContent: 71, beginCompat: 72, endCompat: 73, paintFormXObjectBegin: 74, paintFormXObjectEnd: 75, beginGroup: 76, endGroup: 77, beginAnnotations: 78, endAnnotations: 79, beginAnnotation: 80, endAnnotation: 81, paintJpegXObject: 82, paintImageMaskXObject: 83, paintImageMaskXObjectGroup: 84, paintImageXObject: 85, paintInlineImageXObject: 86, paintInlineImageXObjectGroup: 87, paintImageXObjectRepeat: 88, paintImageMaskXObjectRepeat: 89, paintSolidColorImageMask: 90, constructPath: 91 }; t.UNSUPPORTED_FEATURES = { unknown: "unknown", forms: "forms", javaScript: "javaScript", smask: "smask", shadingPattern: "shadingPattern", font: "font" }; t.PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; let i = r.WARNINGS; function n(e) { i >= r.WARNINGS && console.log(`Warning: ${e}`) } function s(e) { throw new Error(e) } function o(e, t) { e || s(t) } function c(e, t, a) { Object.defineProperty(e, t, { value: a, enumerable: !0, configurable: !0, writable: !1 }); return a } const l = function () { function e(t) { this.constructor === e && s("Cannot initialize BaseException."); this.message = t; this.name = this.constructor.name } e.prototype = new Error; e.constructor = e; return e }(); t.BaseException = l; t.PasswordException = class extends l { constructor(e, t) { super(e); this.code = t } }; t.UnknownErrorException = class extends l { constructor(e, t) { super(e); this.details = t } }; t.InvalidPDFException = class extends l { }; t.MissingPDFException = class extends l { }; t.UnexpectedResponseException = class extends l { constructor(e, t) { super(e); this.status = t } }; t.FormatError = class extends l { }; t.AbortException = class extends l { }; const h = /\x00/g; function u(e) { o("string" == typeof e, "Invalid argument for stringToBytes"); const t = e.length, a = new Uint8Array(t); for (let r = 0; r < t; ++r)a[r] = 255 & e.charCodeAt(r); return a } function d(e) { if (void 0 !== e.length) return e.length; o(void 0 !== e.byteLength); return e.byteLength } const f = { get value() { return c(this, "value", function () { const e = new Uint8Array(4); e[0] = 1; return 1 === new Uint32Array(e.buffer, 0, 1)[0] }()) } }; t.IsLittleEndianCached = f; const g = { get value() { return c(this, "value", function () { try { new Function(""); return !0 } catch (e) { return !1 } }()) } }; t.IsEvalSupportedCached = g; const m = ["rgb(", 0, ",", 0, ",", 0, ")"]; class p { static makeCssRgb(e, t, a) { m[1] = e; m[3] = t; m[5] = a; return m.join("") } static transform(e, t) { return [e[0] * t[0] + e[2] * t[1], e[1] * t[0] + e[3] * t[1], e[0] * t[2] + e[2] * t[3], e[1] * t[2] + e[3] * t[3], e[0] * t[4] + e[2] * t[5] + e[4], e[1] * t[4] + e[3] * t[5] + e[5]] } static applyTransform(e, t) { return [e[0] * t[0] + e[1] * t[2] + t[4], e[0] * t[1] + e[1] * t[3] + t[5]] } static applyInverseTransform(e, t) { const a = t[0] * t[3] - t[1] * t[2]; return [(e[0] * t[3] - e[1] * t[2] + t[2] * t[5] - t[4] * t[3]) / a, (-e[0] * t[1] + e[1] * t[0] + t[4] * t[1] - t[5] * t[0]) / a] } static getAxialAlignedBoundingBox(e, t) { const a = p.applyTransform(e, t), r = p.applyTransform(e.slice(2, 4), t), i = p.applyTransform([e[0], e[3]], t), n = p.applyTransform([e[2], e[1]], t); return [Math.min(a[0], r[0], i[0], n[0]), Math.min(a[1], r[1], i[1], n[1]), Math.max(a[0], r[0], i[0], n[0]), Math.max(a[1], r[1], i[1], n[1])] } static inverseTransform(e) { const t = e[0] * e[3] - e[1] * e[2]; return [e[3] / t, -e[1] / t, -e[2] / t, e[0] / t, (e[2] * e[5] - e[4] * e[3]) / t, (e[4] * e[1] - e[5] * e[0]) / t] } static apply3dTransform(e, t) { return [e[0] * t[0] + e[1] * t[1] + e[2] * t[2], e[3] * t[0] + e[4] * t[1] + e[5] * t[2], e[6] * t[0] + e[7] * t[1] + e[8] * t[2]] } static singularValueDecompose2dScale(e) { const t = [e[0], e[2], e[1], e[3]], a = e[0] * t[0] + e[1] * t[2], r = e[0] * t[1] + e[1] * t[3], i = e[2] * t[0] + e[3] * t[2], n = e[2] * t[1] + e[3] * t[3], s = (a + n) / 2, o = Math.sqrt((a + n) * (a + n) - 4 * (a * n - i * r)) / 2, c = s + o || 1, l = s - o || 1; return [Math.sqrt(c), Math.sqrt(l)] } static normalizeRect(e) { const t = e.slice(0); if (e[0] > e[2]) { t[0] = e[2]; t[2] = e[0] } if (e[1] > e[3]) { t[1] = e[3]; t[3] = e[1] } return t } static intersect(e, t) { function a(e, t) { return e - t } const r = [e[0], e[2], t[0], t[2]].sort(a), i = [e[1], e[3], t[1], t[3]].sort(a), n = []; e = p.normalizeRect(e); t = p.normalizeRect(t); if (!(r[0] === e[0] && r[1] === t[0] || r[0] === t[0] && r[1] === e[0])) return null; n[0] = r[1]; n[2] = r[2]; if (!(i[0] === e[1] && i[1] === t[1] || i[0] === t[1] && i[1] === e[1])) return null; n[1] = i[1]; n[3] = i[2]; return n } } t.Util = p; const b = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 711, 710, 729, 733, 731, 730, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8226, 8224, 8225, 8230, 8212, 8211, 402, 8260, 8249, 8250, 8722, 8240, 8222, 8220, 8221, 8216, 8217, 8218, 8482, 64257, 64258, 321, 338, 352, 376, 381, 305, 322, 339, 353, 382, 0, 8364]; const y = function () { const e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; return function (t, a, r = !1) { if (!r && URL.createObjectURL) { const e = new Blob([t], { type: a }); return URL.createObjectURL(e) } let i = `data:${a};base64,`; for (let a = 0, r = t.length; a < r; a += 3) { const n = 255 & t[a], s = 255 & t[a + 1], o = 255 & t[a + 2]; i += e[n >> 2] + e[(3 & n) << 4 | s >> 4] + e[a + 1 < r ? (15 & s) << 2 | o >> 6 : 64] + e[a + 2 < r ? 63 & o : 64] } return i } }(); t.createObjectURL = y }, function (e, t, a) { }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.clearPrimitiveCaches = function () { n._clearCache(); i._clearCache(); o._clearCache() }; t.isEOF = function (e) { return e === r }; t.isCmd = function (e, t) { return e instanceof n && (void 0 === t || e.cmd === t) }; t.isDict = u; t.isName = h; t.isRef = function (e) { return e instanceof o }; t.isRefsEqual = function (e, t) { return e.num === t.num && e.gen === t.gen }; t.isStream = function (e) { return "object" == typeof e && null !== e && void 0 !== e.getBytes }; t.RefSetCache = t.RefSet = t.Ref = t.Name = t.Dict = t.Cmd = t.EOF = void 0; a(2); var r = {}; t.EOF = r; var i = function () { let e = Object.create(null); function t(e) { this.name = e } t.prototype = {}; t.get = function (a) { var r = e[a]; return r || (e[a] = new t(a)) }; t._clearCache = function () { e = Object.create(null) }; return t }(); t.Name = i; var n = function () { let e = Object.create(null); function t(e) { this.cmd = e } t.prototype = {}; t.get = function (a) { var r = e[a]; return r || (e[a] = new t(a)) }; t._clearCache = function () { e = Object.create(null) }; return t }(); t.Cmd = n; var s = function () { var e = function () { return e }; function t(t) { this._map = Object.create(null); this.xref = t; this.objId = null; this.suppressEncryption = !1; this.__nonSerializable__ = e } t.prototype = { assignXref: function (e) { this.xref = e }, get(e, t, a) { let r = this._map[e]; if (void 0 === r && void 0 !== t) { r = this._map[t]; void 0 === r && void 0 !== a && (r = this._map[a]) } return r instanceof o && this.xref ? this.xref.fetch(r, this.suppressEncryption) : r }, async getAsync(e, t, a) { let r = this._map[e]; if (void 0 === r && void 0 !== t) { r = this._map[t]; void 0 === r && void 0 !== a && (r = this._map[a]) } return r instanceof o && this.xref ? this.xref.fetchAsync(r, this.suppressEncryption) : r }, getArray(e, t, a) { let r = this.get(e, t, a); if (!Array.isArray(r) || !this.xref) return r; r = r.slice(); for (let e = 0, t = r.length; e < t; e++)r[e] instanceof o && (r[e] = this.xref.fetch(r[e], this.suppressEncryption)); return r }, getRaw: function (e) { return this._map[e] }, getKeys: function () { return Object.keys(this._map) }, set: function (e, t) { this._map[e] = t }, has: function (e) { return void 0 !== this._map[e] }, forEach: function (e) { for (var t in this._map) e(t, this.get(t)) } }; t.empty = new t(null); t.merge = function (e, a) { const r = new t(e); for (let e = 0, t = a.length; e < t; e++) { const t = a[e]; if (u(t)) for (const e in t._map) void 0 === r._map[e] && (r._map[e] = t._map[e]) } return r }; return t }(); t.Dict = s; var o = function () { let e = Object.create(null); function t(e, t) { this.num = e; this.gen = t } t.prototype = { toString: function () { return 0 === this.gen ? `${this.num}R` : `${this.num}R${this.gen}` } }; t.get = function (a, r) { const i = 0 === r ? `${a}R` : `${a}R${r}`, n = e[i]; return n || (e[i] = new t(a, r)) }; t._clearCache = function () { e = Object.create(null) }; return t }(); t.Ref = o; var c = function () { function e() { this.dict = Object.create(null) } e.prototype = { has: function (e) { return e.toString() in this.dict }, put: function (e) { this.dict[e.toString()] = !0 }, remove: function (e) { delete this.dict[e.toString()] } }; return e }(); t.RefSet = c; var l = function () { function e() { this.dict = Object.create(null) } e.prototype = { get: function (e) { return this.dict[e.toString()] }, has: function (e) { return e.toString() in this.dict }, put: function (e, t) { this.dict[e.toString()] = t }, putAlias: function (e, t) { this.dict[e.toString()] = this.get(t) }, forEach: function (e) { for (const t in this.dict) e(this.dict[t]) }, clear: function () { this.dict = Object.create(null) } }; return e }(); t.RefSetCache = l; function h(e, t) { return e instanceof i && (void 0 === t || e.name === t) } function u(e, t) { return e instanceof s && (void 0 === t || h(e.get("Type"), t)) } }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.NetworkPdfManager = t.LocalPdfManager = void 0; var r = a(2), i = a(6), n = a(7), s = a(8), o = a(11); class c { constructor() { this.constructor === c && (0, r.unreachable)("Cannot initialize BasePdfManager.") } get docId() { return this._docId } get password() { return this._password } get docBaseUrl() { let e = null; if (this._docBaseUrl) { const t = (0, r.createValidAbsoluteUrl)(this._docBaseUrl); t ? e = t.href : (0, r.warn)(`Invalid absolute docBaseUrl: "${this._docBaseUrl}".`) } return (0, r.shadow)(this, "docBaseUrl", e) } onLoadedStream() { (0, r.unreachable)("Abstract method `onLoadedStream` called") } ensureDoc(e, t) { return this.ensure(this.pdfDocument, e, t) } ensureXRef(e, t) { return this.ensure(this.pdfDocument.xref, e, t) } ensureCatalog(e, t) { return this.ensure(this.pdfDocument.catalog, e, t) } getPage(e) { return this.pdfDocument.getPage(e) } fontFallback(e, t) { return this.pdfDocument.fontFallback(e, t) } cleanup() { return this.pdfDocument.cleanup() } async ensure(e, t, a) { (0, r.unreachable)("Abstract method `ensure` called") } requestRange(e, t) { (0, r.unreachable)("Abstract method `requestRange` called") } requestLoadedStream() { (0, r.unreachable)("Abstract method `requestLoadedStream` called") } sendProgressiveData(e) { (0, r.unreachable)("Abstract method `sendProgressiveData` called") } updatePassword(e) { this._password = e } terminate(e) { (0, r.unreachable)("Abstract method `terminate` called") } } t.LocalPdfManager = class extends c { constructor(e, t, a, r, i) { super(); this._docId = e; this._password = a; this._docBaseUrl = i; this.evaluatorOptions = r; const n = new o.Stream(t); this.pdfDocument = new s.PDFDocument(this, n); this._loadedStreamPromise = Promise.resolve(n) } async ensure(e, t, a) { const r = e[t]; return "function" == typeof r ? r.apply(e, a) : r } requestRange(e, t) { return Promise.resolve() } requestLoadedStream() { } onLoadedStream() { return this._loadedStreamPromise } terminate(e) { } }; t.NetworkPdfManager = class extends c { constructor(e, t, a, r, n) { super(); this._docId = e; this._password = a.password; this._docBaseUrl = n; this.msgHandler = a.msgHandler; this.evaluatorOptions = r; this.streamManager = new i.ChunkedStreamManager(t, { msgHandler: a.msgHandler, length: a.length, disableAutoFetch: a.disableAutoFetch, rangeChunkSize: a.rangeChunkSize }); this.pdfDocument = new s.PDFDocument(this, this.streamManager.getStream()) } async ensure(e, t, a) { try { const r = e[t]; return "function" == typeof r ? r.apply(e, a) : r } catch (r) { if (!(r instanceof n.MissingDataException)) throw r; await this.requestRange(r.begin, r.end); return this.ensure(e, t, a) } } requestRange(e, t) { return this.streamManager.requestRange(e, t) } requestLoadedStream() { this.streamManager.requestAllChunks() } sendProgressiveData(e) { this.streamManager.onReceiveData({ chunk: e }) } onLoadedStream() { return this.streamManager.onLoadedStream() } terminate(e) { this.streamManager.abort(e) } } }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.ChunkedStreamManager = t.ChunkedStream = void 0; var r = a(2), i = a(7); class n { constructor(e, t, a) { this.bytes = new Uint8Array(e); this.start = 0; this.pos = 0; this.end = e; this.chunkSize = t; this.loadedChunks = []; this.numChunksLoaded = 0; this.numChunks = Math.ceil(e / t); this.manager = a; this.progressiveDataLength = 0; this.lastSuccessfulEnsureByteChunk = -1 } getMissingChunks() { const e = []; for (let t = 0, a = this.numChunks; t < a; ++t)this.loadedChunks[t] || e.push(t); return e } getBaseStreams() { return [this] } allChunksLoaded() { return this.numChunksLoaded === this.numChunks } onReceiveData(e, t) { const a = this.chunkSize; if (e % a != 0) throw new Error(`Bad begin offset: ${e}`); const r = e + t.byteLength; if (r % a != 0 && r !== this.bytes.length) throw new Error(`Bad end offset: ${r}`); this.bytes.set(new Uint8Array(t), e); const i = Math.floor(e / a), n = Math.floor((r - 1) / a) + 1; for (let e = i; e < n; ++e)if (!this.loadedChunks[e]) { this.loadedChunks[e] = !0; ++this.numChunksLoaded } } onReceiveProgressiveData(e) { let t = this.progressiveDataLength; const a = Math.floor(t / this.chunkSize); this.bytes.set(new Uint8Array(e), t); t += e.byteLength; this.progressiveDataLength = t; const r = t >= this.end ? this.numChunks : Math.floor(t / this.chunkSize); for (let e = a; e < r; ++e)if (!this.loadedChunks[e]) { this.loadedChunks[e] = !0; ++this.numChunksLoaded } } ensureByte(e) { if (e < this.progressiveDataLength) return; const t = Math.floor(e / this.chunkSize); if (t !== this.lastSuccessfulEnsureByteChunk) { if (!this.loadedChunks[t]) throw new i.MissingDataException(e, e + 1); this.lastSuccessfulEnsureByteChunk = t } } ensureRange(e, t) { if (e >= t) return; if (t <= this.progressiveDataLength) return; const a = this.chunkSize, r = Math.floor(e / a), n = Math.floor((t - 1) / a) + 1; for (let a = r; a < n; ++a)if (!this.loadedChunks[a]) throw new i.MissingDataException(e, t) } nextEmptyChunk(e) { const t = this.numChunks; for (let a = 0; a < t; ++a) { const r = (e + a) % t; if (!this.loadedChunks[r]) return r } return null } hasChunk(e) { return !!this.loadedChunks[e] } get length() { return this.end - this.start } get isEmpty() { return 0 === this.length } getByte() { const e = this.pos; if (e >= this.end) return -1; e >= this.progressiveDataLength && this.ensureByte(e); return this.bytes[this.pos++] } getUint16() { const e = this.getByte(), t = this.getByte(); return -1 === e || -1 === t ? -1 : (e << 8) + t } getInt32() { return (this.getByte() << 24) + (this.getByte() << 16) + (this.getByte() << 8) + this.getByte() } getBytes(e, t = !1) { const a = this.bytes, r = this.pos, i = this.end; if (!e) { i > this.progressiveDataLength && this.ensureRange(r, i); const e = a.subarray(r, i); return t ? new Uint8ClampedArray(e) : e } let n = r + e; n > i && (n = i); n > this.progressiveDataLength && this.ensureRange(r, n); this.pos = n; const s = a.subarray(r, n); return t ? new Uint8ClampedArray(s) : s } peekByte() { const e = this.getByte(); -1 !== e && this.pos--; return e } peekBytes(e, t = !1) { const a = this.getBytes(e, t); this.pos -= a.length; return a } getByteRange(e, t) { e < 0 && (e = 0); t > this.end && (t = this.end); t > this.progressiveDataLength && this.ensureRange(e, t); return this.bytes.subarray(e, t) } skip(e) { e || (e = 1); this.pos += e } reset() { this.pos = this.start } moveStart() { this.start = this.pos } makeSubStream(e, t, a) { t ? e + t > this.progressiveDataLength && this.ensureRange(e, e + t) : e >= this.progressiveDataLength && this.ensureByte(e); function r() { } r.prototype = Object.create(this); r.prototype.getMissingChunks = function () { const e = this.chunkSize, t = Math.floor(this.start / e), a = Math.floor((this.end - 1) / e) + 1, r = []; for (let e = t; e < a; ++e)this.loadedChunks[e] || r.push(e); return r }; r.prototype.allChunksLoaded = function () { return this.numChunksLoaded === this.numChunks || 0 === this.getMissingChunks().length }; const i = new r; i.pos = i.start = e; i.end = e + t || this.end; i.dict = a; return i } } t.ChunkedStream = n; t.ChunkedStreamManager = class { constructor(e, t) { this.length = t.length; this.chunkSize = t.rangeChunkSize; this.stream = new n(this.length, this.chunkSize, this); this.pdfNetworkStream = e; this.disableAutoFetch = t.disableAutoFetch; this.msgHandler = t.msgHandler; this.currRequestId = 0; this.chunksNeededByRequest = Object.create(null); this.requestsByChunk = Object.create(null); this.promisesByRequest = Object.create(null); this.progressiveDataLength = 0; this.aborted = !1; this._loadedStreamCapability = (0, r.createPromiseCapability)() } onLoadedStream() { return this._loadedStreamCapability.promise } sendRequest(e, t) { const a = this.pdfNetworkStream.getRangeReader(e, t); a.isStreamingSupported || (a.onProgress = this.onProgress.bind(this)); let i = [], n = 0; new Promise((e, t) => { const s = o => { try { if (!o.done) { const e = o.value; i.push(e); n += (0, r.arrayByteLength)(e); a.isStreamingSupported && this.onProgress({ loaded: n }); a.read().then(s, t); return } const c = (0, r.arraysToBytes)(i); i = null; e(c) } catch (e) { t(e) } }; a.read().then(s, t) }).then(t => { this.aborted || this.onReceiveData({ chunk: t, begin: e }) }) } requestAllChunks() { const e = this.stream.getMissingChunks(); this._requestChunks(e); return this._loadedStreamCapability.promise } _requestChunks(e) { const t = this.currRequestId++, a = Object.create(null); this.chunksNeededByRequest[t] = a; for (const t of e) this.stream.hasChunk(t) || (a[t] = !0); if ((0, r.isEmptyObj)(a)) return Promise.resolve(); const i = (0, r.createPromiseCapability)(); this.promisesByRequest[t] = i; const n = []; for (let e in a) { e |= 0; if (!(e in this.requestsByChunk)) { this.requestsByChunk[e] = []; n.push(e) } this.requestsByChunk[e].push(t) } if (!n.length) return i.promise; const s = this.groupChunks(n); for (const e of s) { const t = e.beginChunk * this.chunkSize, a = Math.min(e.endChunk * this.chunkSize, this.length); this.sendRequest(t, a) } return i.promise } getStream() { return this.stream } requestRange(e, t) { t = Math.min(t, this.length); const a = this.getBeginChunk(e), r = this.getEndChunk(t), i = []; for (let e = a; e < r; ++e)i.push(e); return this._requestChunks(i) } requestRanges(e = []) { const t = []; for (const a of e) { const e = this.getBeginChunk(a.begin), r = this.getEndChunk(a.end); for (let a = e; a < r; ++a)t.includes(a) || t.push(a) } t.sort((function (e, t) { return e - t })); return this._requestChunks(t) } groupChunks(e) { const t = []; let a = -1, r = -1; for (let i = 0, n = e.length; i < n; ++i) { const n = e[i]; a < 0 && (a = n); if (r >= 0 && r + 1 !== n) { t.push({ beginChunk: a, endChunk: r + 1 }); a = n } i + 1 === e.length && t.push({ beginChunk: a, endChunk: n + 1 }); r = n } return t } onProgress(e) { this.msgHandler.send("DocProgress", { loaded: this.stream.numChunksLoaded * this.chunkSize + e.loaded, total: this.length }) } onReceiveData(e) { const t = e.chunk, a = void 0 === e.begin, i = a ? this.progressiveDataLength : e.begin, n = i + t.byteLength, s = Math.floor(i / this.chunkSize), o = n < this.length ? Math.floor(n / this.chunkSize) : Math.ceil(n / this.chunkSize); if (a) { this.stream.onReceiveProgressiveData(t); this.progressiveDataLength = n } else this.stream.onReceiveData(i, t); this.stream.allChunksLoaded() && this._loadedStreamCapability.resolve(this.stream); const c = []; for (let e = s; e < o; ++e) { const t = this.requestsByChunk[e] || []; delete this.requestsByChunk[e]; for (const a of t) { const t = this.chunksNeededByRequest[a]; e in t && delete t[e]; (0, r.isEmptyObj)(t) && c.push(a) } } if (!this.disableAutoFetch && (0, r.isEmptyObj)(this.requestsByChunk)) { let e; if (1 === this.stream.numChunksLoaded) { const t = this.stream.numChunks - 1; this.stream.hasChunk(t) || (e = t) } else e = this.stream.nextEmptyChunk(o); Number.isInteger(e) && this._requestChunks([e]) } for (const e of c) { const t = this.promisesByRequest[e]; delete this.promisesByRequest[e]; t.resolve() } this.msgHandler.send("DocProgress", { loaded: this.stream.numChunksLoaded * this.chunkSize, total: this.length }) } onError(e) { this._loadedStreamCapability.reject(e) } getBeginChunk(e) { return Math.floor(e / this.chunkSize) } getEndChunk(e) { return Math.floor((e - 1) / this.chunkSize) + 1 } abort(e) { this.aborted = !0; this.pdfNetworkStream && this.pdfNetworkStream.cancelAllRequests(e); for (const t in this.promisesByRequest) this.promisesByRequest[t].reject(e) } } }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.getLookupTableFactory = function (e) { let t; return function () { if (e) { t = Object.create(null); e(t); e = null } return t } }; t.getInheritableProperty = function ({ dict: e, key: t, getArray: a = !1, stopWhenFound: i = !0 }) { let n, s = 0; for (; e;) { const o = a ? e.getArray(t) : e.get(t); if (void 0 !== o) { if (i) return o; n || (n = []); n.push(o) } if (++s > 100) { (0, r.warn)(`getInheritableProperty: maximum loop count exceeded for "${t}"`); break } e = e.get("Parent") } return n }; t.toRomanNumerals = function (e, t = !1) { (0, r.assert)(Number.isInteger(e) && e > 0, "The number should be a positive integer."); const a = []; let i; for (; e >= 1e3;) { e -= 1e3; a.push("M") } i = e / 100 | 0; e %= 100; a.push(o[i]); i = e / 10 | 0; e %= 10; a.push(o[10 + i]); a.push(o[20 + e]); const n = a.join(""); return t ? n.toLowerCase() : n }; t.log2 = function (e) { if (e <= 0) return 0; return Math.ceil(Math.log2(e)) }; t.readInt8 = function (e, t) { return e[t] << 24 >> 24 }; t.readUint16 = function (e, t) { return e[t] << 8 | e[t + 1] }; t.readUint32 = function (e, t) { return (e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3]) >>> 0 }; t.isWhiteSpace = function (e) { return 32 === e || 9 === e || 13 === e || 10 === e }; t.XRefParseException = t.XRefEntryException = t.MissingDataException = void 0; var r = a(2); class i extends r.BaseException { constructor(e, t) { super(`Missing data [${e}, ${t})`); this.begin = e; this.end = t } } t.MissingDataException = i; class n extends r.BaseException { } t.XRefEntryException = n; class s extends r.BaseException { } t.XRefParseException = s; const o = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"] }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.PDFDocument = t.Page = void 0; var r = a(2), i = a(9), n = a(4), s = a(7), o = a(11), c = a(23), l = a(21), h = a(10), u = a(24), d = a(25), f = a(39); const g = [0, 0, 612, 792]; function m(e, t) { return "display" === t && e.viewable || "print" === t && e.printable } class p { constructor({ pdfManager: e, xref: t, pageIndex: a, pageDict: r, ref: i, fontCache: n, builtInCMapCache: s, pdfFunctionFactory: o }) { this.pdfManager = e; this.pageIndex = a; this.pageDict = r; this.xref = t; this.ref = i; this.fontCache = n; this.builtInCMapCache = s; this.pdfFunctionFactory = o; this.evaluatorOptions = e.evaluatorOptions; this.resourcesPromise = null; const c = { obj: 0 }; this.idFactory = { createObjId: () => `p${a}_${++c.obj}`, getDocId: () => `g_${e.docId}` } } _getInheritableProperty(e, t = !1) { const a = (0, s.getInheritableProperty)({ dict: this.pageDict, key: e, getArray: t, stopWhenFound: !1 }); return Array.isArray(a) ? 1 !== a.length && (0, n.isDict)(a[0]) ? n.Dict.merge(this.xref, a) : a[0] : a } get content() { return this.pageDict.get("Contents") } get resources() { return (0, r.shadow)(this, "resources", this._getInheritableProperty("Resources") || n.Dict.empty) } _getBoundingBox(e) { const t = this._getInheritableProperty(e, !0); if (Array.isArray(t) && 4 === t.length) { if (t[2] - t[0] != 0 && t[3] - t[1] != 0) return t; (0, r.warn)(`Empty /${e} entry.`) } return null } get mediaBox() { return (0, r.shadow)(this, "mediaBox", this._getBoundingBox("MediaBox") || g) } get cropBox() { return (0, r.shadow)(this, "cropBox", this._getBoundingBox("CropBox") || this.mediaBox) } get userUnit() { let e = this.pageDict.get("UserUnit"); (!(0, r.isNum)(e) || e <= 0) && (e = 1); return (0, r.shadow)(this, "userUnit", e) } get view() { const { cropBox: e, mediaBox: t } = this; let a; if (e === t || (0, r.isArrayEqual)(e, t)) a = t; else { const i = r.Util.intersect(e, t); i && i[2] - i[0] != 0 && i[3] - i[1] != 0 ? a = i : (0, r.warn)("Empty /CropBox and /MediaBox intersection.") } return (0, r.shadow)(this, "view", a || t) } get rotate() { let e = this._getInheritableProperty("Rotate") || 0; e % 90 != 0 ? e = 0 : e >= 360 ? e %= 360 : e < 0 && (e = (e % 360 + 360) % 360); return (0, r.shadow)(this, "rotate", e) } getContentStream() { const e = this.content; let t; if (Array.isArray(e)) { const a = this.xref, r = []; for (const t of e) r.push(a.fetchIfRef(t)); t = new o.StreamsSequenceStream(r) } else t = (0, n.isStream)(e) ? e : new o.NullStream; return t } loadResources(e) { this.resourcesPromise || (this.resourcesPromise = this.pdfManager.ensure(this, "resources")); return this.resourcesPromise.then(() => new i.ObjectLoader(this.resources, e, this.xref).load()) } getOperatorList({ handler: e, sink: t, task: a, intent: i, renderInteractiveForms: n }) { const s = this.pdfManager.ensure(this, "getContentStream"), o = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]), c = new d.PartialEvaluator({ xref: this.xref, handler: e, pageIndex: this.pageIndex, idFactory: this.idFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, options: this.evaluatorOptions, pdfFunctionFactory: this.pdfFunctionFactory }), l = Promise.all([s, o]).then(([r]) => { const n = new u.OperatorList(i, t, this.pageIndex); e.send("StartRenderPage", { transparency: c.hasBlendModes(this.resources), pageIndex: this.pageIndex, intent: i }); return c.getOperatorList({ stream: r, task: a, resources: this.resources, operatorList: n }).then((function () { return n })) }); return Promise.all([l, this._parsedAnnotations]).then((function ([e, t]) { if (0 === t.length) { e.flush(!0); return { length: e.totalLength } } const s = []; for (const e of t) m(e, i) && s.push(e.getOperatorList(c, a, n)); return Promise.all(s).then((function (t) { e.addOp(r.OPS.beginAnnotations, []); for (const a of t) e.addOpList(a); e.addOp(r.OPS.endAnnotations, []); e.flush(!0); return { length: e.totalLength } })) })) } extractTextContent({ handler: e, task: t, normalizeWhitespace: a, sink: r, combineTextItems: i }) { const n = this.pdfManager.ensure(this, "getContentStream"), s = this.loadResources(["ExtGState", "XObject", "Font"]); return Promise.all([n, s]).then(([n]) => new d.PartialEvaluator({ xref: this.xref, handler: e, pageIndex: this.pageIndex, idFactory: this.idFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, options: this.evaluatorOptions, pdfFunctionFactory: this.pdfFunctionFactory }).getTextContent({ stream: n, task: t, resources: this.resources, normalizeWhitespace: a, combineTextItems: i, sink: r })) } getAnnotationsData(e) { return this._parsedAnnotations.then((function (t) { const a = []; for (let r = 0, i = t.length; r < i; r++)e && !m(t[r], e) || a.push(t[r].data); return a })) } get annotations() { return (0, r.shadow)(this, "annotations", this._getInheritableProperty("Annots") || []) } get _parsedAnnotations() { const e = this.pdfManager.ensure(this, "annotations").then(() => { const e = this.annotations, t = []; for (let a = 0, r = e.length; a < r; a++)t.push(c.AnnotationFactory.create(this.xref, e[a], this.pdfManager, this.idFactory)); return Promise.all(t).then((function (e) { return e.filter((function (e) { return !!e })) }), (function (e) { (0, r.warn)(`_parsedAnnotations: "${e}".`); return [] })) }); return (0, r.shadow)(this, "_parsedAnnotations", e) } } t.Page = p; const b = new Uint8Array([37, 80, 68, 70, 45]), y = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]), v = new Uint8Array([101, 110, 100, 111, 98, 106]), w = /^[1-9]\.[0-9]$/; function k(e, t, a = 1024, r = !1) { const i = t.length, n = e.peekBytes(a), s = n.length - i; if (s <= 0) return !1; if (r) { const a = i - 1; let r = n.length - 1; for (; r >= a;) { let s = 0; for (; s < i && n[r - s] === t[a - s];)s++; if (s >= i) { e.pos += r - a; return !0 } r-- } } else { let a = 0; for (; a <= s;) { let r = 0; for (; r < i && n[a + r] === t[r];)r++; if (r >= i) { e.pos += a; return !0 } a++ } } return !1 } t.PDFDocument = class { constructor(e, t) { let a; if ((0, n.isStream)(t)) a = t; else { if (!(0, r.isArrayBuffer)(t)) throw new Error("PDFDocument: Unknown argument type"); a = new o.Stream(t) } if (a.length <= 0) throw new r.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes."); this.pdfManager = e; this.stream = a; this.xref = new i.XRef(a, e); this.pdfFunctionFactory = new f.PDFFunctionFactory({ xref: this.xref, isEvalSupported: e.evaluatorOptions.isEvalSupported }); this._pagePromises = [] } parse(e) { this.setup(e); const t = this.catalog.catDict.get("Version"); (0, n.isName)(t) && (this.pdfFormatVersion = t.name); try { this.acroForm = this.catalog.catDict.get("AcroForm"); if (this.acroForm) { this.xfa = this.acroForm.get("XFA"); const e = this.acroForm.get("Fields"); Array.isArray(e) && 0 !== e.length || this.xfa || (this.acroForm = null) } } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, r.info)("Cannot fetch AcroForm entry; assuming no AcroForms are present"); this.acroForm = null } try { const e = this.catalog.catDict.get("Collection"); (0, n.isDict)(e) && e.getKeys().length > 0 && (this.collection = e) } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, r.info)("Cannot fetch Collection dictionary.") } } get linearization() { let e = null; try { e = h.Linearization.create(this.stream) } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, r.info)(e) } return (0, r.shadow)(this, "linearization", e) } get startXRef() { const e = this.stream; let t = 0; if (this.linearization) { e.reset(); k(e, v) && (t = e.pos + 6 - e.start) } else { const a = 1024, r = y.length; let i = !1, n = e.end; for (; !i && n > 0;) { n -= a - r; n < 0 && (n = 0); e.pos = n; i = k(e, y, a, !0) } if (i) { e.skip(9); let a; do { a = e.getByte() } while ((0, s.isWhiteSpace)(a)); let r = ""; for (; a >= 32 && a <= 57;) { r += String.fromCharCode(a); a = e.getByte() } t = parseInt(r, 10); isNaN(t) && (t = 0) } } return (0, r.shadow)(this, "startXRef", t) } checkHeader() { const e = this.stream; e.reset(); if (!k(e, b)) return; e.moveStart(); let t, a = ""; for (; (t = e.getByte()) > 32 && !(a.length >= 12);)a += String.fromCharCode(t); this.pdfFormatVersion || (this.pdfFormatVersion = a.substring(5)) } parseStartXRef() { this.xref.setStartXRef(this.startXRef) } setup(e) { this.xref.parse(e); this.catalog = new i.Catalog(this.pdfManager, this.xref) } get numPages() { const e = this.linearization, t = e ? e.numPages : this.catalog.numPages; return (0, r.shadow)(this, "numPages", t) } get documentInfo() { const e = { Title: r.isString, Author: r.isString, Subject: r.isString, Keywords: r.isString, Creator: r.isString, Producer: r.isString, CreationDate: r.isString, ModDate: r.isString, Trapped: n.isName }; let t = this.pdfFormatVersion; if ("string" != typeof t || !w.test(t)) { (0, r.warn)(`Invalid PDF header version number: ${t}`); t = null } const a = { PDFFormatVersion: t, IsLinearized: !!this.linearization, IsAcroFormPresent: !!this.acroForm, IsXFAPresent: !!this.xfa, IsCollectionPresent: !!this.collection }; let i; try { i = this.xref.trailer.get("Info") } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, r.info)("The document information dictionary is invalid.") } if ((0, n.isDict)(i)) for (const t of i.getKeys()) { const s = i.get(t); if (e[t]) e[t](s) ? a[t] = "string" != typeof s ? s : (0, r.stringToPDFString)(s) : (0, r.info)(`Bad value in document info for "${t}".`); else if ("string" == typeof t) { let e; if ((0, r.isString)(s)) e = (0, r.stringToPDFString)(s); else { if (!((0, n.isName)(s) || (0, r.isNum)(s) || (0, r.isBool)(s))) { (0, r.info)(`Unsupported value in document info for (custom) "${t}".`); continue } e = s } a.Custom || (a.Custom = Object.create(null)); a.Custom[t] = e } } return (0, r.shadow)(this, "documentInfo", a) } get fingerprint() { let e; const t = this.xref.trailer.get("ID"); e = Array.isArray(t) && t[0] && (0, r.isString)(t[0]) && "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" !== t[0] ? (0, r.stringToBytes)(t[0]) : (0, l.calculateMD5)(this.stream.getByteRange(0, 1024), 0, 1024); const a = []; for (let t = 0, r = e.length; t < r; t++) { const r = e[t].toString(16); a.push(r.padStart(2, "0")) } return (0, r.shadow)(this, "fingerprint", a.join("")) } _getLinearizationPage(e) { const { catalog: t, linearization: a } = this; (0, r.assert)(a && a.pageFirst === e); const i = n.Ref.get(a.objectNumberFirst, 0); return this.xref.fetchAsync(i).then(e => { if ((0, n.isDict)(e, "Page") || (0, n.isDict)(e) && !e.has("Type") && e.has("Contents")) { i && !t.pageKidsCountCache.has(i) && t.pageKidsCountCache.put(i, 1); return [e, i] } throw new r.FormatError("The Linearization dictionary doesn't point to a valid Page dictionary.") }).catch(a => { (0, r.info)(a); return t.getPageDict(e) }) } getPage(e) { if (void 0 !== this._pagePromises[e]) return this._pagePromises[e]; const { catalog: t, linearization: a } = this, r = a && a.pageFirst === e ? this._getLinearizationPage(e) : t.getPageDict(e); return this._pagePromises[e] = r.then(([a, r]) => new p({ pdfManager: this.pdfManager, xref: this.xref, pageIndex: e, pageDict: a, ref: r, fontCache: t.fontCache, builtInCMapCache: t.builtInCMapCache, pdfFunctionFactory: this.pdfFunctionFactory })) } checkFirstPage() { return this.getPage(0).catch(async e => { if (e instanceof s.XRefEntryException) { this._pagePromises.length = 0; await this.cleanup(); throw new s.XRefParseException } }) } fontFallback(e, t) { return this.catalog.fontFallback(e, t) } async cleanup() { return this.catalog ? this.catalog.cleanup() : (0, n.clearPrimitiveCaches)() } } }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.FileSpec = t.XRef = t.ObjectLoader = t.Catalog = void 0; var r = a(2), i = a(4), n = a(10), s = a(7), o = a(21), c = a(22); function l(e) { return (0, i.isDict)(e) ? e.get("D") : e } class h { constructor(e, t) { this.pdfManager = e; this.xref = t; this.catDict = t.getCatalogObj(); if (!(0, i.isDict)(this.catDict)) throw new r.FormatError("Catalog object is not a dictionary."); this.fontCache = new i.RefSetCache; this.builtInCMapCache = new Map; this.pageKidsCountCache = new i.RefSetCache } get metadata() { const e = this.catDict.getRaw("Metadata"); if (!(0, i.isRef)(e)) return (0, r.shadow)(this, "metadata", null); const t = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata), a = this.xref.fetch(e, t); let n; if (a && (0, i.isDict)(a.dict)) { const e = a.dict.get("Type"), t = a.dict.get("Subtype"); if ((0, i.isName)(e, "Metadata") && (0, i.isName)(t, "XML")) try { n = (0, r.stringToUTF8String)((0, r.bytesToString)(a.getBytes())) } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, r.info)("Skipping invalid metadata.") } } return (0, r.shadow)(this, "metadata", n) } get toplevelPagesDict() { const e = this.catDict.get("Pages"); if (!(0, i.isDict)(e)) throw new r.FormatError("Invalid top-level pages dictionary."); return (0, r.shadow)(this, "toplevelPagesDict", e) } get documentOutline() { let e = null; try { e = this._readDocumentOutline() } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, r.warn)("Unable to read document outline.") } return (0, r.shadow)(this, "documentOutline", e) } _readDocumentOutline() { let e = this.catDict.get("Outlines"); if (!(0, i.isDict)(e)) return null; e = e.getRaw("First"); if (!(0, i.isRef)(e)) return null; const t = { items: [] }, a = [{ obj: e, parent: t }], n = new i.RefSet; n.put(e); const s = this.xref, o = new Uint8ClampedArray(3); for (; a.length > 0;) { const t = a.shift(), l = s.fetchIfRef(t.obj); if (null === l) continue; if (!l.has("Title")) throw new r.FormatError("Invalid outline item encountered."); const u = { url: null, dest: null }; h.parseDestDictionary({ destDict: l, resultObj: u, docBaseUrl: this.pdfManager.docBaseUrl }); const d = l.get("Title"), f = l.get("F") || 0, g = l.getArray("C"), m = l.get("Count"); let p = o; !Array.isArray(g) || 3 !== g.length || 0 === g[0] && 0 === g[1] && 0 === g[2] || (p = c.ColorSpace.singletons.rgb.getRgb(g, 0)); const b = { dest: u.dest, url: u.url, unsafeUrl: u.unsafeUrl, newWindow: u.newWindow, title: (0, r.stringToPDFString)(d), color: p, count: Number.isInteger(m) ? m : void 0, bold: !!(2 & f), italic: !!(1 & f), items: [] }; t.parent.items.push(b); e = l.getRaw("First"); if ((0, i.isRef)(e) && !n.has(e)) { a.push({ obj: e, parent: b }); n.put(e) } e = l.getRaw("Next"); if ((0, i.isRef)(e) && !n.has(e)) { a.push({ obj: e, parent: t.parent }); n.put(e) } } return t.items.length > 0 ? t.items : null } get permissions() { let e = null; try { e = this._readPermissions() } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, r.warn)("Unable to read permissions.") } return (0, r.shadow)(this, "permissions", e) } _readPermissions() { const e = this.xref.trailer.get("Encrypt"); if (!(0, i.isDict)(e)) return null; let t = e.get("P"); if (!(0, r.isNum)(t)) return null; t += 2 ** 32; const a = []; for (const e in r.PermissionFlag) { const i = r.PermissionFlag[e]; t & i && a.push(i) } return a } get numPages() { const e = this.toplevelPagesDict.get("Count"); if (!Number.isInteger(e)) throw new r.FormatError("Page count in top-level pages dictionary is not an integer."); return (0, r.shadow)(this, "numPages", e) } get destinations() { const e = this._readDests(), t = Object.create(null); if (e instanceof f) { const a = e.getAll(); for (const e in a) t[e] = l(a[e]) } else e instanceof i.Dict && e.forEach((function (e, a) { a && (t[e] = l(a)) })); return (0, r.shadow)(this, "destinations", t) } getDestination(e) { const t = this._readDests(); return t instanceof f || t instanceof i.Dict ? l(t.get(e) || null) : null } _readDests() { const e = this.catDict.get("Names"); return e && e.has("Dests") ? new f(e.getRaw("Dests"), this.xref) : this.catDict.has("Dests") ? this.catDict.get("Dests") : void 0 } get pageLabels() { let e = null; try { e = this._readPageLabels() } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, r.warn)("Unable to read page labels.") } return (0, r.shadow)(this, "pageLabels", e) } _readPageLabels() { const e = this.catDict.getRaw("PageLabels"); if (!e) return null; const t = new Array(this.numPages); let a = null, n = ""; const o = new g(e, this.xref).getAll(); let c = "", l = 1; for (let e = 0, h = this.numPages; e < h; e++) { if (e in o) { const t = o[e]; if (!(0, i.isDict)(t)) throw new r.FormatError("PageLabel is not a dictionary."); if (t.has("Type") && !(0, i.isName)(t.get("Type"), "PageLabel")) throw new r.FormatError("Invalid type in PageLabel dictionary."); if (t.has("S")) { const e = t.get("S"); if (!(0, i.isName)(e)) throw new r.FormatError("Invalid style in PageLabel dictionary."); a = e.name } else a = null; if (t.has("P")) { const e = t.get("P"); if (!(0, r.isString)(e)) throw new r.FormatError("Invalid prefix in PageLabel dictionary."); n = (0, r.stringToPDFString)(e) } else n = ""; if (t.has("St")) { const e = t.get("St"); if (!(Number.isInteger(e) && e >= 1)) throw new r.FormatError("Invalid start in PageLabel dictionary."); l = e } else l = 1 } switch (a) { case "D": c = l; break; case "R": case "r": c = (0, s.toRomanNumerals)(l, "r" === a); break; case "A": case "a": const e = 26, t = 65, i = 97, n = "a" === a ? i : t, o = l - 1, h = String.fromCharCode(n + o % e), u = []; for (let t = 0, a = o / e | 0; t <= a; t++)u.push(h); c = u.join(""); break; default: if (a) throw new r.FormatError(`Invalid style "${a}" in PageLabel dictionary.`); c = "" }t[e] = n + c; l++ } return t } get pageLayout() { const e = this.catDict.get("PageLayout"); let t = ""; if ((0, i.isName)(e)) switch (e.name) { case "SinglePage": case "OneColumn": case "TwoColumnLeft": case "TwoColumnRight": case "TwoPageLeft": case "TwoPageRight": t = e.name }return (0, r.shadow)(this, "pageLayout", t) } get pageMode() { const e = this.catDict.get("PageMode"); let t = "UseNone"; if ((0, i.isName)(e)) switch (e.name) { case "UseNone": case "UseOutlines": case "UseThumbs": case "FullScreen": case "UseOC": case "UseAttachments": t = e.name }return (0, r.shadow)(this, "pageMode", t) } get viewerPreferences() { const e = { HideToolbar: r.isBool, HideMenubar: r.isBool, HideWindowUI: r.isBool, FitWindow: r.isBool, CenterWindow: r.isBool, DisplayDocTitle: r.isBool, NonFullScreenPageMode: i.isName, Direction: i.isName, ViewArea: i.isName, ViewClip: i.isName, PrintArea: i.isName, PrintClip: i.isName, PrintScaling: i.isName, Duplex: i.isName, PickTrayByPDFSize: r.isBool, PrintPageRange: Array.isArray, NumCopies: Number.isInteger }, t = this.catDict.get("ViewerPreferences"), a = Object.create(null); if ((0, i.isDict)(t)) for (const i in e) { if (!t.has(i)) continue; const n = t.get(i); if (!e[i](n)) { (0, r.info)(`Bad value in ViewerPreferences for "${i}".`); continue } let s; switch (i) { case "NonFullScreenPageMode": switch (n.name) { case "UseNone": case "UseOutlines": case "UseThumbs": case "UseOC": s = n.name; break; default: s = "UseNone" }break; case "Direction": switch (n.name) { case "L2R": case "R2L": s = n.name; break; default: s = "L2R" }break; case "ViewArea": case "ViewClip": case "PrintArea": case "PrintClip": switch (n.name) { case "MediaBox": case "CropBox": case "BleedBox": case "TrimBox": case "ArtBox": s = n.name; break; default: s = "CropBox" }break; case "PrintScaling": switch (n.name) { case "None": case "AppDefault": s = n.name; break; default: s = "AppDefault" }break; case "Duplex": switch (n.name) { case "Simplex": case "DuplexFlipShortEdge": case "DuplexFlipLongEdge": s = n.name; break; default: s = "None" }break; case "PrintPageRange": if (n.length % 2 != 0) break; n.every((e, t, a) => Number.isInteger(e) && e > 0 && (0 === t || e >= a[t - 1]) && e <= this.numPages) && (s = n); break; case "NumCopies": n > 0 && (s = n); break; default: (0, r.assert)("boolean" == typeof n); s = n }void 0 !== s ? a[i] = s : (0, r.info)(`Bad value in ViewerPreferences for "${i}".`) } return (0, r.shadow)(this, "viewerPreferences", a) } get openAction() { const e = this.catDict.get("OpenAction"); let t = null; if ((0, i.isDict)(e)) { const a = new i.Dict(this.xref); a.set("A", e); const r = { url: null, dest: null, action: null }; h.parseDestDictionary({ destDict: a, resultObj: r }); if (Array.isArray(r.dest)) { t || (t = Object.create(null)); t.dest = r.dest } else if (r.action) { t || (t = Object.create(null)); t.action = r.action } } else if (Array.isArray(e)) { t || (t = Object.create(null)); t.dest = e } return (0, r.shadow)(this, "openAction", t) } get attachments() { const e = this.catDict.get("Names"); let t = null; if (e && e.has("EmbeddedFiles")) { const a = new f(e.getRaw("EmbeddedFiles"), this.xref).getAll(); for (const e in a) { const i = new m(a[e], this.xref); t || (t = Object.create(null)); t[(0, r.stringToPDFString)(e)] = i.serializable } } return (0, r.shadow)(this, "attachments", t) } get javaScript() { const e = this.catDict.get("Names"); let t = null; function a(e) { const a = e.get("S"); if (!(0, i.isName)(a, "JavaScript")) return; let n = e.get("JS"); if ((0, i.isStream)(n)) n = (0, r.bytesToString)(n.getBytes()); else if (!(0, r.isString)(n)) return; t || (t = []); t.push((0, r.stringToPDFString)(n)) } if (e && e.has("JavaScript")) { const t = new f(e.getRaw("JavaScript"), this.xref).getAll(); for (const e in t) { const r = t[e]; (0, i.isDict)(r) && a(r) } } const n = this.catDict.get("OpenAction"); (0, i.isDict)(n) && (0, i.isName)(n.get("S"), "JavaScript") && a(n); return (0, r.shadow)(this, "javaScript", t) } fontFallback(e, t) { const a = []; this.fontCache.forEach((function (e) { a.push(e) })); return Promise.all(a).then(a => { for (const r of a) if (r.loadedName === e) { r.fallback(t); return } }) } cleanup() { (0, i.clearPrimitiveCaches)(); this.pageKidsCountCache.clear(); const e = []; this.fontCache.forEach((function (t) { e.push(t) })); return Promise.all(e).then(e => { for (const { dict: t } of e) delete t.translated; this.fontCache.clear(); this.builtInCMapCache.clear() }) } getPageDict(e) { const t = (0, r.createPromiseCapability)(), a = [this.catDict.getRaw("Pages")], n = new i.RefSet, s = this.xref, o = this.pageKidsCountCache; let c, l = 0; !function h() { for (; a.length;) { const u = a.pop(); if ((0, i.isRef)(u)) { c = o.get(u); if (c > 0 && l + c < e) { l += c; continue } if (n.has(u)) { t.reject(new r.FormatError("Pages tree contains circular reference.")); return } n.put(u); s.fetchAsync(u).then((function (r) { if ((0, i.isDict)(r, "Page") || (0, i.isDict)(r) && !r.has("Kids")) if (e === l) { u && !o.has(u) && o.put(u, 1); t.resolve([r, u]) } else { l++; h() } else { a.push(r); h() } }), t.reject); return } if (!(0, i.isDict)(u)) { t.reject(new r.FormatError("Page dictionary kid reference points to wrong type of object.")); return } c = u.get("Count"); if (Number.isInteger(c) && c >= 0) { const t = u.objId; t && !o.has(t) && o.put(t, c); if (l + c <= e) { l += c; continue } } const d = u.get("Kids"); if (!Array.isArray(d)) { if ((0, i.isName)(u.get("Type"), "Page") || !u.has("Type") && u.has("Contents")) { if (l === e) { t.resolve([u, null]); return } l++; continue } t.reject(new r.FormatError("Page dictionary kids object is not an array.")); return } for (let e = d.length - 1; e >= 0; e--)a.push(d[e]) } t.reject(new Error(`Page index ${e} not found.`)) }(); return t.promise } getPageIndex(e) { const t = this.xref; let a = 0; return function n(s) { return function (a) { let n, s = 0; return t.fetchAsync(a).then((function (t) { if ((0, i.isRefsEqual)(a, e) && !(0, i.isDict)(t, "Page") && (!(0, i.isDict)(t) || t.has("Type") || !t.has("Contents"))) throw new r.FormatError("The reference does not point to a /Page dictionary."); if (!t) return null; if (!(0, i.isDict)(t)) throw new r.FormatError("Node must be a dictionary."); n = t.getRaw("Parent"); return t.getAsync("Parent") })).then((function (e) { if (!e) return null; if (!(0, i.isDict)(e)) throw new r.FormatError("Parent must be a dictionary."); return e.getAsync("Kids") })).then((function (e) { if (!e) return null; const o = []; let c = !1; for (let n = 0, l = e.length; n < l; n++) { const l = e[n]; if (!(0, i.isRef)(l)) throw new r.FormatError("Kid must be a reference."); if ((0, i.isRefsEqual)(l, a)) { c = !0; break } o.push(t.fetchAsync(l).then((function (e) { if (!(0, i.isDict)(e)) throw new r.FormatError("Kid node must be a dictionary."); e.has("Count") ? s += e.get("Count") : s++ }))) } if (!c) throw new r.FormatError("Kid reference not found in parent's kids."); return Promise.all(o).then((function () { return [s, n] })) })) }(s).then((function (e) { if (!e) return a; const [t, r] = e; a += t; return n(r) })) }(e) } static parseDestDictionary(e) { const t = e.destDict; if (!(0, i.isDict)(t)) { (0, r.warn)("parseDestDictionary: `destDict` must be a dictionary."); return } const a = e.resultObj; if ("object" != typeof a) { (0, r.warn)("parseDestDictionary: `resultObj` must be an object."); return } const n = e.docBaseUrl || null; let s, o, c = t.get("A"); !(0, i.isDict)(c) && t.has("Dest") && (c = t.get("Dest")); if ((0, i.isDict)(c)) { const e = c.get("S"); if (!(0, i.isName)(e)) { (0, r.warn)("parseDestDictionary: Invalid type in Action dictionary."); return } const t = e.name; switch (t) { case "URI": s = c.get("URI"); (0, i.isName)(s) ? s = "/" + s.name : (0, r.isString)(s) && (s = function (e) { return e.startsWith("www.") ? `http://${e}` : e }(s)); break; case "GoTo": o = c.get("D"); break; case "Launch": case "GoToR": const e = c.get("F"); (0, i.isDict)(e) ? s = e.get("F") || null : (0, r.isString)(e) && (s = e); let n = c.get("D"); if (n) { (0, i.isName)(n) && (n = n.name); if ((0, r.isString)(s)) { const e = s.split("#")[0]; (0, r.isString)(n) ? s = e + "#" + n : Array.isArray(n) && (s = e + "#" + JSON.stringify(n)) } } const l = c.get("NewWindow"); (0, r.isBool)(l) && (a.newWindow = l); break; case "Named": const h = c.get("N"); (0, i.isName)(h) && (a.action = h.name); break; case "JavaScript": const u = c.get("JS"); let d; (0, i.isStream)(u) ? d = (0, r.bytesToString)(u.getBytes()) : (0, r.isString)(u) && (d = u); if (d) { const e = new RegExp("^\\s*(" + ["app.launchURL", "window.open"].join("|").split(".").join("\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i").exec((0, r.stringToPDFString)(d)); if (e && e[2]) { s = e[2]; "true" === e[3] && "app.launchURL" === e[1] && (a.newWindow = !0); break } } default: (0, r.warn)(`parseDestDictionary: unsupported action type "${t}".`) } } else t.has("Dest") && (o = t.get("Dest")); if ((0, r.isString)(s)) { s = function (e) { try { return (0, r.stringToUTF8String)(e) } catch (t) { return e } }(s); const e = (0, r.createValidAbsoluteUrl)(s, n); e && (a.url = e.href); a.unsafeUrl = s } if (o) { (0, i.isName)(o) && (o = o.name); ((0, r.isString)(o) || Array.isArray(o)) && (a.dest = o) } } } t.Catalog = h; var u = function () { function e(e, t) { this.stream = e; this.pdfManager = t; this.entries = []; this.xrefstms = Object.create(null); this._cacheMap = new Map; this.stats = { streamTypes: Object.create(null), fontTypes: Object.create(null) } } e.prototype = { setStartXRef: function (e) { this.startXRefQueue = [e] }, parse: function (e) { var t; if (e) { (0, r.warn)("Indexing all PDF objects"); t = this.indexObjects() } else t = this.readXRef(); t.assignXref(this); this.trailer = t; let a, n; try { a = t.get("Encrypt") } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, r.warn)(`XRef.parse - Invalid "Encrypt" reference: "${e}".`) } if ((0, i.isDict)(a)) { var c = t.get("ID"), l = c && c.length ? c[0] : ""; a.suppressEncryption = !0; this.encrypt = new o.CipherTransformFactory(a, l, this.pdfManager.password) } try { n = t.get("Root") } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, r.warn)(`XRef.parse - Invalid "Root" reference: "${e}".`) } if (!(0, i.isDict)(n) || !n.has("Pages")) { if (!e) throw new s.XRefParseException; throw new r.FormatError("Invalid root reference") } this.root = n }, processXRefTable: function (e) { "tableState" in this || (this.tableState = { entryNum: 0, streamPos: e.lexer.stream.pos, parserBuf1: e.buf1, parserBuf2: e.buf2 }); var t = this.readXRefTable(e); if (!(0, i.isCmd)(t, "trailer")) throw new r.FormatError("Invalid XRef table: could not find trailer dictionary"); var a = e.getObj(); !(0, i.isDict)(a) && a.dict && (a = a.dict); if (!(0, i.isDict)(a)) throw new r.FormatError("Invalid XRef table: could not parse trailer dictionary"); delete this.tableState; return a }, readXRefTable: function (e) { var t, a = e.lexer.stream, n = this.tableState; a.pos = n.streamPos; e.buf1 = n.parserBuf1; e.buf2 = n.parserBuf2; for (; ;) { if (!("firstEntryNum" in n) || !("entryCount" in n)) { if ((0, i.isCmd)(t = e.getObj(), "trailer")) break; n.firstEntryNum = t; n.entryCount = e.getObj() } var s = n.firstEntryNum, o = n.entryCount; if (!Number.isInteger(s) || !Number.isInteger(o)) throw new r.FormatError("Invalid XRef table: wrong types in subsection header"); for (var c = n.entryNum; c < o; c++) { n.streamPos = a.pos; n.entryNum = c; n.parserBuf1 = e.buf1; n.parserBuf2 = e.buf2; var l = {}; l.offset = e.getObj(); l.gen = e.getObj(); var h = e.getObj(); if (h instanceof i.Cmd) switch (h.cmd) { case "f": l.free = !0; break; case "n": l.uncompressed = !0 }if (!Number.isInteger(l.offset) || !Number.isInteger(l.gen) || !l.free && !l.uncompressed) throw new r.FormatError(`Invalid entry in XRef subsection: ${s}, ${o}`); 0 === c && l.free && 1 === s && (s = 0); this.entries[c + s] || (this.entries[c + s] = l) } n.entryNum = 0; n.streamPos = a.pos; n.parserBuf1 = e.buf1; n.parserBuf2 = e.buf2; delete n.firstEntryNum; delete n.entryCount } if (this.entries[0] && !this.entries[0].free) throw new r.FormatError("Invalid XRef table: unexpected first object"); return t }, processXRefStream: function (e) { if (!("streamState" in this)) { var t = e.dict, a = t.get("W"), r = t.get("Index"); r || (r = [0, t.get("Size")]); this.streamState = { entryRanges: r, byteWidths: a, entryNum: 0, streamPos: e.pos } } this.readXRefStream(e); delete this.streamState; return e.dict }, readXRefStream: function (e) { var t, a, i = this.streamState; e.pos = i.streamPos; for (var n = i.byteWidths, s = n[0], o = n[1], c = n[2], l = i.entryRanges; l.length > 0;) { var h = l[0], u = l[1]; if (!Number.isInteger(h) || !Number.isInteger(u)) throw new r.FormatError(`Invalid XRef range fields: ${h}, ${u}`); if (!Number.isInteger(s) || !Number.isInteger(o) || !Number.isInteger(c)) throw new r.FormatError(`Invalid XRef entry fields length: ${h}, ${u}`); for (t = i.entryNum; t < u; ++t) { i.entryNum = t; i.streamPos = e.pos; var d = 0, f = 0, g = 0; for (a = 0; a < s; ++a)d = d << 8 | e.getByte(); 0 === s && (d = 1); for (a = 0; a < o; ++a)f = f << 8 | e.getByte(); for (a = 0; a < c; ++a)g = g << 8 | e.getByte(); var m = {}; m.offset = f; m.gen = g; switch (d) { case 0: m.free = !0; break; case 1: m.uncompressed = !0; break; case 2: break; default: throw new r.FormatError(`Invalid XRef entry type: ${d}`) }this.entries[h + t] || (this.entries[h + t] = m) } i.entryNum = 0; i.streamPos = e.pos; l.splice(0, 2) } }, indexObjects: function () { function e(e, t) { for (var a = "", r = e[t]; 10 !== r && 13 !== r && 60 !== r && !(++t >= e.length);) { a += String.fromCharCode(r); r = e[t] } return a } function t(e, t, a) { for (var r = a.length, i = e.length, n = 0; t < i;) { for (var s = 0; s < r && e[t + s] === a[s];)++s; if (s >= r) break; t++; n++ } return n } var a = /^(\d+)\s+(\d+)\s+obj\b/; const o = /\bendobj[\b\s]$/, c = /\s+(\d+\s+\d+\s+obj[\b\s<])$/; var l = new Uint8Array([116, 114, 97, 105, 108, 101, 114]), h = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]); const u = new Uint8Array([111, 98, 106]); var d = new Uint8Array([47, 88, 82, 101, 102]); this.entries.length = 0; var f = this.stream; f.pos = 0; for (var g, m, p = f.getBytes(), b = f.start, y = p.length, v = [], w = []; b < y;) { var k = p[b]; if (9 !== k && 10 !== k && 13 !== k && 32 !== k) if (37 !== k) { var S, C = e(p, b); if (C.startsWith("xref") && (4 === C.length || /\s/.test(C[4]))) { b += t(p, b, l); v.push(b); b += t(p, b, h) } else if (S = a.exec(C)) { const e = 0 | S[1], a = 0 | S[2]; this.entries[e] && this.entries[e].gen !== a || (this.entries[e] = { offset: b - f.start, gen: a, uncompressed: !0 }); let i, n = b + C.length; for (; n < p.length;) { const e = n + t(p, n, u) + 4; i = e - b; const a = Math.max(e - 25, n), s = (0, r.bytesToString)(p.subarray(a, e)); if (o.test(s)) break; { const e = c.exec(s); if (e && e[1]) { (0, r.warn)('indexObjects: Found new "obj" inside of another "obj", caused by missing "endobj" -- trying to recover.'); i -= e[1].length; break } } n = e } const s = p.subarray(b, b + i); var x = t(s, 0, d); if (x < i && s[x + 5] < 64) { w.push(b - f.start); this.xrefstms[b - f.start] = 1 } b += i } else if (C.startsWith("trailer") && (7 === C.length || /\s/.test(C[7]))) { v.push(b); b += t(p, b, h) } else b += C.length + 1 } else do { if (++b >= y) break; k = p[b] } while (10 !== k && 13 !== k); else ++b } for (g = 0, m = w.length; g < m; ++g) { this.startXRefQueue.push(w[g]); this.readXRef(!0) } let A; for (g = 0, m = v.length; g < m; ++g) { f.pos = v[g]; const e = new n.Parser({ lexer: new n.Lexer(f), xref: this, allowStreams: !0, recoveryMode: !0 }); var I = e.getObj(); if (!(0, i.isCmd)(I, "trailer")) continue; const t = e.getObj(); if (!(0, i.isDict)(t)) continue; let a; try { a = t.get("Root") } catch (e) { if (e instanceof s.MissingDataException) throw e; continue } if ((0, i.isDict)(a) && a.has("Pages")) { if (t.has("ID")) return t; A = t } } if (A) return A; throw new r.InvalidPDFException("Invalid PDF structure.") }, readXRef: function (e) { var t = this.stream; const a = Object.create(null); try { for (; this.startXRefQueue.length;) { var o = this.startXRefQueue[0]; if (a[o]) { (0, r.warn)("readXRef - skipping XRef table since it was already parsed."); this.startXRefQueue.shift(); continue } a[o] = !0; t.pos = o + t.start; const e = new n.Parser({ lexer: new n.Lexer(t), xref: this, allowStreams: !0 }); var c, l = e.getObj(); if ((0, i.isCmd)(l, "xref")) { c = this.processXRefTable(e); this.topDict || (this.topDict = c); l = c.get("XRefStm"); if (Number.isInteger(l)) { var h = l; if (!(h in this.xrefstms)) { this.xrefstms[h] = 1; this.startXRefQueue.push(h) } } } else { if (!Number.isInteger(l)) throw new r.FormatError("Invalid XRef stream header"); if (!Number.isInteger(e.getObj()) || !(0, i.isCmd)(e.getObj(), "obj") || !(0, i.isStream)(l = e.getObj())) throw new r.FormatError("Invalid XRef stream"); c = this.processXRefStream(l); this.topDict || (this.topDict = c); if (!c) throw new r.FormatError("Failed to read XRef stream") } l = c.get("Prev"); Number.isInteger(l) ? this.startXRefQueue.push(l) : (0, i.isRef)(l) && this.startXRefQueue.push(l.num); this.startXRefQueue.shift() } return this.topDict } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, r.info)("(while reading XRef): " + e) } if (!e) throw new s.XRefParseException }, getEntry: function (e) { var t = this.entries[e]; return t && !t.free && t.offset ? t : null }, fetchIfRef: function (e, t) { return e instanceof i.Ref ? this.fetch(e, t) : e }, fetch: function (e, t) { if (!(e instanceof i.Ref)) throw new Error("ref object is not a reference"); const a = e.num, r = this._cacheMap.get(a); if (void 0 !== r) { r instanceof i.Dict && !r.objId && (r.objId = e.toString()); return r } let n = this.getEntry(a); if (null === n) { this._cacheMap.set(a, n); return n } n = n.uncompressed ? this.fetchUncompressed(e, n, t) : this.fetchCompressed(e, n, t); (0, i.isDict)(n) ? n.objId = e.toString() : (0, i.isStream)(n) && (n.dict.objId = e.toString()); return n }, fetchUncompressed(e, t, a = !1) { var r = e.gen, o = e.num; if (t.gen !== r) throw new s.XRefEntryException(`Inconsistent generation in XRef: ${e}`); var c = this.stream.makeSubStream(t.offset + this.stream.start); const l = new n.Parser({ lexer: new n.Lexer(c), xref: this, allowStreams: !0 }); var h = l.getObj(), u = l.getObj(), d = l.getObj(); if (h !== o || u !== r || !(d instanceof i.Cmd)) throw new s.XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`); if ("obj" !== d.cmd) { if (d.cmd.startsWith("obj")) { o = parseInt(d.cmd.substring(3), 10); if (!Number.isNaN(o)) return o } throw new s.XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`) } t = this.encrypt && !a ? l.getObj(this.encrypt.createCipherTransform(o, r)) : l.getObj(); (0, i.isStream)(t) || this._cacheMap.set(o, t); return t }, fetchCompressed(e, t, a = !1) { const o = t.offset, c = this.fetch(i.Ref.get(o, 0)); if (!(0, i.isStream)(c)) throw new r.FormatError("bad ObjStm stream"); const l = c.dict.get("First"), h = c.dict.get("N"); if (!Number.isInteger(l) || !Number.isInteger(h)) throw new r.FormatError("invalid first and n parameters for ObjStm stream"); const u = new n.Parser({ lexer: new n.Lexer(c), xref: this, allowStreams: !0 }), d = new Array(h); for (let e = 0; e < h; ++e) { const t = u.getObj(); if (!Number.isInteger(t)) throw new r.FormatError(`invalid object number in the ObjStm stream: ${t}`); const a = u.getObj(); if (!Number.isInteger(a)) throw new r.FormatError(`invalid object offset in the ObjStm stream: ${a}`); d[e] = t } const f = new Array(h); for (let e = 0; e < h; ++e) { const t = u.getObj(); f[e] = t; u.buf1 instanceof i.Cmd && "endobj" === u.buf1.cmd && u.shift(); if ((0, i.isStream)(t)) continue; const a = d[e], r = this.entries[a]; r && r.offset === o && r.gen === e && this._cacheMap.set(a, t) } if (void 0 === (t = f[t.gen])) throw new s.XRefEntryException(`Bad (compressed) XRef entry: ${e}`); return t }, async fetchIfRefAsync(e, t) { return e instanceof i.Ref ? this.fetchAsync(e, t) : e }, async fetchAsync(e, t) { try { return this.fetch(e, t) } catch (a) { if (!(a instanceof s.MissingDataException)) throw a; await this.pdfManager.requestRange(a.begin, a.end); return this.fetchAsync(e, t) } }, getCatalogObj: function () { return this.root } }; return e }(); t.XRef = u; class d { constructor(e, t, a) { this.constructor === d && (0, r.unreachable)("Cannot initialize NameOrNumberTree."); this.root = e; this.xref = t; this._type = a } getAll() { const e = Object.create(null); if (!this.root) return e; const t = this.xref, a = new i.RefSet; a.put(this.root); const n = [this.root]; for (; n.length > 0;) { const s = t.fetchIfRef(n.shift()); if (!(0, i.isDict)(s)) continue; if (s.has("Kids")) { const e = s.get("Kids"); for (let t = 0, i = e.length; t < i; t++) { const i = e[t]; if (a.has(i)) throw new r.FormatError(`Duplicate entry in "${this._type}" tree.`); n.push(i); a.put(i) } continue } const o = s.get(this._type); if (Array.isArray(o)) for (let a = 0, r = o.length; a < r; a += 2)e[t.fetchIfRef(o[a])] = t.fetchIfRef(o[a + 1]) } return e } get(e) { if (!this.root) return null; const t = this.xref; let a = t.fetchIfRef(this.root), i = 0; for (; a.has("Kids");) { if (++i > 10) { (0, r.warn)(`Search depth limit reached for "${this._type}" tree.`); return null } const n = a.get("Kids"); if (!Array.isArray(n)) return null; let s = 0, o = n.length - 1; for (; s <= o;) { const r = s + o >> 1, i = t.fetchIfRef(n[r]).get("Limits"); if (e < t.fetchIfRef(i[0])) o = r - 1; else { if (!(e > t.fetchIfRef(i[1]))) { a = t.fetchIfRef(n[r]); break } s = r + 1 } } if (s > o) return null } const n = a.get(this._type); if (Array.isArray(n)) { let a = 0, i = n.length - 2; for (; a <= i;) { const r = a + i >> 1, s = r + (1 & r), o = t.fetchIfRef(n[s]); if (e < o) i = s - 2; else { if (!(e > o)) return t.fetchIfRef(n[s + 1]); a = s + 2 } } (0, r.info)(`Falling back to an exhaustive search, for key "${e}", ` + `in "${this._type}" tree.`); for (let a = 0, i = n.length; a < i; a += 2) { if (t.fetchIfRef(n[a]) === e) { (0, r.warn)(`The "${e}" key was found at an incorrect, ` + `i.e. out-of-order, position in "${this._type}" tree.`); return t.fetchIfRef(n[a + 1]) } } } return null } } class f extends d { constructor(e, t) { super(e, t, "Names") } } class g extends d { constructor(e, t) { super(e, t, "Nums") } } var m = function () { function e(e, t) { if (e && (0, i.isDict)(e)) { this.xref = t; this.root = e; e.has("FS") && (this.fs = e.get("FS")); this.description = e.has("Desc") ? (0, r.stringToPDFString)(e.get("Desc")) : ""; e.has("RF") && (0, r.warn)("Related file specifications are not supported"); this.contentAvailable = !0; if (!e.has("EF")) { this.contentAvailable = !1; (0, r.warn)("Non-embedded file specifications are not supported") } } } function t(e) { return e.has("UF") ? e.get("UF") : e.has("F") ? e.get("F") : e.has("Unix") ? e.get("Unix") : e.has("Mac") ? e.get("Mac") : e.has("DOS") ? e.get("DOS") : null } e.prototype = { get filename() { if (!this._filename && this.root) { var e = t(this.root) || "unnamed"; this._filename = (0, r.stringToPDFString)(e).replace(/\\\\/g, "\\").replace(/\\\//g, "/").replace(/\\/g, "/") } return this._filename }, get content() { if (!this.contentAvailable) return null; !this.contentRef && this.root && (this.contentRef = t(this.root.get("EF"))); var e = null; if (this.contentRef) { var a = this.xref.fetchIfRef(this.contentRef); a && (0, i.isStream)(a) ? e = a.getBytes() : (0, r.warn)("Embedded file specification points to non-existing/invalid content") } else (0, r.warn)("Embedded file specification does not have a content"); return e }, get serializable() { return { filename: this.filename, content: this.content } } }; return e }(); t.FileSpec = m; const p = function () { function e(e) { return e instanceof i.Ref || e instanceof i.Dict || Array.isArray(e) || (0, i.isStream)(e) } function t(t, a) { if (t instanceof i.Dict || (0, i.isStream)(t)) { const r = t instanceof i.Dict ? t : t.dict, n = r.getKeys(); for (let t = 0, i = n.length; t < i; t++) { const i = r.getRaw(n[t]); e(i) && a.push(i) } } else if (Array.isArray(t)) for (let r = 0, i = t.length; r < i; r++) { const i = t[r]; e(i) && a.push(i) } } function a(e, t, a) { this.dict = e; this.keys = t; this.xref = a; this.refSet = null } a.prototype = { async load() { if (!this.xref.stream.allChunksLoaded || this.xref.stream.allChunksLoaded()) return; const { keys: e, dict: t } = this; this.refSet = new i.RefSet; const a = []; for (let r = 0, i = e.length; r < i; r++) { const i = t.getRaw(e[r]); void 0 !== i && a.push(i) } return this._walk(a) }, async _walk(e) { const a = [], r = []; for (; e.length;) { let n = e.pop(); if (n instanceof i.Ref) { if (this.refSet.has(n)) continue; try { this.refSet.put(n); n = this.xref.fetch(n) } catch (e) { if (!(e instanceof s.MissingDataException)) throw e; a.push(n); r.push({ begin: e.begin, end: e.end }) } } if (n && n.getBaseStreams) { const e = n.getBaseStreams(); let t = !1; for (let a = 0, i = e.length; a < i; a++) { const i = e[a]; if (i.allChunksLoaded && !i.allChunksLoaded()) { t = !0; r.push({ begin: i.start, end: i.end }) } } t && a.push(n) } t(n, e) } if (r.length) { await this.xref.stream.manager.requestRanges(r); for (let e = 0, t = a.length; e < t; e++) { const t = a[e]; t instanceof i.Ref && this.refSet.remove(t) } return this._walk(a) } this.refSet = null } }; return a }(); t.ObjectLoader = p }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.Parser = t.Linearization = t.Lexer = void 0; var r = a(11), i = a(2), n = a(4), s = a(7), o = a(12), c = a(14), l = a(17), h = a(19); function u(e) { const t = e.length; let a = 1, r = 0; for (let i = 0; i < t; ++i) { a += 255 & e[i]; r += a } return r % 65521 << 16 | a % 65521 } class d { constructor({ lexer: e, xref: t, allowStreams: a = !1, recoveryMode: r = !1 }) { this.lexer = e; this.xref = t; this.allowStreams = a; this.recoveryMode = r; this.imageCache = Object.create(null); this.refill() } refill() { this.buf1 = this.lexer.getObj(); this.buf2 = this.lexer.getObj() } shift() { if (this.buf2 instanceof n.Cmd && "ID" === this.buf2.cmd) { this.buf1 = this.buf2; this.buf2 = null } else { this.buf1 = this.buf2; this.buf2 = this.lexer.getObj() } } tryShift() { try { this.shift(); return !0 } catch (e) { if (e instanceof s.MissingDataException) throw e; return !1 } } getObj(e = null) { const t = this.buf1; this.shift(); if (t instanceof n.Cmd) switch (t.cmd) { case "BI": return this.makeInlineImage(e); case "[": const a = []; for (; !(0, n.isCmd)(this.buf1, "]") && !(0, n.isEOF)(this.buf1);)a.push(this.getObj(e)); if ((0, n.isEOF)(this.buf1)) { if (!this.recoveryMode) throw new i.FormatError("End of file inside array"); return a } this.shift(); return a; case "<<": const r = new n.Dict(this.xref); for (; !(0, n.isCmd)(this.buf1, ">>") && !(0, n.isEOF)(this.buf1);) { if (!(0, n.isName)(this.buf1)) { (0, i.info)("Malformed dictionary: key must be a name object"); this.shift(); continue } const t = this.buf1.name; this.shift(); if ((0, n.isEOF)(this.buf1)) break; r.set(t, this.getObj(e)) } if ((0, n.isEOF)(this.buf1)) { if (!this.recoveryMode) throw new i.FormatError("End of file inside dictionary"); return r } if ((0, n.isCmd)(this.buf2, "stream")) return this.allowStreams ? this.makeStream(r, e) : r; this.shift(); return r; default: return t }if (Number.isInteger(t)) { if (Number.isInteger(this.buf1) && (0, n.isCmd)(this.buf2, "R")) { const e = n.Ref.get(t, this.buf1); this.shift(); this.shift(); return e } return t } return "string" == typeof t && e ? e.decryptString(t) : t } findDefaultInlineStreamEnd(e) { const t = e.pos; let a, r, n = 0; for (; -1 !== (a = e.getByte());)if (0 === n) n = 69 === a ? 1 : 0; else if (1 === n) n = 73 === a ? 2 : 0; else { (0, i.assert)(2 === n); if (32 === a || 10 === a || 13 === a) { r = e.pos; const t = e.peekBytes(10); for (let e = 0, r = t.length; e < r; e++) { a = t[e]; if ((0 !== a || 0 === t[e + 1]) && (10 !== a && 13 !== a && (a < 32 || a > 127))) { n = 0; break } } if (2 === n) break } else n = 0 } if (-1 === a) { (0, i.warn)("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker"); if (r) { (0, i.warn)('... trying to recover by using the last "EI" occurrence.'); e.skip(-(e.pos - r)) } } let o = 4; e.skip(-o); a = e.peekByte(); e.skip(o); (0, s.isWhiteSpace)(a) || o--; return e.pos - o - t } findDCTDecodeInlineStreamEnd(e) { const t = e.pos; let a, r, n = !1; for (; -1 !== (a = e.getByte());)if (255 === a) { switch (e.getByte()) { case 0: break; case 255: e.skip(-1); break; case 217: n = !0; break; case 192: case 193: case 194: case 195: case 197: case 198: case 199: case 201: case 202: case 203: case 205: case 206: case 207: case 196: case 204: case 218: case 219: case 220: case 221: case 222: case 223: case 224: case 225: case 226: case 227: case 228: case 229: case 230: case 231: case 232: case 233: case 234: case 235: case 236: case 237: case 238: case 239: case 254: r = e.getUint16(); r > 2 ? e.skip(r - 2) : e.skip(-2) }if (n) break } const s = e.pos - t; if (-1 === a) { (0, i.warn)("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead."); e.skip(-s); return this.findDefaultInlineStreamEnd(e) } this.inlineStreamSkipEI(e); return s } findASCII85DecodeInlineStreamEnd(e) { const t = e.pos; let a; for (; -1 !== (a = e.getByte());)if (126 === a) { const t = e.pos; a = e.peekByte(); for (; (0, s.isWhiteSpace)(a);) { e.skip(); a = e.peekByte() } if (62 === a) { e.skip(); break } if (e.pos > t) { const t = e.peekBytes(2); if (69 === t[0] && 73 === t[1]) break } } const r = e.pos - t; if (-1 === a) { (0, i.warn)("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead."); e.skip(-r); return this.findDefaultInlineStreamEnd(e) } this.inlineStreamSkipEI(e); return r } findASCIIHexDecodeInlineStreamEnd(e) { const t = e.pos; let a; for (; -1 !== (a = e.getByte()) && 62 !== a;); const r = e.pos - t; if (-1 === a) { (0, i.warn)("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead."); e.skip(-r); return this.findDefaultInlineStreamEnd(e) } this.inlineStreamSkipEI(e); return r } inlineStreamSkipEI(e) { let t, a = 0; for (; -1 !== (t = e.getByte());)if (0 === a) a = 69 === t ? 1 : 0; else if (1 === a) a = 73 === t ? 2 : 0; else if (2 === a) break } makeInlineImage(e) { const t = this.lexer, a = t.stream, r = new n.Dict(this.xref); let s; for (; !(0, n.isCmd)(this.buf1, "ID") && !(0, n.isEOF)(this.buf1);) { if (!(0, n.isName)(this.buf1)) throw new i.FormatError("Dictionary key must be a name object"); const t = this.buf1.name; this.shift(); if ((0, n.isEOF)(this.buf1)) break; r.set(t, this.getObj(e)) } -1 !== t.beginInlineImagePos && (s = a.pos - t.beginInlineImagePos); const o = r.get("Filter", "F"); let c; if ((0, n.isName)(o)) c = o.name; else if (Array.isArray(o)) { const e = this.xref.fetchIfRef(o[0]); (0, n.isName)(e) && (c = e.name) } const l = a.pos; let h; h = "DCTDecode" === c || "DCT" === c ? this.findDCTDecodeInlineStreamEnd(a) : "ASCII85Decode" === c || "A85" === c ? this.findASCII85DecodeInlineStreamEnd(a) : "ASCIIHexDecode" === c || "AHx" === c ? this.findASCIIHexDecodeInlineStreamEnd(a) : this.findDefaultInlineStreamEnd(a); let d, f = a.makeSubStream(l, h, r); if (h < 1e3 && s < 5552) { const e = f.getBytes(); f.reset(); const r = a.pos; a.pos = t.beginInlineImagePos; const i = a.getBytes(s); a.pos = r; d = u(e) + "_" + u(i); const o = this.imageCache[d]; if (void 0 !== o) { this.buf2 = n.Cmd.get("EI"); this.shift(); o.reset(); return o } } e && (f = e.createStream(f, h)); f = this.filter(f, r, h); f.dict = r; if (void 0 !== d) { f.cacheKey = `inline_${h}_${d}`; this.imageCache[d] = f } this.buf2 = n.Cmd.get("EI"); this.shift(); return f } _findStreamLength(e, t) { const { stream: a } = this.lexer; a.pos = e; const r = t.length; for (; a.pos < a.end;) { const i = a.peekBytes(2048), n = i.length - r; if (n <= 0) break; let s = 0; for (; s < n;) { let n = 0; for (; n < r && i[s + n] === t[n];)n++; if (n >= r) { a.pos += s; return a.pos - e } s++ } a.pos += n } return -1 } makeStream(e, t) { const a = this.lexer; let r = a.stream; a.skipToNextLine(); const o = r.pos - 1; let c = e.get("Length"); if (!Number.isInteger(c)) { (0, i.info)(`Bad length "${c}" in stream`); c = 0 } r.pos = o + c; a.nextChar(); if (this.tryShift() && (0, n.isCmd)(this.buf2, "endstream")) this.shift(); else { const e = new Uint8Array([101, 110, 100, 115, 116, 114, 101, 97, 109]); let t = this._findStreamLength(o, e); if (t < 0) { const a = 1; for (let n = 1; n <= a; n++) { const a = e.length - n, c = e.slice(0, a), l = this._findStreamLength(o, c); if (l >= 0) { const e = r.peekBytes(a + 1)[a]; if (!(0, s.isWhiteSpace)(e)) break; (0, i.info)(`Found "${(0, i.bytesToString)(c)}" when ` + "searching for endstream command."); t = l; break } } if (t < 0) throw new i.FormatError("Missing endstream command.") } c = t; a.nextChar(); this.shift(); this.shift() } this.shift(); r = r.makeSubStream(o, c, e); t && (r = t.createStream(r, c)); r = this.filter(r, e, c); r.dict = e; return r } filter(e, t, a) { let r = t.get("Filter", "F"), s = t.get("DecodeParms", "DP"); if ((0, n.isName)(r)) { Array.isArray(s) && (0, i.warn)("/DecodeParms should not contain an Array, when /Filter contains a Name."); return this.makeFilter(e, r.name, a, s) } let o = a; if (Array.isArray(r)) { const t = r, a = s; for (let c = 0, l = t.length; c < l; ++c) { r = this.xref.fetchIfRef(t[c]); if (!(0, n.isName)(r)) throw new i.FormatError(`Bad filter name "${r}"`); s = null; Array.isArray(a) && c in a && (s = this.xref.fetchIfRef(a[c])); e = this.makeFilter(e, r.name, o, s); o = null } } return e } makeFilter(e, t, a, n) { if (0 === a) { (0, i.warn)(`Empty "${t}" stream.`); return new r.NullStream } try { const s = this.xref.stats.streamTypes; if ("FlateDecode" === t || "Fl" === t) { s[i.StreamType.FLATE] = !0; return n ? new r.PredictorStream(new r.FlateStream(e, a), a, n) : new r.FlateStream(e, a) } if ("LZWDecode" === t || "LZW" === t) { s[i.StreamType.LZW] = !0; let t = 1; if (n) { n.has("EarlyChange") && (t = n.get("EarlyChange")); return new r.PredictorStream(new r.LZWStream(e, a, t), a, n) } return new r.LZWStream(e, a, t) } if ("DCTDecode" === t || "DCT" === t) { s[i.StreamType.DCT] = !0; return new l.JpegStream(e, a, e.dict, n) } if ("JPXDecode" === t || "JPX" === t) { s[i.StreamType.JPX] = !0; return new h.JpxStream(e, a, e.dict, n) } if ("ASCII85Decode" === t || "A85" === t) { s[i.StreamType.A85] = !0; return new r.Ascii85Stream(e, a) } if ("ASCIIHexDecode" === t || "AHx" === t) { s[i.StreamType.AHX] = !0; return new r.AsciiHexStream(e, a) } if ("CCITTFaxDecode" === t || "CCF" === t) { s[i.StreamType.CCF] = !0; return new o.CCITTFaxStream(e, a, n) } if ("RunLengthDecode" === t || "RL" === t) { s[i.StreamType.RLX] = !0; return new r.RunLengthStream(e, a) } if ("JBIG2Decode" === t) { s[i.StreamType.JBIG] = !0; return new c.Jbig2Stream(e, a, e.dict, n) } (0, i.warn)(`Filter "${t}" is not supported.`); return e } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, i.warn)(`Invalid stream: "${e}"`); return new r.NullStream } } } t.Parser = d; const f = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; function g(e) { return e >= 48 && e <= 57 ? 15 & e : e >= 65 && e <= 70 || e >= 97 && e <= 102 ? 9 + (15 & e) : -1 } class m { constructor(e, t = null) { this.stream = e; this.nextChar(); this.strBuf = []; this.knownCommands = t; this._hexStringNumWarn = 0; this.beginInlineImagePos = -1 } nextChar() { return this.currentChar = this.stream.getByte() } peekChar() { return this.stream.peekByte() } getNumber() { let e = this.currentChar, t = !1, a = 0, r = 0; if (45 === e) { r = -1; e = this.nextChar(); 45 === e && (e = this.nextChar()) } else if (43 === e) { r = 1; e = this.nextChar() } if (10 === e || 13 === e) do { e = this.nextChar() } while (10 === e || 13 === e); if (46 === e) { a = 10; e = this.nextChar() } if (e < 48 || e > 57) { if (10 === a && 0 === r && ((0, s.isWhiteSpace)(e) || -1 === e)) { (0, i.warn)("Lexer.getNumber - treating a single decimal point as zero."); return 0 } throw new i.FormatError(`Invalid number: ${String.fromCharCode(e)} (charCode ${e})`) } r = r || 1; let n = e - 48, o = 0, c = 1; for (; (e = this.nextChar()) >= 0;)if (e >= 48 && e <= 57) { const r = e - 48; if (t) o = 10 * o + r; else { 0 !== a && (a *= 10); n = 10 * n + r } } else if (46 === e) { if (0 !== a) break; a = 1 } else if (45 === e) (0, i.warn)("Badly formatted number: minus sign in the middle"); else { if (69 !== e && 101 !== e) break; e = this.peekChar(); if (43 === e || 45 === e) { c = 45 === e ? -1 : 1; this.nextChar() } else if (e < 48 || e > 57) break; t = !0 } 0 !== a && (n /= a); t && (n *= 10 ** (c * o)); return r * n } getString() { let e = 1, t = !1; const a = this.strBuf; a.length = 0; let r = this.nextChar(); for (; ;) { let n = !1; switch (0 | r) { case -1: (0, i.warn)("Unterminated string"); t = !0; break; case 40: ++e; a.push("("); break; case 41: if (0 == --e) { this.nextChar(); t = !0 } else a.push(")"); break; case 92: r = this.nextChar(); switch (r) { case -1: (0, i.warn)("Unterminated string"); t = !0; break; case 110: a.push("\n"); break; case 114: a.push("\r"); break; case 116: a.push("\t"); break; case 98: a.push("\b"); break; case 102: a.push("\f"); break; case 92: case 40: case 41: a.push(String.fromCharCode(r)); break; case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: let e = 15 & r; r = this.nextChar(); n = !0; if (r >= 48 && r <= 55) { e = (e << 3) + (15 & r); r = this.nextChar(); if (r >= 48 && r <= 55) { n = !1; e = (e << 3) + (15 & r) } } a.push(String.fromCharCode(e)); break; case 13: 10 === this.peekChar() && this.nextChar(); break; case 10: break; default: a.push(String.fromCharCode(r)) }break; default: a.push(String.fromCharCode(r)) }if (t) break; n || (r = this.nextChar()) } return a.join("") } getName() { let e, t; const a = this.strBuf; a.length = 0; for (; (e = this.nextChar()) >= 0 && !f[e];)if (35 === e) { e = this.nextChar(); if (f[e]) { (0, i.warn)("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number."); a.push("#"); break } const r = g(e); if (-1 !== r) { t = e; e = this.nextChar(); const n = g(e); if (-1 === n) { (0, i.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(e)}) ` + "in hexadecimal number."); a.push("#", String.fromCharCode(t)); if (f[e]) break; a.push(String.fromCharCode(e)); continue } a.push(String.fromCharCode(r << 4 | n)) } else a.push("#", String.fromCharCode(e)) } else a.push(String.fromCharCode(e)); a.length > 127 && (0, i.warn)(`Name token is longer than allowed by the spec: ${a.length}`); return n.Name.get(a.join("")) } _hexStringWarn(e) { 5 != this._hexStringNumWarn++ ? this._hexStringNumWarn > 5 || (0, i.warn)(`getHexString - ignoring invalid character: ${e}`) : (0, i.warn)("getHexString - ignoring additional invalid characters.") } getHexString() { const e = this.strBuf; e.length = 0; let t, a, r = this.currentChar, n = !0; this._hexStringNumWarn = 0; for (; ;) { if (r < 0) { (0, i.warn)("Unterminated hex string"); break } if (62 === r) { this.nextChar(); break } if (1 !== f[r]) { if (n) { t = g(r); if (-1 === t) { this._hexStringWarn(r); r = this.nextChar(); continue } } else { a = g(r); if (-1 === a) { this._hexStringWarn(r); r = this.nextChar(); continue } e.push(String.fromCharCode(t << 4 | a)) } n = !n; r = this.nextChar() } else r = this.nextChar() } return e.join("") } getObj() { let e = !1, t = this.currentChar; for (; ;) { if (t < 0) return n.EOF; if (e) 10 !== t && 13 !== t || (e = !1); else if (37 === t) e = !0; else if (1 !== f[t]) break; t = this.nextChar() } switch (0 | t) { case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 43: case 45: case 46: return this.getNumber(); case 40: return this.getString(); case 47: return this.getName(); case 91: this.nextChar(); return n.Cmd.get("["); case 93: this.nextChar(); return n.Cmd.get("]"); case 60: t = this.nextChar(); if (60 === t) { this.nextChar(); return n.Cmd.get("<<") } return this.getHexString(); case 62: t = this.nextChar(); if (62 === t) { this.nextChar(); return n.Cmd.get(">>") } return n.Cmd.get(">"); case 123: this.nextChar(); return n.Cmd.get("{"); case 125: this.nextChar(); return n.Cmd.get("}"); case 41: this.nextChar(); throw new i.FormatError(`Illegal character: ${t}`) }let a = String.fromCharCode(t); const r = this.knownCommands; let s = r && void 0 !== r[a]; for (; (t = this.nextChar()) >= 0 && !f[t];) { const e = a + String.fromCharCode(t); if (s && void 0 === r[e]) break; if (128 === a.length) throw new i.FormatError(`Command token too long: ${a.length}`); a = e; s = r && void 0 !== r[a] } if ("true" === a) return !0; if ("false" === a) return !1; if ("null" === a) return null; "BI" === a && (this.beginInlineImagePos = this.stream.pos); return n.Cmd.get(a) } skipToNextLine() { let e = this.currentChar; for (; e >= 0;) { if (13 === e) { e = this.nextChar(); 10 === e && this.nextChar(); break } if (10 === e) { this.nextChar(); break } e = this.nextChar() } } } t.Lexer = m; t.Linearization = class { static create(e) { function t(e, t, a = !1) { const r = e.get(t); if (Number.isInteger(r) && (a ? r >= 0 : r > 0)) return r; throw new Error(`The "${t}" parameter in the linearization ` + "dictionary is invalid.") } const a = new d({ lexer: new m(e), xref: null }), r = a.getObj(), s = a.getObj(), o = a.getObj(), c = a.getObj(); let l, h; if (!(Number.isInteger(r) && Number.isInteger(s) && (0, n.isCmd)(o, "obj") && (0, n.isDict)(c) && (0, i.isNum)(l = c.get("Linearized")) && l > 0)) return null; if ((h = t(c, "L")) !== e.length) throw new Error('The "L" parameter in the linearization dictionary does not equal the stream length.'); return { length: h, hints: function (e) { const t = e.get("H"); let a; if (Array.isArray(t) && (2 === (a = t.length) || 4 === a)) { for (let e = 0; e < a; e++) { const a = t[e]; if (!(Number.isInteger(a) && a > 0)) throw new Error(`Hint (${e}) in the linearization dictionary is invalid.`) } return t } throw new Error("Hint array in the linearization dictionary is invalid.") }(c), objectNumberFirst: t(c, "O"), endFirst: t(c, "E"), numPages: t(c, "N"), mainXRefEntriesOffset: t(c, "T"), pageFirst: c.has("P") ? t(c, "P", !0) : 0 } } } }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.LZWStream = t.StringStream = t.StreamsSequenceStream = t.Stream = t.RunLengthStream = t.PredictorStream = t.NullStream = t.FlateStream = t.DecodeStream = t.DecryptStream = t.AsciiHexStream = t.Ascii85Stream = void 0; var r = a(2), i = a(4), n = a(7), s = function () { function e(e, t, a, r) { this.bytes = e instanceof Uint8Array ? e : new Uint8Array(e); this.start = t || 0; this.pos = this.start; this.end = t + a || this.bytes.length; this.dict = r } e.prototype = { get length() { return this.end - this.start }, get isEmpty() { return 0 === this.length }, getByte: function () { return this.pos >= this.end ? -1 : this.bytes[this.pos++] }, getUint16: function () { var e = this.getByte(), t = this.getByte(); return -1 === e || -1 === t ? -1 : (e << 8) + t }, getInt32: function () { return (this.getByte() << 24) + (this.getByte() << 16) + (this.getByte() << 8) + this.getByte() }, getBytes(e, t = !1) { var a = this.bytes, r = this.pos, i = this.end; if (!e) { const e = a.subarray(r, i); return t ? new Uint8ClampedArray(e) : e } var n = r + e; n > i && (n = i); this.pos = n; const s = a.subarray(r, n); return t ? new Uint8ClampedArray(s) : s }, peekByte: function () { var e = this.getByte(); -1 !== e && this.pos--; return e }, peekBytes(e, t = !1) { var a = this.getBytes(e, t); this.pos -= a.length; return a }, getByteRange(e, t) { e < 0 && (e = 0); t > this.end && (t = this.end); return this.bytes.subarray(e, t) }, skip: function (e) { e || (e = 1); this.pos += e }, reset: function () { this.pos = this.start }, moveStart: function () { this.start = this.pos }, makeSubStream: function (t, a, r) { return new e(this.bytes.buffer, t, a, r) } }; return e }(); t.Stream = s; var o = function () { function e(e) { const t = (0, r.stringToBytes)(e); s.call(this, t) } e.prototype = s.prototype; return e }(); t.StringStream = o; var c = function () { var e = new Uint8Array(0); function t(t) { this._rawMinBufferLength = t || 0; this.pos = 0; this.bufferLength = 0; this.eof = !1; this.buffer = e; this.minBufferLength = 512; if (t) for (; this.minBufferLength < t;)this.minBufferLength *= 2 } t.prototype = { get isEmpty() { for (; !this.eof && 0 === this.bufferLength;)this.readBlock(); return 0 === this.bufferLength }, ensureBuffer: function (e) { var t = this.buffer; if (e <= t.byteLength) return t; for (var a = this.minBufferLength; a < e;)a *= 2; var r = new Uint8Array(a); r.set(t); return this.buffer = r }, getByte: function () { for (var e = this.pos; this.bufferLength <= e;) { if (this.eof) return -1; this.readBlock() } return this.buffer[this.pos++] }, getUint16: function () { var e = this.getByte(), t = this.getByte(); return -1 === e || -1 === t ? -1 : (e << 8) + t }, getInt32: function () { return (this.getByte() << 24) + (this.getByte() << 16) + (this.getByte() << 8) + this.getByte() }, getBytes(e, t = !1) { var a, r = this.pos; if (e) { this.ensureBuffer(r + e); a = r + e; for (; !this.eof && this.bufferLength < a;)this.readBlock(); var i = this.bufferLength; a > i && (a = i) } else { for (; !this.eof;)this.readBlock(); a = this.bufferLength } this.pos = a; const n = this.buffer.subarray(r, a); return !t || n instanceof Uint8ClampedArray ? n : new Uint8ClampedArray(n) }, peekByte: function () { var e = this.getByte(); -1 !== e && this.pos--; return e }, peekBytes(e, t = !1) { var a = this.getBytes(e, t); this.pos -= a.length; return a }, makeSubStream: function (e, t, a) { for (var r = e + t; this.bufferLength <= r && !this.eof;)this.readBlock(); return new s(this.buffer, e, t, a) }, getByteRange(e, t) { (0, r.unreachable)("Should not call DecodeStream.getByteRange") }, skip: function (e) { e || (e = 1); this.pos += e }, reset: function () { this.pos = 0 }, getBaseStreams: function () { return this.str && this.str.getBaseStreams ? this.str.getBaseStreams() : [] } }; return t }(); t.DecodeStream = c; var l = function () { function e(e) { this.streams = e; let t = 0; for (let a = 0, r = e.length; a < r; a++) { const r = e[a]; t += r instanceof c ? r._rawMinBufferLength : r.length } c.call(this, t) } e.prototype = Object.create(c.prototype); e.prototype.readBlock = function () { var e = this.streams; if (0 !== e.length) { var t = e.shift().getBytes(), a = this.bufferLength, r = a + t.length; this.ensureBuffer(r).set(t, a); this.bufferLength = r } else this.eof = !0 }; e.prototype.getBaseStreams = function () { for (var e = [], t = 0, a = this.streams.length; t < a; t++) { var r = this.streams[t]; r.getBaseStreams && e.push(...r.getBaseStreams()) } return e }; return e }(); t.StreamsSequenceStream = l; var h = function () { var e = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), t = new Int32Array([3, 4, 5, 6, 7, 8, 9, 10, 65547, 65549, 65551, 65553, 131091, 131095, 131099, 131103, 196643, 196651, 196659, 196667, 262211, 262227, 262243, 262259, 327811, 327843, 327875, 327907, 258, 258, 258]), a = new Int32Array([1, 2, 3, 4, 65541, 65543, 131081, 131085, 196625, 196633, 262177, 262193, 327745, 327777, 393345, 393409, 459009, 459137, 524801, 525057, 590849, 591361, 657409, 658433, 724993, 727041, 794625, 798721, 868353, 876545]), i = [new Int32Array([459008, 524368, 524304, 524568, 459024, 524400, 524336, 590016, 459016, 524384, 524320, 589984, 524288, 524416, 524352, 590048, 459012, 524376, 524312, 589968, 459028, 524408, 524344, 590032, 459020, 524392, 524328, 59e4, 524296, 524424, 524360, 590064, 459010, 524372, 524308, 524572, 459026, 524404, 524340, 590024, 459018, 524388, 524324, 589992, 524292, 524420, 524356, 590056, 459014, 524380, 524316, 589976, 459030, 524412, 524348, 590040, 459022, 524396, 524332, 590008, 524300, 524428, 524364, 590072, 459009, 524370, 524306, 524570, 459025, 524402, 524338, 590020, 459017, 524386, 524322, 589988, 524290, 524418, 524354, 590052, 459013, 524378, 524314, 589972, 459029, 524410, 524346, 590036, 459021, 524394, 524330, 590004, 524298, 524426, 524362, 590068, 459011, 524374, 524310, 524574, 459027, 524406, 524342, 590028, 459019, 524390, 524326, 589996, 524294, 524422, 524358, 590060, 459015, 524382, 524318, 589980, 459031, 524414, 524350, 590044, 459023, 524398, 524334, 590012, 524302, 524430, 524366, 590076, 459008, 524369, 524305, 524569, 459024, 524401, 524337, 590018, 459016, 524385, 524321, 589986, 524289, 524417, 524353, 590050, 459012, 524377, 524313, 589970, 459028, 524409, 524345, 590034, 459020, 524393, 524329, 590002, 524297, 524425, 524361, 590066, 459010, 524373, 524309, 524573, 459026, 524405, 524341, 590026, 459018, 524389, 524325, 589994, 524293, 524421, 524357, 590058, 459014, 524381, 524317, 589978, 459030, 524413, 524349, 590042, 459022, 524397, 524333, 590010, 524301, 524429, 524365, 590074, 459009, 524371, 524307, 524571, 459025, 524403, 524339, 590022, 459017, 524387, 524323, 589990, 524291, 524419, 524355, 590054, 459013, 524379, 524315, 589974, 459029, 524411, 524347, 590038, 459021, 524395, 524331, 590006, 524299, 524427, 524363, 590070, 459011, 524375, 524311, 524575, 459027, 524407, 524343, 590030, 459019, 524391, 524327, 589998, 524295, 524423, 524359, 590062, 459015, 524383, 524319, 589982, 459031, 524415, 524351, 590046, 459023, 524399, 524335, 590014, 524303, 524431, 524367, 590078, 459008, 524368, 524304, 524568, 459024, 524400, 524336, 590017, 459016, 524384, 524320, 589985, 524288, 524416, 524352, 590049, 459012, 524376, 524312, 589969, 459028, 524408, 524344, 590033, 459020, 524392, 524328, 590001, 524296, 524424, 524360, 590065, 459010, 524372, 524308, 524572, 459026, 524404, 524340, 590025, 459018, 524388, 524324, 589993, 524292, 524420, 524356, 590057, 459014, 524380, 524316, 589977, 459030, 524412, 524348, 590041, 459022, 524396, 524332, 590009, 524300, 524428, 524364, 590073, 459009, 524370, 524306, 524570, 459025, 524402, 524338, 590021, 459017, 524386, 524322, 589989, 524290, 524418, 524354, 590053, 459013, 524378, 524314, 589973, 459029, 524410, 524346, 590037, 459021, 524394, 524330, 590005, 524298, 524426, 524362, 590069, 459011, 524374, 524310, 524574, 459027, 524406, 524342, 590029, 459019, 524390, 524326, 589997, 524294, 524422, 524358, 590061, 459015, 524382, 524318, 589981, 459031, 524414, 524350, 590045, 459023, 524398, 524334, 590013, 524302, 524430, 524366, 590077, 459008, 524369, 524305, 524569, 459024, 524401, 524337, 590019, 459016, 524385, 524321, 589987, 524289, 524417, 524353, 590051, 459012, 524377, 524313, 589971, 459028, 524409, 524345, 590035, 459020, 524393, 524329, 590003, 524297, 524425, 524361, 590067, 459010, 524373, 524309, 524573, 459026, 524405, 524341, 590027, 459018, 524389, 524325, 589995, 524293, 524421, 524357, 590059, 459014, 524381, 524317, 589979, 459030, 524413, 524349, 590043, 459022, 524397, 524333, 590011, 524301, 524429, 524365, 590075, 459009, 524371, 524307, 524571, 459025, 524403, 524339, 590023, 459017, 524387, 524323, 589991, 524291, 524419, 524355, 590055, 459013, 524379, 524315, 589975, 459029, 524411, 524347, 590039, 459021, 524395, 524331, 590007, 524299, 524427, 524363, 590071, 459011, 524375, 524311, 524575, 459027, 524407, 524343, 590031, 459019, 524391, 524327, 589999, 524295, 524423, 524359, 590063, 459015, 524383, 524319, 589983, 459031, 524415, 524351, 590047, 459023, 524399, 524335, 590015, 524303, 524431, 524367, 590079]), 9], n = [new Int32Array([327680, 327696, 327688, 327704, 327684, 327700, 327692, 327708, 327682, 327698, 327690, 327706, 327686, 327702, 327694, 0, 327681, 327697, 327689, 327705, 327685, 327701, 327693, 327709, 327683, 327699, 327691, 327707, 327687, 327703, 327695, 0]), 5]; function s(e, t) { this.str = e; this.dict = e.dict; var a = e.getByte(), i = e.getByte(); if (-1 === a || -1 === i) throw new r.FormatError(`Invalid header in flate stream: ${a}, ${i}`); if (8 != (15 & a)) throw new r.FormatError(`Unknown compression method in flate stream: ${a}, ${i}`); if (((a << 8) + i) % 31 != 0) throw new r.FormatError(`Bad FCHECK in flate stream: ${a}, ${i}`); if (32 & i) throw new r.FormatError(`FDICT bit set in flate stream: ${a}, ${i}`); this.codeSize = 0; this.codeBuf = 0; c.call(this, t) } s.prototype = Object.create(c.prototype); s.prototype.getBits = function (e) { for (var t, a = this.str, i = this.codeSize, n = this.codeBuf; i < e;) { if (-1 === (t = a.getByte())) throw new r.FormatError("Bad encoding in flate stream"); n |= t << i; i += 8 } t = n & (1 << e) - 1; this.codeBuf = n >> e; this.codeSize = i -= e; return t }; s.prototype.getCode = function (e) { for (var t, a = this.str, i = e[0], n = e[1], s = this.codeSize, o = this.codeBuf; s < n && -1 !== (t = a.getByte());) { o |= t << s; s += 8 } var c = i[o & (1 << n) - 1], l = c >> 16, h = 65535 & c; if (l < 1 || s < l) throw new r.FormatError("Bad encoding in flate stream"); this.codeBuf = o >> l; this.codeSize = s - l; return h }; s.prototype.generateHuffmanTable = function (e) { var t, a = e.length, r = 0; for (t = 0; t < a; ++t)e[t] > r && (r = e[t]); for (var i = 1 << r, n = new Int32Array(i), s = 1, o = 0, c = 2; s <= r; ++s, o <<= 1, c <<= 1)for (var l = 0; l < a; ++l)if (e[l] === s) { var h = 0, u = o; for (t = 0; t < s; ++t) { h = h << 1 | 1 & u; u >>= 1 } for (t = h; t < i; t += c)n[t] = s << 16 | l; ++o } return [n, r] }; s.prototype.readBlock = function () { var s, o, c = this.str, l = this.getBits(3); 1 & l && (this.eof = !0); if (0 !== (l >>= 1)) { var h, u; if (1 === l) { h = i; u = n } else { if (2 !== l) throw new r.FormatError("Unknown block type in flate stream"); var d, f = this.getBits(5) + 257, g = this.getBits(5) + 1, m = this.getBits(4) + 4, p = new Uint8Array(e.length); for (d = 0; d < m; ++d)p[e[d]] = this.getBits(3); var b = this.generateHuffmanTable(p); o = 0; d = 0; for (var y, v, w, k = f + g, S = new Uint8Array(k); d < k;) { var C = this.getCode(b); if (16 === C) { y = 2; v = 3; w = o } else if (17 === C) { y = 3; v = 3; w = o = 0 } else { if (18 !== C) { S[d++] = o = C; continue } y = 7; v = 11; w = o = 0 } for (var x = this.getBits(y) + v; x-- > 0;)S[d++] = w } h = this.generateHuffmanTable(S.subarray(0, f)); u = this.generateHuffmanTable(S.subarray(f, k)) } for (var A = (s = this.buffer) ? s.length : 0, I = this.bufferLength; ;) { var F = this.getCode(h); if (F < 256) { I + 1 >= A && (A = (s = this.ensureBuffer(I + 1)).length); s[I++] = F } else { if (256 === F) { this.bufferLength = I; return } var T = (F = t[F -= 257]) >> 16; T > 0 && (T = this.getBits(T)); o = (65535 & F) + T; F = this.getCode(u); (T = (F = a[F]) >> 16) > 0 && (T = this.getBits(T)); var E = (65535 & F) + T; I + o >= A && (A = (s = this.ensureBuffer(I + o)).length); for (var O = 0; O < o; ++O, ++I)s[I] = s[I - E] } } } else { var P; if (-1 === (P = c.getByte())) throw new r.FormatError("Bad block header in flate stream"); var B = P; if (-1 === (P = c.getByte())) throw new r.FormatError("Bad block header in flate stream"); B |= P << 8; if (-1 === (P = c.getByte())) throw new r.FormatError("Bad block header in flate stream"); var D = P; if (-1 === (P = c.getByte())) throw new r.FormatError("Bad block header in flate stream"); if ((D |= P << 8) !== (65535 & ~B) && (0 !== B || 0 !== D)) throw new r.FormatError("Bad uncompressed block length in flate stream"); this.codeBuf = 0; this.codeSize = 0; const e = this.bufferLength, t = e + B; s = this.ensureBuffer(t); this.bufferLength = t; if (0 === B) -1 === c.peekByte() && (this.eof = !0); else { const t = c.getBytes(B); s.set(t, e); t.length < B && (this.eof = !0) } } }; return s }(); t.FlateStream = h; var u = function () { function e(e, t, a) { if (!(0, i.isDict)(a)) return e; var n = this.predictor = a.get("Predictor") || 1; if (n <= 1) return e; if (2 !== n && (n < 10 || n > 15)) throw new r.FormatError(`Unsupported predictor: ${n}`); this.readBlock = 2 === n ? this.readBlockTiff : this.readBlockPng; this.str = e; this.dict = e.dict; var s = this.colors = a.get("Colors") || 1, o = this.bits = a.get("BitsPerComponent") || 8, l = this.columns = a.get("Columns") || 1; this.pixBytes = s * o + 7 >> 3; this.rowBytes = l * s * o + 7 >> 3; c.call(this, t); return this } e.prototype = Object.create(c.prototype); e.prototype.readBlockTiff = function () { var e = this.rowBytes, t = this.bufferLength, a = this.ensureBuffer(t + e), r = this.bits, i = this.colors, n = this.str.getBytes(e); this.eof = !n.length; if (!this.eof) { var s, o = 0, c = 0, l = 0, h = 0, u = t; if (1 === r && 1 === i) for (s = 0; s < e; ++s) { var d = n[s] ^ o; d ^= d >> 1; d ^= d >> 2; o = (1 & (d ^= d >> 4)) << 7; a[u++] = d } else if (8 === r) { for (s = 0; s < i; ++s)a[u++] = n[s]; for (; s < e; ++s) { a[u] = a[u - i] + n[s]; u++ } } else if (16 === r) { var f = 2 * i; for (s = 0; s < f; ++s)a[u++] = n[s]; for (; s < e; s += 2) { var g = ((255 & n[s]) << 8) + (255 & n[s + 1]) + ((255 & a[u - f]) << 8) + (255 & a[u - f + 1]); a[u++] = g >> 8 & 255; a[u++] = 255 & g } } else { var m = new Uint8Array(i + 1), p = (1 << r) - 1, b = 0, y = t, v = this.columns; for (s = 0; s < v; ++s)for (var w = 0; w < i; ++w) { if (l < r) { o = o << 8 | 255 & n[b++]; l += 8 } m[w] = m[w] + (o >> l - r) & p; l -= r; c = c << r | m[w]; if ((h += r) >= 8) { a[y++] = c >> h - 8 & 255; h -= 8 } } h > 0 && (a[y++] = (c << 8 - h) + (o & (1 << 8 - h) - 1)) } this.bufferLength += e } }; e.prototype.readBlockPng = function () { var e = this.rowBytes, t = this.pixBytes, a = this.str.getByte(), i = this.str.getBytes(e); this.eof = !i.length; if (!this.eof) { var n = this.bufferLength, s = this.ensureBuffer(n + e), o = s.subarray(n - e, n); 0 === o.length && (o = new Uint8Array(e)); var c, l, h, u = n; switch (a) { case 0: for (c = 0; c < e; ++c)s[u++] = i[c]; break; case 1: for (c = 0; c < t; ++c)s[u++] = i[c]; for (; c < e; ++c) { s[u] = s[u - t] + i[c] & 255; u++ } break; case 2: for (c = 0; c < e; ++c)s[u++] = o[c] + i[c] & 255; break; case 3: for (c = 0; c < t; ++c)s[u++] = (o[c] >> 1) + i[c]; for (; c < e; ++c) { s[u] = (o[c] + s[u - t] >> 1) + i[c] & 255; u++ } break; case 4: for (c = 0; c < t; ++c) { l = o[c]; h = i[c]; s[u++] = l + h } for (; c < e; ++c) { l = o[c]; var d = o[c - t], f = s[u - t], g = f + l - d, m = g - f; m < 0 && (m = -m); var p = g - l; p < 0 && (p = -p); var b = g - d; b < 0 && (b = -b); h = i[c]; s[u++] = m <= p && m <= b ? f + h : p <= b ? l + h : d + h } break; default: throw new r.FormatError(`Unsupported predictor: ${a}`) }this.bufferLength += e } }; return e }(); t.PredictorStream = u; var d = function () { function e(e, t, a) { this.str = e; this.dict = e.dict; this.decrypt = a; this.nextChunk = null; this.initialized = !1; c.call(this, t) } e.prototype = Object.create(c.prototype); e.prototype.readBlock = function () { var e; if (this.initialized) e = this.nextChunk; else { e = this.str.getBytes(512); this.initialized = !0 } if (e && 0 !== e.length) { this.nextChunk = this.str.getBytes(512); var t = this.nextChunk && this.nextChunk.length > 0; e = (0, this.decrypt)(e, !t); var a, r = this.bufferLength, i = e.length, n = this.ensureBuffer(r + i); for (a = 0; a < i; a++)n[r++] = e[a]; this.bufferLength = r } else this.eof = !0 }; return e }(); t.DecryptStream = d; var f = function () { function e(e, t) { this.str = e; this.dict = e.dict; this.input = new Uint8Array(5); t && (t *= .8); c.call(this, t) } e.prototype = Object.create(c.prototype); e.prototype.readBlock = function () { for (var e = this.str, t = e.getByte(); (0, n.isWhiteSpace)(t);)t = e.getByte(); if (-1 !== t && 126 !== t) { var a, r, i = this.bufferLength; if (122 === t) { a = this.ensureBuffer(i + 4); for (r = 0; r < 4; ++r)a[i + r] = 0; this.bufferLength += 4 } else { var s = this.input; s[0] = t; for (r = 1; r < 5; ++r) { t = e.getByte(); for (; (0, n.isWhiteSpace)(t);)t = e.getByte(); s[r] = t; if (-1 === t || 126 === t) break } a = this.ensureBuffer(i + r - 1); this.bufferLength += r - 1; if (r < 5) { for (; r < 5; ++r)s[r] = 117; this.eof = !0 } var o = 0; for (r = 0; r < 5; ++r)o = 85 * o + (s[r] - 33); for (r = 3; r >= 0; --r) { a[i + r] = 255 & o; o >>= 8 } } } else this.eof = !0 }; return e }(); t.Ascii85Stream = f; var g = function () { function e(e, t) { this.str = e; this.dict = e.dict; this.firstDigit = -1; t && (t *= .5); c.call(this, t) } e.prototype = Object.create(c.prototype); e.prototype.readBlock = function () { var e = this.str.getBytes(8e3); if (e.length) { for (var t = e.length + 1 >> 1, a = this.ensureBuffer(this.bufferLength + t), r = this.bufferLength, i = this.firstDigit, n = 0, s = e.length; n < s; n++) { var o, c = e[n]; if (c >= 48 && c <= 57) o = 15 & c; else { if (!(c >= 65 && c <= 70 || c >= 97 && c <= 102)) { if (62 === c) { this.eof = !0; break } continue } o = 9 + (15 & c) } if (i < 0) i = o; else { a[r++] = i << 4 | o; i = -1 } } if (i >= 0 && this.eof) { a[r++] = i << 4; i = -1 } this.firstDigit = i; this.bufferLength = r } else this.eof = !0 }; return e }(); t.AsciiHexStream = g; var m = function () { function e(e, t) { this.str = e; this.dict = e.dict; c.call(this, t) } e.prototype = Object.create(c.prototype); e.prototype.readBlock = function () { var e = this.str.getBytes(2); if (!e || e.length < 2 || 128 === e[0]) this.eof = !0; else { var t, a = this.bufferLength, r = e[0]; if (r < 128) { (t = this.ensureBuffer(a + r + 1))[a++] = e[1]; if (r > 0) { var i = this.str.getBytes(r); t.set(i, a); a += r } } else { r = 257 - r; var n = e[1]; t = this.ensureBuffer(a + r + 1); for (var s = 0; s < r; s++)t[a++] = n } this.bufferLength = a } }; return e }(); t.RunLengthStream = m; var p = function () { function e(e, t, a) { this.str = e; this.dict = e.dict; this.cachedData = 0; this.bitsCached = 0; for (var r = { earlyChange: a, codeLength: 9, nextCode: 258, dictionaryValues: new Uint8Array(4096), dictionaryLengths: new Uint16Array(4096), dictionaryPrevCodes: new Uint16Array(4096), currentSequence: new Uint8Array(4096), currentSequenceLength: 0 }, i = 0; i < 256; ++i) { r.dictionaryValues[i] = i; r.dictionaryLengths[i] = 1 } this.lzwState = r; c.call(this, t) } e.prototype = Object.create(c.prototype); e.prototype.readBits = function (e) { for (var t = this.bitsCached, a = this.cachedData; t < e;) { var r = this.str.getByte(); if (-1 === r) { this.eof = !0; return null } a = a << 8 | r; t += 8 } this.bitsCached = t -= e; this.cachedData = a; this.lastCode = null; return a >>> t & (1 << e) - 1 }; e.prototype.readBlock = function () { var e, t, a, r = 1024, i = this.lzwState; if (i) { var n = i.earlyChange, s = i.nextCode, o = i.dictionaryValues, c = i.dictionaryLengths, l = i.dictionaryPrevCodes, h = i.codeLength, u = i.prevCode, d = i.currentSequence, f = i.currentSequenceLength, g = 0, m = this.bufferLength, p = this.ensureBuffer(this.bufferLength + r); for (e = 0; e < 512; e++) { var b = this.readBits(h), y = f > 0; if (b < 256) { d[0] = b; f = 1 } else { if (!(b >= 258)) { if (256 === b) { h = 9; s = 258; f = 0; continue } this.eof = !0; delete this.lzwState; break } if (b < s) for (t = (f = c[b]) - 1, a = b; t >= 0; t--) { d[t] = o[a]; a = l[a] } else d[f++] = d[0] } if (y) { l[s] = u; c[s] = c[u] + 1; o[s] = d[0]; h = ++s + n & s + n - 1 ? h : 0 | Math.min(Math.log(s + n) / .6931471805599453 + 1, 12) } u = b; if (r < (g += f)) { do { r += 512 } while (r < g); p = this.ensureBuffer(this.bufferLength + r) } for (t = 0; t < f; t++)p[m++] = d[t] } i.nextCode = s; i.codeLength = h; i.prevCode = u; i.currentSequenceLength = f; this.bufferLength = m } }; return e }(); t.LZWStream = p; var b = function () { function e() { s.call(this, new Uint8Array(0)) } e.prototype = s.prototype; return e }(); t.NullStream = b }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.CCITTFaxStream = void 0; var r = a(4), i = a(13), n = a(11), s = function () { function e(e, t, a) { this.str = e; this.dict = e.dict; (0, r.isDict)(a) || (a = r.Dict.empty); const s = { next: () => e.getByte() }; this.ccittFaxDecoder = new i.CCITTFaxDecoder(s, { K: a.get("K"), EndOfLine: a.get("EndOfLine"), EncodedByteAlign: a.get("EncodedByteAlign"), Columns: a.get("Columns"), Rows: a.get("Rows"), EndOfBlock: a.get("EndOfBlock"), BlackIs1: a.get("BlackIs1") }); n.DecodeStream.call(this, t) } e.prototype = Object.create(n.DecodeStream.prototype); e.prototype.readBlock = function () { for (; !this.eof;) { const e = this.ccittFaxDecoder.readNextChar(); if (-1 === e) { this.eof = !0; return } this.ensureBuffer(this.bufferLength + 1); this.buffer[this.bufferLength++] = e } }; return e }(); t.CCITTFaxStream = s }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.CCITTFaxDecoder = void 0; var r = a(2); const i = function () { const e = [[-1, -1], [-1, -1], [7, 8], [7, 7], [6, 6], [6, 6], [6, 5], [6, 5], [4, 0], [4, 0], [4, 0], [4, 0], [4, 0], [4, 0], [4, 0], [4, 0], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2]], t = [[-1, -1], [12, -2], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]], a = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]], i = [[-1, -1], [-1, -1], [12, -2], [12, -2], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]], n = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]], s = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]]; function o(e, t = {}) { if (!e || "function" != typeof e.next) throw new Error('CCITTFaxDecoder - invalid "source" parameter.'); this.source = e; this.eof = !1; this.encoding = t.K || 0; this.eoline = t.EndOfLine || !1; this.byteAlign = t.EncodedByteAlign || !1; this.columns = t.Columns || 1728; this.rows = t.Rows || 0; let a, r = t.EndOfBlock; null == r && (r = !0); this.eoblock = r; this.black = t.BlackIs1 || !1; this.codingLine = new Uint32Array(this.columns + 1); this.refLine = new Uint32Array(this.columns + 2); this.codingLine[0] = this.columns; this.codingPos = 0; this.row = 0; this.nextLine2D = this.encoding < 0; this.inputBits = 0; this.inputBuf = 0; this.outputBits = 0; this.rowsDone = !1; for (; 0 === (a = this._lookBits(12));)this._eatBits(1); 1 === a && this._eatBits(12); if (this.encoding > 0) { this.nextLine2D = !this._lookBits(1); this._eatBits(1) } } o.prototype = { readNextChar() { if (this.eof) return -1; const e = this.refLine, t = this.codingLine, a = this.columns; let i, n, s, o, c; if (0 === this.outputBits) { this.rowsDone && (this.eof = !0); if (this.eof) return -1; this.err = !1; let s, c, l; if (this.nextLine2D) { for (o = 0; t[o] < a; ++o)e[o] = t[o]; e[o++] = a; e[o] = a; t[0] = 0; this.codingPos = 0; i = 0; n = 0; for (; t[this.codingPos] < a;) { s = this._getTwoDimCode(); switch (s) { case 0: this._addPixels(e[i + 1], n); e[i + 1] < a && (i += 2); break; case 1: s = c = 0; if (n) { do { s += l = this._getBlackCode() } while (l >= 64); do { c += l = this._getWhiteCode() } while (l >= 64) } else { do { s += l = this._getWhiteCode() } while (l >= 64); do { c += l = this._getBlackCode() } while (l >= 64) } this._addPixels(t[this.codingPos] + s, n); t[this.codingPos] < a && this._addPixels(t[this.codingPos] + c, 1 ^ n); for (; e[i] <= t[this.codingPos] && e[i] < a;)i += 2; break; case 7: this._addPixels(e[i] + 3, n); n ^= 1; if (t[this.codingPos] < a) { ++i; for (; e[i] <= t[this.codingPos] && e[i] < a;)i += 2 } break; case 5: this._addPixels(e[i] + 2, n); n ^= 1; if (t[this.codingPos] < a) { ++i; for (; e[i] <= t[this.codingPos] && e[i] < a;)i += 2 } break; case 3: this._addPixels(e[i] + 1, n); n ^= 1; if (t[this.codingPos] < a) { ++i; for (; e[i] <= t[this.codingPos] && e[i] < a;)i += 2 } break; case 2: this._addPixels(e[i], n); n ^= 1; if (t[this.codingPos] < a) { ++i; for (; e[i] <= t[this.codingPos] && e[i] < a;)i += 2 } break; case 8: this._addPixelsNeg(e[i] - 3, n); n ^= 1; if (t[this.codingPos] < a) { i > 0 ? --i : ++i; for (; e[i] <= t[this.codingPos] && e[i] < a;)i += 2 } break; case 6: this._addPixelsNeg(e[i] - 2, n); n ^= 1; if (t[this.codingPos] < a) { i > 0 ? --i : ++i; for (; e[i] <= t[this.codingPos] && e[i] < a;)i += 2 } break; case 4: this._addPixelsNeg(e[i] - 1, n); n ^= 1; if (t[this.codingPos] < a) { i > 0 ? --i : ++i; for (; e[i] <= t[this.codingPos] && e[i] < a;)i += 2 } break; case -1: this._addPixels(a, 0); this.eof = !0; break; default: (0, r.info)("bad 2d code"); this._addPixels(a, 0); this.err = !0 } } } else { t[0] = 0; this.codingPos = 0; n = 0; for (; t[this.codingPos] < a;) { s = 0; if (n) do { s += l = this._getBlackCode() } while (l >= 64); else do { s += l = this._getWhiteCode() } while (l >= 64); this._addPixels(t[this.codingPos] + s, n); n ^= 1 } } let h = !1; this.byteAlign && (this.inputBits &= -8); if (this.eoblock || this.row !== this.rows - 1) { s = this._lookBits(12); if (this.eoline) for (; -1 !== s && 1 !== s;) { this._eatBits(1); s = this._lookBits(12) } else for (; 0 === s;) { this._eatBits(1); s = this._lookBits(12) } if (1 === s) { this._eatBits(12); h = !0 } else -1 === s && (this.eof = !0) } else this.rowsDone = !0; if (!this.eof && this.encoding > 0 && !this.rowsDone) { this.nextLine2D = !this._lookBits(1); this._eatBits(1) } if (this.eoblock && h && this.byteAlign) { s = this._lookBits(12); if (1 === s) { this._eatBits(12); if (this.encoding > 0) { this._lookBits(1); this._eatBits(1) } if (this.encoding >= 0) for (o = 0; o < 4; ++o) { s = this._lookBits(12); 1 !== s && (0, r.info)("bad rtc code: " + s); this._eatBits(12); if (this.encoding > 0) { this._lookBits(1); this._eatBits(1) } } this.eof = !0 } } else if (this.err && this.eoline) { for (; ;) { s = this._lookBits(13); if (-1 === s) { this.eof = !0; return -1 } if (s >> 1 == 1) break; this._eatBits(1) } this._eatBits(12); if (this.encoding > 0) { this._eatBits(1); this.nextLine2D = !(1 & s) } } t[0] > 0 ? this.outputBits = t[this.codingPos = 0] : this.outputBits = t[this.codingPos = 1]; this.row++ } if (this.outputBits >= 8) { c = 1 & this.codingPos ? 0 : 255; this.outputBits -= 8; if (0 === this.outputBits && t[this.codingPos] < a) { this.codingPos++; this.outputBits = t[this.codingPos] - t[this.codingPos - 1] } } else { s = 8; c = 0; do { if (this.outputBits > s) { c <<= s; 1 & this.codingPos || (c |= 255 >> 8 - s); this.outputBits -= s; s = 0 } else { c <<= this.outputBits; 1 & this.codingPos || (c |= 255 >> 8 - this.outputBits); s -= this.outputBits; this.outputBits = 0; if (t[this.codingPos] < a) { this.codingPos++; this.outputBits = t[this.codingPos] - t[this.codingPos - 1] } else if (s > 0) { c <<= s; s = 0 } } } while (s) } this.black && (c ^= 255); return c }, _addPixels(e, t) { const a = this.codingLine; let i = this.codingPos; if (e > a[i]) { if (e > this.columns) { (0, r.info)("row is wrong length"); this.err = !0; e = this.columns } 1 & i ^ t && ++i; a[i] = e } this.codingPos = i }, _addPixelsNeg(e, t) { const a = this.codingLine; let i = this.codingPos; if (e > a[i]) { if (e > this.columns) { (0, r.info)("row is wrong length"); this.err = !0; e = this.columns } 1 & i ^ t && ++i; a[i] = e } else if (e < a[i]) { if (e < 0) { (0, r.info)("invalid code"); this.err = !0; e = 0 } for (; i > 0 && e < a[i - 1];)--i; a[i] = e } this.codingPos = i }, _findTableCode(e, t, a, r) { const i = r || 0; for (let r = e; r <= t; ++r) { let e = this._lookBits(r); if (-1 === e) return [!0, 1, !1]; r < t && (e <<= t - r); if (!i || e >= i) { const t = a[e - i]; if (t[0] === r) { this._eatBits(r); return [!0, t[1], !0] } } } return [!1, 0, !1] }, _getTwoDimCode() { let t, a = 0; if (this.eoblock) { a = this._lookBits(7); t = e[a]; if (t && t[0] > 0) { this._eatBits(t[0]); return t[1] } } else { const t = this._findTableCode(1, 7, e); if (t[0] && t[2]) return t[1] } (0, r.info)("Bad two dim code"); return -1 }, _getWhiteCode() { let e, i = 0; if (this.eoblock) { i = this._lookBits(12); if (-1 === i) return 1; e = i >> 5 == 0 ? t[i] : a[i >> 3]; if (e[0] > 0) { this._eatBits(e[0]); return e[1] } } else { let e = this._findTableCode(1, 9, a); if (e[0]) return e[1]; e = this._findTableCode(11, 12, t); if (e[0]) return e[1] } (0, r.info)("bad white code"); this._eatBits(1); return 1 }, _getBlackCode() { let e, t; if (this.eoblock) { e = this._lookBits(13); if (-1 === e) return 1; t = e >> 7 == 0 ? i[e] : e >> 9 == 0 && e >> 7 != 0 ? n[(e >> 1) - 64] : s[e >> 7]; if (t[0] > 0) { this._eatBits(t[0]); return t[1] } } else { let e = this._findTableCode(2, 6, s); if (e[0]) return e[1]; e = this._findTableCode(7, 12, n, 64); if (e[0]) return e[1]; e = this._findTableCode(10, 13, i); if (e[0]) return e[1] } (0, r.info)("bad black code"); this._eatBits(1); return 1 }, _lookBits(e) { let t; for (; this.inputBits < e;) { if (-1 === (t = this.source.next())) return 0 === this.inputBits ? -1 : this.inputBuf << e - this.inputBits & 65535 >> 16 - e; this.inputBuf = this.inputBuf << 8 | t; this.inputBits += 8 } return this.inputBuf >> this.inputBits - e & 65535 >> 16 - e }, _eatBits(e) { (this.inputBits -= e) < 0 && (this.inputBits = 0) } }; return o }(); t.CCITTFaxDecoder = i }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.Jbig2Stream = void 0; var r = a(4), i = a(11), n = a(15), s = a(2); const o = function () { function e(e, t, a, r) { this.stream = e; this.maybeLength = t; this.dict = a; this.params = r; i.DecodeStream.call(this, t) } e.prototype = Object.create(i.DecodeStream.prototype); Object.defineProperty(e.prototype, "bytes", { get() { return (0, s.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)) }, configurable: !0 }); e.prototype.ensureBuffer = function (e) { }; e.prototype.readBlock = function () { if (this.eof) return; const e = new n.Jbig2Image, t = []; if ((0, r.isDict)(this.params)) { const e = this.params.get("JBIG2Globals"); if ((0, r.isStream)(e)) { const a = e.getBytes(); t.push({ data: a, start: 0, end: a.length }) } } t.push({ data: this.bytes, start: 0, end: this.bytes.length }); const a = e.parseChunks(t), i = a.length; for (let e = 0; e < i; e++)a[e] ^= 255; this.buffer = a; this.bufferLength = i; this.eof = !0 }; return e }(); t.Jbig2Stream = o }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.Jbig2Image = void 0; var r = a(2), i = a(7), n = a(16), s = a(13); class o extends r.BaseException { constructor(e) { super(`JBIG2 error: ${e}`) } } var c = function () { function e() { } e.prototype = { getContexts(e) { return e in this ? this[e] : this[e] = new Int8Array(65536) } }; function t(e, t, a) { this.data = e; this.start = t; this.end = a } t.prototype = { get decoder() { var e = new n.ArithmeticDecoder(this.data, this.start, this.end); return (0, r.shadow)(this, "decoder", e) }, get contextCache() { var t = new e; return (0, r.shadow)(this, "contextCache", t) } }; function a(e, t, a) { var r = e.getContexts(t), i = 1; function n(e) { for (var t = 0, n = 0; n < e; n++) { var s = a.readBit(r, i); i = i < 256 ? i << 1 | s : 511 & (i << 1 | s) | 256; t = t << 1 | s } return t >>> 0 } var s = n(1), o = n(1) ? n(1) ? n(1) ? n(1) ? n(1) ? n(32) + 4436 : n(12) + 340 : n(8) + 84 : n(6) + 20 : n(4) + 4 : n(2); return 0 === s ? o : o > 0 ? -o : null } function c(e, t, a) { for (var r = e.getContexts("IAID"), i = 1, n = 0; n < a; n++) { i = i << 1 | t.readBit(r, i) } return a < 31 ? i & (1 << a) - 1 : 2147483647 & i } var l = ["SymbolDictionary", null, null, null, "IntermediateTextRegion", null, "ImmediateTextRegion", "ImmediateLosslessTextRegion", null, null, null, null, null, null, null, null, "PatternDictionary", null, null, null, "IntermediateHalftoneRegion", null, "ImmediateHalftoneRegion", "ImmediateLosslessHalftoneRegion", null, null, null, null, null, null, null, null, null, null, null, null, "IntermediateGenericRegion", null, "ImmediateGenericRegion", "ImmediateLosslessGenericRegion", "IntermediateGenericRefinementRegion", null, "ImmediateGenericRefinementRegion", "ImmediateLosslessGenericRefinementRegion", null, null, null, null, "PageInformation", "EndOfPage", "EndOfStripe", "EndOfFile", "Profiles", "Tables", null, null, null, null, null, null, null, null, "Extension"], h = [[{ x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: 2, y: -1 }, { x: -4, y: 0 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }], [{ x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: 2, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: 2, y: -1 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }], [{ x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -2, y: 0 }, { x: -1, y: 0 }], [{ x: -3, y: -1 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -4, y: 0 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }]], u = [{ coding: [{ x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }], reference: [{ x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }, { x: 0, y: 0 }, { x: 1, y: 0 }, { x: -1, y: 1 }, { x: 0, y: 1 }, { x: 1, y: 1 }] }, { coding: [{ x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }], reference: [{ x: 0, y: -1 }, { x: -1, y: 0 }, { x: 0, y: 0 }, { x: 1, y: 0 }, { x: 0, y: 1 }, { x: 1, y: 1 }] }], d = [39717, 1941, 229, 405], f = [32, 8]; function g(e, t, a, r, i, n, s, o) { if (e) { return B(new E(o.data, o.start, o.end), t, a, !1) } if (0 === r && !n && !i && 4 === s.length && 3 === s[0].x && -1 === s[0].y && -3 === s[1].x && -1 === s[1].y && 2 === s[2].x && -2 === s[2].y && -2 === s[3].x && -2 === s[3].y) return function (e, t, a) { var r, i, n, s, o, c, l, h = a.decoder, u = a.contextCache.getContexts("GB"), d = []; for (i = 0; i < t; i++) { o = d[i] = new Uint8Array(e); c = i < 1 ? o : d[i - 1]; r = (l = i < 2 ? o : d[i - 2])[0] << 13 | l[1] << 12 | l[2] << 11 | c[0] << 7 | c[1] << 6 | c[2] << 5 | c[3] << 4; for (n = 0; n < e; n++) { o[n] = s = h.readBit(u, r); r = (31735 & r) << 1 | (n + 3 < e ? l[n + 3] << 11 : 0) | (n + 4 < e ? c[n + 4] << 4 : 0) | s } } return d }(t, a, o); var c = !!n, l = h[r].concat(s); l.sort((function (e, t) { return e.y - t.y || e.x - t.x })); var u, f, g = l.length, m = new Int8Array(g), p = new Int8Array(g), b = [], y = 0, v = 0, w = 0, k = 0; for (f = 0; f < g; f++) { m[f] = l[f].x; p[f] = l[f].y; v = Math.min(v, l[f].x); w = Math.max(w, l[f].x); k = Math.min(k, l[f].y); f < g - 1 && l[f].y === l[f + 1].y && l[f].x === l[f + 1].x - 1 ? y |= 1 << g - 1 - f : b.push(f) } var S = b.length, C = new Int8Array(S), x = new Int8Array(S), A = new Uint16Array(S); for (u = 0; u < S; u++) { f = b[u]; C[u] = l[f].x; x[u] = l[f].y; A[u] = 1 << g - 1 - f } for (var I, F, T, O, P, D = -v, N = -k, M = t - w, L = d[r], R = new Uint8Array(t), U = [], q = o.decoder, j = o.contextCache.getContexts("GB"), _ = 0, z = 0, H = 0; H < a; H++) { if (i) { if (_ ^= q.readBit(j, L)) { U.push(R); continue } } R = new Uint8Array(R); U.push(R); for (I = 0; I < t; I++)if (c && n[H][I]) R[I] = 0; else { if (I >= D && I < M && H >= N) { z = z << 1 & y; for (f = 0; f < S; f++) { F = H + x[f]; T = I + C[f]; (O = U[F][T]) && (z |= O = A[f]) } } else { z = 0; P = g - 1; for (f = 0; f < g; f++, P--)(T = I + m[f]) >= 0 && T < t && (F = H + p[f]) >= 0 && (O = U[F][T]) && (z |= O << P) } var G = q.readBit(j, z); R[I] = G } } return U } function m(e, t, a, r, i, n, s, c, l) { var h = u[a].coding; 0 === a && (h = h.concat([c[0]])); var d, g = h.length, m = new Int32Array(g), p = new Int32Array(g); for (d = 0; d < g; d++) { m[d] = h[d].x; p[d] = h[d].y } var b = u[a].reference; 0 === a && (b = b.concat([c[1]])); var y = b.length, v = new Int32Array(y), w = new Int32Array(y); for (d = 0; d < y; d++) { v[d] = b[d].x; w[d] = b[d].y } for (var k = r[0].length, S = r.length, C = f[a], x = [], A = l.decoder, I = l.contextCache.getContexts("GR"), F = 0, T = 0; T < t; T++) { if (s) { if (F ^= A.readBit(I, C)) throw new o("prediction is not supported") } var E = new Uint8Array(e); x.push(E); for (var O = 0; O < e; O++) { var P, B, D = 0; for (d = 0; d < g; d++) { P = T + p[d]; B = O + m[d]; P < 0 || B < 0 || B >= e ? D <<= 1 : D = D << 1 | x[P][B] } for (d = 0; d < y; d++) { P = T + w[d] - n; B = O + v[d] - i; P < 0 || P >= S || B < 0 || B >= k ? D <<= 1 : D = D << 1 | r[P][B] } var N = A.readBit(I, D); E[O] = N } } return x } function p(e, t, r, i, n, s, l, h, u, d, f, g, p, b, y, v, w, k, S) { if (e && t) throw new o("refinement with Huffman is not supported"); var C, x, A = []; for (C = 0; C < i; C++) { x = new Uint8Array(r); if (n) for (var I = 0; I < r; I++)x[I] = n; A.push(x) } var F = w.decoder, T = w.contextCache, E = e ? -b.tableDeltaT.decode(S) : -a(T, "IADT", F), O = 0; C = 0; for (; C < s;) { E += e ? b.tableDeltaT.decode(S) : a(T, "IADT", F); for (var P = O += e ? b.tableFirstS.decode(S) : a(T, "IAFS", F); ;) { let i = 0; l > 1 && (i = e ? S.readBits(k) : a(T, "IAIT", F)); var B = l * E + i, D = e ? b.symbolIDTable.decode(S) : c(T, F, u), N = t && (e ? S.readBit() : a(T, "IARI", F)), M = h[D], L = M[0].length, R = M.length; if (N) { var U = a(T, "IARDW", F), q = a(T, "IARDH", F); M = m(L += U, R += q, y, M, (U >> 1) + a(T, "IARDX", F), (q >> 1) + a(T, "IARDY", F), !1, v, w) } var j, _, z, H = B - (1 & g ? 0 : R - 1), G = P - (2 & g ? L - 1 : 0); if (d) { for (j = 0; j < R; j++)if (x = A[G + j]) { z = M[j]; var W = Math.min(r - H, L); switch (p) { case 0: for (_ = 0; _ < W; _++)x[H + _] |= z[_]; break; case 2: for (_ = 0; _ < W; _++)x[H + _] ^= z[_]; break; default: throw new o(`operator ${p} is not supported`) } } P += R - 1 } else { for (_ = 0; _ < R; _++)if (x = A[H + _]) { z = M[_]; switch (p) { case 0: for (j = 0; j < L; j++)x[G + j] |= z[j]; break; case 2: for (j = 0; j < L; j++)x[G + j] ^= z[j]; break; default: throw new o(`operator ${p} is not supported`) } } P += L - 1 } C++; var X = e ? b.tableDeltaS.decode(S) : a(T, "IADS", F); if (null === X) break; P += X + f } } return A } function b(e, t) { var a = {}; a.number = (0, i.readUint32)(e, t); var r = e[t + 4], n = 63 & r; if (!l[n]) throw new o("invalid segment type: " + n); a.type = n; a.typeName = l[n]; a.deferredNonRetain = !!(128 & r); var s = !!(64 & r), c = e[t + 5], h = c >> 5 & 7, u = [31 & c], d = t + 6; if (7 === c) { h = 536870911 & (0, i.readUint32)(e, d - 1); d += 3; var f = h + 7 >> 3; u[0] = e[d++]; for (; --f > 0;)u.push(e[d++]) } else if (5 === c || 6 === c) throw new o("invalid referred-to flags"); a.retainBits = u; let g = 4; a.number <= 256 ? g = 1 : a.number <= 65536 && (g = 2); var m, p, b = []; for (m = 0; m < h; m++) { let t; t = 1 === g ? e[d] : 2 === g ? (0, i.readUint16)(e, d) : (0, i.readUint32)(e, d); b.push(t); d += g } a.referredTo = b; if (s) { a.pageAssociation = (0, i.readUint32)(e, d); d += 4 } else a.pageAssociation = e[d++]; a.length = (0, i.readUint32)(e, d); d += 4; if (4294967295 === a.length) { if (38 !== n) throw new o("invalid unknown segment length"); var y = v(e, d), k = !!(1 & e[d + w]), S = new Uint8Array(6); if (!k) { S[0] = 255; S[1] = 172 } S[2] = y.height >>> 24 & 255; S[3] = y.height >> 16 & 255; S[4] = y.height >> 8 & 255; S[5] = 255 & y.height; for (m = d, p = e.length; m < p; m++) { for (var C = 0; C < 6 && S[C] === e[m + C];)C++; if (6 === C) { a.length = m + 6; break } } if (4294967295 === a.length) throw new o("segment end was not found") } a.headerEnd = d; return a } function y(e, t, a, r) { for (var i = [], n = a; n < r;) { var s = b(t, n); n = s.headerEnd; var o = { header: s, data: t }; if (!e.randomAccess) { o.start = n; n += s.length; o.end = n } i.push(o); if (51 === s.type) break } if (e.randomAccess) for (var c = 0, l = i.length; c < l; c++) { i[c].start = n; n += i[c].header.length; i[c].end = n } return i } function v(e, t) { return { width: (0, i.readUint32)(e, t), height: (0, i.readUint32)(e, t + 4), x: (0, i.readUint32)(e, t + 8), y: (0, i.readUint32)(e, t + 12), combinationOperator: 7 & e[t + 16] } } var w = 17; function k(e, t) { var a, r, n, s, c = e.header, l = e.data, h = e.start, u = e.end; switch (c.type) { case 0: var d = {}, f = (0, i.readUint16)(l, h); d.huffman = !!(1 & f); d.refinement = !!(2 & f); d.huffmanDHSelector = f >> 2 & 3; d.huffmanDWSelector = f >> 4 & 3; d.bitmapSizeSelector = f >> 6 & 1; d.aggregationInstancesSelector = f >> 7 & 1; d.bitmapCodingContextUsed = !!(256 & f); d.bitmapCodingContextRetained = !!(512 & f); d.template = f >> 10 & 3; d.refinementTemplate = f >> 12 & 1; h += 2; if (!d.huffman) { s = 0 === d.template ? 4 : 1; r = []; for (n = 0; n < s; n++) { r.push({ x: (0, i.readInt8)(l, h), y: (0, i.readInt8)(l, h + 1) }); h += 2 } d.at = r } if (d.refinement && !d.refinementTemplate) { r = []; for (n = 0; n < 2; n++) { r.push({ x: (0, i.readInt8)(l, h), y: (0, i.readInt8)(l, h + 1) }); h += 2 } d.refinementAt = r } d.numberOfExportedSymbols = (0, i.readUint32)(l, h); h += 4; d.numberOfNewSymbols = (0, i.readUint32)(l, h); h += 4; a = [d, c.number, c.referredTo, l, h, u]; break; case 6: case 7: var g = {}; g.info = v(l, h); h += w; var m = (0, i.readUint16)(l, h); h += 2; g.huffman = !!(1 & m); g.refinement = !!(2 & m); g.logStripSize = m >> 2 & 3; g.stripSize = 1 << g.logStripSize; g.referenceCorner = m >> 4 & 3; g.transposed = !!(64 & m); g.combinationOperator = m >> 7 & 3; g.defaultPixelValue = m >> 9 & 1; g.dsOffset = m << 17 >> 27; g.refinementTemplate = m >> 15 & 1; if (g.huffman) { var p = (0, i.readUint16)(l, h); h += 2; g.huffmanFS = 3 & p; g.huffmanDS = p >> 2 & 3; g.huffmanDT = p >> 4 & 3; g.huffmanRefinementDW = p >> 6 & 3; g.huffmanRefinementDH = p >> 8 & 3; g.huffmanRefinementDX = p >> 10 & 3; g.huffmanRefinementDY = p >> 12 & 3; g.huffmanRefinementSizeSelector = !!(16384 & p) } if (g.refinement && !g.refinementTemplate) { r = []; for (n = 0; n < 2; n++) { r.push({ x: (0, i.readInt8)(l, h), y: (0, i.readInt8)(l, h + 1) }); h += 2 } g.refinementAt = r } g.numberOfSymbolInstances = (0, i.readUint32)(l, h); h += 4; a = [g, c.referredTo, l, h, u]; break; case 16: const e = {}, t = l[h++]; e.mmr = !!(1 & t); e.template = t >> 1 & 3; e.patternWidth = l[h++]; e.patternHeight = l[h++]; e.maxPatternIndex = (0, i.readUint32)(l, h); h += 4; a = [e, c.number, l, h, u]; break; case 22: case 23: const C = {}; C.info = v(l, h); h += w; const x = l[h++]; C.mmr = !!(1 & x); C.template = x >> 1 & 3; C.enableSkip = !!(8 & x); C.combinationOperator = x >> 4 & 7; C.defaultPixelValue = x >> 7 & 1; C.gridWidth = (0, i.readUint32)(l, h); h += 4; C.gridHeight = (0, i.readUint32)(l, h); h += 4; C.gridOffsetX = 4294967295 & (0, i.readUint32)(l, h); h += 4; C.gridOffsetY = 4294967295 & (0, i.readUint32)(l, h); h += 4; C.gridVectorX = (0, i.readUint16)(l, h); h += 2; C.gridVectorY = (0, i.readUint16)(l, h); h += 2; a = [C, c.referredTo, l, h, u]; break; case 38: case 39: var b = {}; b.info = v(l, h); h += w; var y = l[h++]; b.mmr = !!(1 & y); b.template = y >> 1 & 3; b.prediction = !!(8 & y); if (!b.mmr) { s = 0 === b.template ? 4 : 1; r = []; for (n = 0; n < s; n++) { r.push({ x: (0, i.readInt8)(l, h), y: (0, i.readInt8)(l, h + 1) }); h += 2 } b.at = r } a = [b, l, h, u]; break; case 48: var k = { width: (0, i.readUint32)(l, h), height: (0, i.readUint32)(l, h + 4), resolutionX: (0, i.readUint32)(l, h + 8), resolutionY: (0, i.readUint32)(l, h + 12) }; 4294967295 === k.height && delete k.height; var S = l[h + 16]; (0, i.readUint16)(l, h + 17); k.lossless = !!(1 & S); k.refinement = !!(2 & S); k.defaultPixelValue = S >> 2 & 1; k.combinationOperator = S >> 3 & 3; k.requiresBuffer = !!(32 & S); k.combinationOperatorOverride = !!(64 & S); a = [k]; break; case 49: case 50: case 51: break; case 53: a = [c.number, l, h, u]; break; case 62: break; default: throw new o(`segment type ${c.typeName}(${c.type})` + " is not implemented") }var C = "on" + c.typeName; C in t && t[C].apply(t, a) } function S(e, t) { for (var a = 0, r = e.length; a < r; a++)k(e[a], t) } function C() { } C.prototype = { onPageInformation: function (e) { this.currentPageInfo = e; var t = e.width + 7 >> 3, a = new Uint8ClampedArray(t * e.height); if (e.defaultPixelValue) for (var r = 0, i = a.length; r < i; r++)a[r] = 255; this.buffer = a }, drawBitmap: function (e, t) { var a, r, i, n, s = this.currentPageInfo, c = e.width, l = e.height, h = s.width + 7 >> 3, u = s.combinationOperatorOverride ? e.combinationOperator : s.combinationOperator, d = this.buffer, f = 128 >> (7 & e.x), g = e.y * h + (e.x >> 3); switch (u) { case 0: for (a = 0; a < l; a++) { i = f; n = g; for (r = 0; r < c; r++) { t[a][r] && (d[n] |= i); if (!(i >>= 1)) { i = 128; n++ } } g += h } break; case 2: for (a = 0; a < l; a++) { i = f; n = g; for (r = 0; r < c; r++) { t[a][r] && (d[n] ^= i); if (!(i >>= 1)) { i = 128; n++ } } g += h } break; default: throw new o(`operator ${u} is not supported`) } }, onImmediateGenericRegion: function (e, a, r, i) { var n = e.info, s = new t(a, r, i), o = g(e.mmr, n.width, n.height, e.template, e.prediction, null, e.at, s); this.drawBitmap(n, o) }, onImmediateLosslessGenericRegion: function () { this.onImmediateGenericRegion.apply(this, arguments) }, onSymbolDictionary: function (e, r, n, s, l, h) { let u, d; if (e.huffman) { u = function (e, t, a) { let r, i, n, s, c = 0; switch (e.huffmanDHSelector) { case 0: case 1: r = T(e.huffmanDHSelector + 4); break; case 3: r = O(c, t, a); c++; break; default: throw new o("invalid Huffman DH selector") }switch (e.huffmanDWSelector) { case 0: case 1: i = T(e.huffmanDWSelector + 2); break; case 3: i = O(c, t, a); c++; break; default: throw new o("invalid Huffman DW selector") }if (e.bitmapSizeSelector) { n = O(c, t, a); c++ } else n = T(1); s = e.aggregationInstancesSelector ? O(c, t, a) : T(1); return { tableDeltaHeight: r, tableDeltaWidth: i, tableBitmapSize: n, tableAggregateInstances: s } }(e, n, this.customTables); d = new E(s, l, h) } var f = this.symbols; f || (this.symbols = f = {}); for (var b = [], y = 0, v = n.length; y < v; y++) { const e = f[n[y]]; e && (b = b.concat(e)) } var w = new t(s, l, h); f[r] = function (e, t, r, n, s, l, h, u, d, f, b, y) { if (e && t) throw new o("symbol refinement with Huffman is not supported"); var v = [], w = 0, k = (0, i.log2)(r.length + n), S = b.decoder, C = b.contextCache; let x, A; if (e) { x = T(1); A = []; k = Math.max(k, 1) } for (; v.length < n;) { w += e ? l.tableDeltaHeight.decode(y) : a(C, "IADH", S); let i = 0, n = 0; const s = e ? A.length : 0; for (; ;) { var I, F = e ? l.tableDeltaWidth.decode(y) : a(C, "IADW", S); if (null === F) break; i += F; n += i; if (t) { var E = a(C, "IAAI", S); if (E > 1) I = p(e, t, i, w, 0, E, 1, r.concat(v), k, 0, 0, 1, 0, l, d, f, b, 0, y); else { var O = c(C, S, k), D = a(C, "IARDX", S), N = a(C, "IARDY", S); I = m(i, w, d, O < r.length ? r[O] : v[O - r.length], D, N, !1, f, b) } v.push(I) } else if (e) A.push(i); else { I = g(!1, i, w, h, !1, null, u, b); v.push(I) } } if (e && !t) { const e = l.tableBitmapSize.decode(y); y.byteAlign(); let t; if (0 === e) t = P(y, n, w); else { const a = y.end, r = y.position + e; y.end = r; t = B(y, n, w, !1); y.end = a; y.position = r } const a = A.length; if (s === a - 1) v.push(t); else { let e, r, i, n, o, c = 0; for (e = s; e < a; e++) { n = A[e]; i = c + n; o = []; for (r = 0; r < w; r++)o.push(t[r].subarray(c, i)); v.push(o); c = i } } } } for (var M = [], L = [], R = !1, U = r.length + n; L.length < U;) { for (var q = e ? x.decode(y) : a(C, "IAEX", S); q--;)L.push(R); R = !R } for (var j = 0, _ = r.length; j < _; j++)L[j] && M.push(r[j]); for (var z = 0; z < n; j++, z++)L[j] && M.push(v[z]); return M }(e.huffman, e.refinement, b, e.numberOfNewSymbols, e.numberOfExportedSymbols, u, e.template, e.at, e.refinementTemplate, e.refinementAt, w, d) }, onImmediateTextRegion: function (e, a, r, n, s) { var c = e.info; let l, h; for (var u = this.symbols, d = [], f = 0, g = a.length; f < g; f++) { const e = u[a[f]]; e && (d = d.concat(e)) } var m = (0, i.log2)(d.length); if (e.huffman) { h = new E(r, n, s); l = function (e, t, a, r, i) { const n = []; for (let e = 0; e <= 34; e++) { const t = i.readBits(4); n.push(new x([e, t, 0, 0])) } const s = new I(n, !1); n.length = 0; for (let e = 0; e < r;) { const t = s.decode(i); if (t >= 32) { let a, r, s; switch (t) { case 32: if (0 === e) throw new o("no previous value in symbol ID table"); r = i.readBits(2) + 3; a = n[e - 1].prefixLength; break; case 33: r = i.readBits(3) + 3; a = 0; break; case 34: r = i.readBits(7) + 11; a = 0; break; default: throw new o("invalid code length in symbol ID table") }for (s = 0; s < r; s++) { n.push(new x([e, a, 0, 0])); e++ } } else { n.push(new x([e, t, 0, 0])); e++ } } i.byteAlign(); const c = new I(n, !1); let l, h, u, d = 0; switch (e.huffmanFS) { case 0: case 1: l = T(e.huffmanFS + 6); break; case 3: l = O(d, t, a); d++; break; default: throw new o("invalid Huffman FS selector") }switch (e.huffmanDS) { case 0: case 1: case 2: h = T(e.huffmanDS + 8); break; case 3: h = O(d, t, a); d++; break; default: throw new o("invalid Huffman DS selector") }switch (e.huffmanDT) { case 0: case 1: case 2: u = T(e.huffmanDT + 11); break; case 3: u = O(d, t, a); d++; break; default: throw new o("invalid Huffman DT selector") }if (e.refinement) throw new o("refinement with Huffman is not supported"); return { symbolIDTable: c, tableFirstS: l, tableDeltaS: h, tableDeltaT: u } }(e, a, this.customTables, d.length, h) } var b = new t(r, n, s), y = p(e.huffman, e.refinement, c.width, c.height, e.defaultPixelValue, e.numberOfSymbolInstances, e.stripSize, d, m, e.transposed, e.dsOffset, e.referenceCorner, e.combinationOperator, l, e.refinementTemplate, e.refinementAt, b, e.logStripSize, h); this.drawBitmap(c, y) }, onImmediateLosslessTextRegion: function () { this.onImmediateTextRegion.apply(this, arguments) }, onPatternDictionary(e, a, r, i, n) { let s = this.patterns; s || (this.patterns = s = {}); const o = new t(r, i, n); s[a] = function (e, t, a, r, i, n) { const s = []; if (!e) { s.push({ x: -t, y: 0 }); if (0 === i) { s.push({ x: -3, y: -1 }); s.push({ x: 2, y: -2 }); s.push({ x: -2, y: -2 }) } } const o = g(e, (r + 1) * t, a, i, !1, null, s, n), c = []; for (let e = 0; e <= r; e++) { const r = [], i = t * e, n = i + t; for (let e = 0; e < a; e++)r.push(o[e].subarray(i, n)); c.push(r) } return c }(e.mmr, e.patternWidth, e.patternHeight, e.maxPatternIndex, e.template, o) }, onImmediateHalftoneRegion(e, a, r, n, s) { const c = this.patterns[a[0]], l = e.info, h = new t(r, n, s), u = function (e, t, a, r, n, s, c, l, h, u, d, f, m, p, b) { if (c) throw new o("skip is not supported"); if (0 !== l) throw new o("operator " + l + " is not supported in halftone region"); const y = []; let v, w, k; for (v = 0; v < n; v++) { k = new Uint8Array(r); if (s) for (w = 0; w < r; w++)k[w] = s; y.push(k) } const S = t.length, C = t[0], x = C[0].length, A = C.length, I = (0, i.log2)(S), F = []; if (!e) { F.push({ x: a <= 1 ? 3 : 2, y: -1 }); if (0 === a) { F.push({ x: -3, y: -1 }); F.push({ x: 2, y: -2 }); F.push({ x: -2, y: -2 }) } } const T = []; let O, P, D, N, M, L, R, U, q, j, _; e && (O = new E(b.data, b.start, b.end)); for (v = I - 1; v >= 0; v--) { P = e ? B(O, h, u, !0) : g(!1, h, u, a, !1, null, F, b); T[v] = P } for (D = 0; D < u; D++)for (N = 0; N < h; N++) { M = 0; L = 0; for (w = I - 1; w >= 0; w--) { M = T[w][D][N] ^ M; L |= M << w } R = t[L]; U = d + D * p + N * m >> 8; q = f + D * m - N * p >> 8; if (U >= 0 && U + x <= r && q >= 0 && q + A <= n) for (v = 0; v < A; v++) { _ = y[q + v]; j = R[v]; for (w = 0; w < x; w++)_[U + w] |= j[w] } else { let e, t; for (v = 0; v < A; v++) { t = q + v; if (!(t < 0 || t >= n)) { _ = y[t]; j = R[v]; for (w = 0; w < x; w++) { e = U + w; e >= 0 && e < r && (_[e] |= j[w]) } } } } } return y }(e.mmr, c, e.template, l.width, l.height, e.defaultPixelValue, e.enableSkip, e.combinationOperator, e.gridWidth, e.gridHeight, e.gridOffsetX, e.gridOffsetY, e.gridVectorX, e.gridVectorY, h); this.drawBitmap(l, u) }, onImmediateLosslessHalftoneRegion() { this.onImmediateHalftoneRegion.apply(this, arguments) }, onTables(e, t, a, r) { let n = this.customTables; n || (this.customTables = n = {}); n[e] = function (e, t, a) { const r = e[t], n = 4294967295 & (0, i.readUint32)(e, t + 1), s = 4294967295 & (0, i.readUint32)(e, t + 5), o = new E(e, t + 9, a), c = 1 + (r >> 1 & 7), l = 1 + (r >> 4 & 7), h = []; let u, d, f = n; do { u = o.readBits(c); d = o.readBits(l); h.push(new x([f, u, d, 0])); f += 1 << d } while (f < s); u = o.readBits(c); h.push(new x([n - 1, u, 32, 0, "lower"])); u = o.readBits(c); h.push(new x([s, u, 32, 0])); if (1 & r) { u = o.readBits(c); h.push(new x([u, 0])) } return new I(h, !1) }(t, a, r) } }; function x(e) { if (2 === e.length) { this.isOOB = !0; this.rangeLow = 0; this.prefixLength = e[0]; this.rangeLength = 0; this.prefixCode = e[1]; this.isLowerRange = !1 } else { this.isOOB = !1; this.rangeLow = e[0]; this.prefixLength = e[1]; this.rangeLength = e[2]; this.prefixCode = e[3]; this.isLowerRange = "lower" === e[4] } } function A(e) { this.children = []; if (e) { this.isLeaf = !0; this.rangeLength = e.rangeLength; this.rangeLow = e.rangeLow; this.isLowerRange = e.isLowerRange; this.isOOB = e.isOOB } else this.isLeaf = !1 } A.prototype = { buildTree(e, t) { const a = e.prefixCode >> t & 1; if (t <= 0) this.children[a] = new A(e); else { let r = this.children[a]; r || (this.children[a] = r = new A(null)); r.buildTree(e, t - 1) } }, decodeNode(e) { if (this.isLeaf) { if (this.isOOB) return null; const t = e.readBits(this.rangeLength); return this.rangeLow + (this.isLowerRange ? -t : t) } const t = this.children[e.readBit()]; if (!t) throw new o("invalid Huffman data"); return t.decodeNode(e) } }; function I(e, t) { t || this.assignPrefixCodes(e); this.rootNode = new A(null); for (let t = 0, a = e.length; t < a; t++) { const a = e[t]; a.prefixLength > 0 && this.rootNode.buildTree(a, a.prefixLength - 1) } } I.prototype = { decode(e) { return this.rootNode.decodeNode(e) }, assignPrefixCodes(e) { const t = e.length; let a = 0; for (let r = 0; r < t; r++)a = Math.max(a, e[r].prefixLength); const r = new Uint32Array(a + 1); for (let a = 0; a < t; a++)r[e[a].prefixLength]++; let i, n, s, o = 1, c = 0; r[0] = 0; for (; o <= a;) { c = c + r[o - 1] << 1; i = c; n = 0; for (; n < t;) { s = e[n]; if (s.prefixLength === o) { s.prefixCode = i; i++ } n++ } o++ } } }; const F = {}; function T(e) { let t, a = F[e]; if (a) return a; switch (e) { case 1: t = [[0, 1, 4, 0], [16, 2, 8, 2], [272, 3, 16, 6], [65808, 3, 32, 7]]; break; case 2: t = [[0, 1, 0, 0], [1, 2, 0, 2], [2, 3, 0, 6], [3, 4, 3, 14], [11, 5, 6, 30], [75, 6, 32, 62], [6, 63]]; break; case 3: t = [[-256, 8, 8, 254], [0, 1, 0, 0], [1, 2, 0, 2], [2, 3, 0, 6], [3, 4, 3, 14], [11, 5, 6, 30], [-257, 8, 32, 255, "lower"], [75, 7, 32, 126], [6, 62]]; break; case 4: t = [[1, 1, 0, 0], [2, 2, 0, 2], [3, 3, 0, 6], [4, 4, 3, 14], [12, 5, 6, 30], [76, 5, 32, 31]]; break; case 5: t = [[-255, 7, 8, 126], [1, 1, 0, 0], [2, 2, 0, 2], [3, 3, 0, 6], [4, 4, 3, 14], [12, 5, 6, 30], [-256, 7, 32, 127, "lower"], [76, 6, 32, 62]]; break; case 6: t = [[-2048, 5, 10, 28], [-1024, 4, 9, 8], [-512, 4, 8, 9], [-256, 4, 7, 10], [-128, 5, 6, 29], [-64, 5, 5, 30], [-32, 4, 5, 11], [0, 2, 7, 0], [128, 3, 7, 2], [256, 3, 8, 3], [512, 4, 9, 12], [1024, 4, 10, 13], [-2049, 6, 32, 62, "lower"], [2048, 6, 32, 63]]; break; case 7: t = [[-1024, 4, 9, 8], [-512, 3, 8, 0], [-256, 4, 7, 9], [-128, 5, 6, 26], [-64, 5, 5, 27], [-32, 4, 5, 10], [0, 4, 5, 11], [32, 5, 5, 28], [64, 5, 6, 29], [128, 4, 7, 12], [256, 3, 8, 1], [512, 3, 9, 2], [1024, 3, 10, 3], [-1025, 5, 32, 30, "lower"], [2048, 5, 32, 31]]; break; case 8: t = [[-15, 8, 3, 252], [-7, 9, 1, 508], [-5, 8, 1, 253], [-3, 9, 0, 509], [-2, 7, 0, 124], [-1, 4, 0, 10], [0, 2, 1, 0], [2, 5, 0, 26], [3, 6, 0, 58], [4, 3, 4, 4], [20, 6, 1, 59], [22, 4, 4, 11], [38, 4, 5, 12], [70, 5, 6, 27], [134, 5, 7, 28], [262, 6, 7, 60], [390, 7, 8, 125], [646, 6, 10, 61], [-16, 9, 32, 510, "lower"], [1670, 9, 32, 511], [2, 1]]; break; case 9: t = [[-31, 8, 4, 252], [-15, 9, 2, 508], [-11, 8, 2, 253], [-7, 9, 1, 509], [-5, 7, 1, 124], [-3, 4, 1, 10], [-1, 3, 1, 2], [1, 3, 1, 3], [3, 5, 1, 26], [5, 6, 1, 58], [7, 3, 5, 4], [39, 6, 2, 59], [43, 4, 5, 11], [75, 4, 6, 12], [139, 5, 7, 27], [267, 5, 8, 28], [523, 6, 8, 60], [779, 7, 9, 125], [1291, 6, 11, 61], [-32, 9, 32, 510, "lower"], [3339, 9, 32, 511], [2, 0]]; break; case 10: t = [[-21, 7, 4, 122], [-5, 8, 0, 252], [-4, 7, 0, 123], [-3, 5, 0, 24], [-2, 2, 2, 0], [2, 5, 0, 25], [3, 6, 0, 54], [4, 7, 0, 124], [5, 8, 0, 253], [6, 2, 6, 1], [70, 5, 5, 26], [102, 6, 5, 55], [134, 6, 6, 56], [198, 6, 7, 57], [326, 6, 8, 58], [582, 6, 9, 59], [1094, 6, 10, 60], [2118, 7, 11, 125], [-22, 8, 32, 254, "lower"], [4166, 8, 32, 255], [2, 2]]; break; case 11: t = [[1, 1, 0, 0], [2, 2, 1, 2], [4, 4, 0, 12], [5, 4, 1, 13], [7, 5, 1, 28], [9, 5, 2, 29], [13, 6, 2, 60], [17, 7, 2, 122], [21, 7, 3, 123], [29, 7, 4, 124], [45, 7, 5, 125], [77, 7, 6, 126], [141, 7, 32, 127]]; break; case 12: t = [[1, 1, 0, 0], [2, 2, 0, 2], [3, 3, 1, 6], [5, 5, 0, 28], [6, 5, 1, 29], [8, 6, 1, 60], [10, 7, 0, 122], [11, 7, 1, 123], [13, 7, 2, 124], [17, 7, 3, 125], [25, 7, 4, 126], [41, 8, 5, 254], [73, 8, 32, 255]]; break; case 13: t = [[1, 1, 0, 0], [2, 3, 0, 4], [3, 4, 0, 12], [4, 5, 0, 28], [5, 4, 1, 13], [7, 3, 3, 5], [15, 6, 1, 58], [17, 6, 2, 59], [21, 6, 3, 60], [29, 6, 4, 61], [45, 6, 5, 62], [77, 7, 6, 126], [141, 7, 32, 127]]; break; case 14: t = [[-2, 3, 0, 4], [-1, 3, 0, 5], [0, 1, 0, 0], [1, 3, 0, 6], [2, 3, 0, 7]]; break; case 15: t = [[-24, 7, 4, 124], [-8, 6, 2, 60], [-4, 5, 1, 28], [-2, 4, 0, 12], [-1, 3, 0, 4], [0, 1, 0, 0], [1, 3, 0, 5], [2, 4, 0, 13], [3, 5, 1, 29], [5, 6, 2, 61], [9, 7, 4, 125], [-25, 7, 32, 126, "lower"], [25, 7, 32, 127]]; break; default: throw new o(`standard table B.${e} does not exist`) }for (let e = 0, a = t.length; e < a; e++)t[e] = new x(t[e]); a = new I(t, !0); F[e] = a; return a } function E(e, t, a) { this.data = e; this.start = t; this.end = a; this.position = t; this.shift = -1; this.currentByte = 0 } E.prototype = { readBit() { if (this.shift < 0) { if (this.position >= this.end) throw new o("end of data while reading bit"); this.currentByte = this.data[this.position++]; this.shift = 7 } const e = this.currentByte >> this.shift & 1; this.shift--; return e }, readBits(e) { let t, a = 0; for (t = e - 1; t >= 0; t--)a |= this.readBit() << t; return a }, byteAlign() { this.shift = -1 }, next() { return this.position >= this.end ? -1 : this.data[this.position++] } }; function O(e, t, a) { let r = 0; for (let i = 0, n = t.length; i < n; i++) { const n = a[t[i]]; if (n) { if (e === r) return n; r++ } } throw new o("can't find custom Huffman table") } function P(e, t, a) { const r = []; for (let i = 0; i < a; i++) { const a = new Uint8Array(t); r.push(a); for (let r = 0; r < t; r++)a[r] = e.readBit(); e.byteAlign() } return r } function B(e, t, a, r) { const i = { K: -1, Columns: t, Rows: a, BlackIs1: !0, EndOfBlock: r }, n = new s.CCITTFaxDecoder(e, i), o = []; let c, l = !1; for (let e = 0; e < a; e++) { const e = new Uint8Array(t); o.push(e); let a = -1; for (let r = 0; r < t; r++) { if (a < 0) { c = n.readNextChar(); if (-1 === c) { c = 0; l = !0 } a = 7 } e[r] = c >> a & 1; a-- } } if (r && !l) { const e = 5; for (let t = 0; t < e && -1 !== n.readNextChar(); t++); } return o } function D() { } D.prototype = { parseChunks: e => function (e) { for (var t = new C, a = 0, r = e.length; a < r; a++) { var i = e[a]; S(y({}, i.data, i.start, i.end), t) } return t.buffer }(e), parse(e) { const { imgData: t, width: a, height: r } = function (e) { const t = e.length; let a = 0; if (151 !== e[a] || 74 !== e[a + 1] || 66 !== e[a + 2] || 50 !== e[a + 3] || 13 !== e[a + 4] || 10 !== e[a + 5] || 26 !== e[a + 6] || 10 !== e[a + 7]) throw new o("parseJbig2 - invalid header."); const r = Object.create(null); a += 8; const n = e[a++]; r.randomAccess = !(1 & n); if (!(2 & n)) { r.numberOfPages = (0, i.readUint32)(e, a); a += 4 } const s = y(r, e, a, t), c = new C; S(s, c); const { width: l, height: h } = c.currentPageInfo, u = c.buffer, d = new Uint8ClampedArray(l * h); let f = 0, g = 0; for (let e = 0; e < h; e++) { let e, t = 0; for (let a = 0; a < l; a++) { if (!t) { t = 128; e = u[g++] } d[f++] = e & t ? 0 : 255; t >>= 1 } } return { imgData: d, width: l, height: h } }(e); this.width = a; this.height = r; return t } }; return D }(); t.Jbig2Image = c }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.ArithmeticDecoder = void 0; const r = [{ qe: 22017, nmps: 1, nlps: 1, switchFlag: 1 }, { qe: 13313, nmps: 2, nlps: 6, switchFlag: 0 }, { qe: 6145, nmps: 3, nlps: 9, switchFlag: 0 }, { qe: 2753, nmps: 4, nlps: 12, switchFlag: 0 }, { qe: 1313, nmps: 5, nlps: 29, switchFlag: 0 }, { qe: 545, nmps: 38, nlps: 33, switchFlag: 0 }, { qe: 22017, nmps: 7, nlps: 6, switchFlag: 1 }, { qe: 21505, nmps: 8, nlps: 14, switchFlag: 0 }, { qe: 18433, nmps: 9, nlps: 14, switchFlag: 0 }, { qe: 14337, nmps: 10, nlps: 14, switchFlag: 0 }, { qe: 12289, nmps: 11, nlps: 17, switchFlag: 0 }, { qe: 9217, nmps: 12, nlps: 18, switchFlag: 0 }, { qe: 7169, nmps: 13, nlps: 20, switchFlag: 0 }, { qe: 5633, nmps: 29, nlps: 21, switchFlag: 0 }, { qe: 22017, nmps: 15, nlps: 14, switchFlag: 1 }, { qe: 21505, nmps: 16, nlps: 14, switchFlag: 0 }, { qe: 20737, nmps: 17, nlps: 15, switchFlag: 0 }, { qe: 18433, nmps: 18, nlps: 16, switchFlag: 0 }, { qe: 14337, nmps: 19, nlps: 17, switchFlag: 0 }, { qe: 13313, nmps: 20, nlps: 18, switchFlag: 0 }, { qe: 12289, nmps: 21, nlps: 19, switchFlag: 0 }, { qe: 10241, nmps: 22, nlps: 19, switchFlag: 0 }, { qe: 9217, nmps: 23, nlps: 20, switchFlag: 0 }, { qe: 8705, nmps: 24, nlps: 21, switchFlag: 0 }, { qe: 7169, nmps: 25, nlps: 22, switchFlag: 0 }, { qe: 6145, nmps: 26, nlps: 23, switchFlag: 0 }, { qe: 5633, nmps: 27, nlps: 24, switchFlag: 0 }, { qe: 5121, nmps: 28, nlps: 25, switchFlag: 0 }, { qe: 4609, nmps: 29, nlps: 26, switchFlag: 0 }, { qe: 4353, nmps: 30, nlps: 27, switchFlag: 0 }, { qe: 2753, nmps: 31, nlps: 28, switchFlag: 0 }, { qe: 2497, nmps: 32, nlps: 29, switchFlag: 0 }, { qe: 2209, nmps: 33, nlps: 30, switchFlag: 0 }, { qe: 1313, nmps: 34, nlps: 31, switchFlag: 0 }, { qe: 1089, nmps: 35, nlps: 32, switchFlag: 0 }, { qe: 673, nmps: 36, nlps: 33, switchFlag: 0 }, { qe: 545, nmps: 37, nlps: 34, switchFlag: 0 }, { qe: 321, nmps: 38, nlps: 35, switchFlag: 0 }, { qe: 273, nmps: 39, nlps: 36, switchFlag: 0 }, { qe: 133, nmps: 40, nlps: 37, switchFlag: 0 }, { qe: 73, nmps: 41, nlps: 38, switchFlag: 0 }, { qe: 37, nmps: 42, nlps: 39, switchFlag: 0 }, { qe: 21, nmps: 43, nlps: 40, switchFlag: 0 }, { qe: 9, nmps: 44, nlps: 41, switchFlag: 0 }, { qe: 5, nmps: 45, nlps: 42, switchFlag: 0 }, { qe: 1, nmps: 45, nlps: 43, switchFlag: 0 }, { qe: 22017, nmps: 46, nlps: 46, switchFlag: 0 }]; t.ArithmeticDecoder = class { constructor(e, t, a) { this.data = e; this.bp = t; this.dataEnd = a; this.chigh = e[t]; this.clow = 0; this.byteIn(); this.chigh = this.chigh << 7 & 65535 | this.clow >> 9 & 127; this.clow = this.clow << 7 & 65535; this.ct -= 7; this.a = 32768 } byteIn() { const e = this.data; let t = this.bp; if (255 === e[t]) if (e[t + 1] > 143) { this.clow += 65280; this.ct = 8 } else { t++; this.clow += e[t] << 9; this.ct = 7; this.bp = t } else { t++; this.clow += t < this.dataEnd ? e[t] << 8 : 65280; this.ct = 8; this.bp = t } if (this.clow > 65535) { this.chigh += this.clow >> 16; this.clow &= 65535 } } readBit(e, t) { let a = e[t] >> 1, i = 1 & e[t]; const n = r[a], s = n.qe; let o, c = this.a - s; if (this.chigh < s) if (c < s) { c = s; o = i; a = n.nmps } else { c = s; o = 1 ^ i; 1 === n.switchFlag && (i = o); a = n.nlps } else { this.chigh -= s; if (0 != (32768 & c)) { this.a = c; return i } if (c < s) { o = 1 ^ i; 1 === n.switchFlag && (i = o); a = n.nlps } else { o = i; a = n.nmps } } do { 0 === this.ct && this.byteIn(); c <<= 1; this.chigh = this.chigh << 1 & 65535 | this.clow >> 15 & 1; this.clow = this.clow << 1 & 65535; this.ct-- } while (0 == (32768 & c)); this.a = c; e[t] = a << 1 | i; return o } } }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.JpegStream = void 0; var r = a(2), i = a(11), n = a(4), s = a(18); const o = function () { function e(e, t, a, r) { let n; for (; -1 !== (n = e.getByte());)if (255 === n) { e.skip(-1); break } this.stream = e; this.maybeLength = t; this.dict = a; this.params = r; i.DecodeStream.call(this, t) } e.prototype = Object.create(i.DecodeStream.prototype); Object.defineProperty(e.prototype, "bytes", { get: function () { return (0, r.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)) }, configurable: !0 }); e.prototype.ensureBuffer = function (e) { }; e.prototype.readBlock = function () { if (this.eof) return; const e = { decodeTransform: void 0, colorTransform: void 0 }, t = this.dict.getArray("Decode", "D"); if (this.forceRGB && Array.isArray(t)) { const a = this.dict.get("BitsPerComponent") || 8, r = t.length, i = new Int32Array(r); let n = !1; const s = (1 << a) - 1; for (let e = 0; e < r; e += 2) { i[e] = 256 * (t[e + 1] - t[e]) | 0; i[e + 1] = t[e] * s | 0; 256 === i[e] && 0 === i[e + 1] || (n = !0) } n && (e.decodeTransform = i) } if ((0, n.isDict)(this.params)) { const t = this.params.get("ColorTransform"); Number.isInteger(t) && (e.colorTransform = t) } const a = new s.JpegImage(e); a.parse(this.bytes); const r = a.getData({ width: this.drawWidth, height: this.drawHeight, forceRGB: this.forceRGB, isSourcePDF: !0 }); this.buffer = r; this.bufferLength = r.length; this.eof = !0 }; Object.defineProperty(e.prototype, "maybeValidDimensions", { get: function () { const { dict: e, stream: t } = this, a = e.get("Height", "H"), i = t.pos; let n, s = !0, o = !1; for (; -1 !== (n = t.getByte());)if (255 === n) { switch (t.getByte()) { case 192: case 193: case 194: o = !0; t.pos += 2; t.pos += 1; const e = t.getUint16(); if (e === a) break; if (0 === e) { s = !1; break } if (e > 10 * a) { s = !1; break } break; case 195: case 197: case 198: case 199: case 201: case 202: case 203: case 205: case 206: case 207: o = !0; break; case 196: case 204: case 218: case 219: case 220: case 221: case 222: case 223: case 224: case 225: case 226: case 227: case 228: case 229: case 230: case 231: case 232: case 233: case 234: case 235: case 236: case 237: case 238: case 239: case 254: const r = t.getUint16(); r > 2 ? t.skip(r - 2) : t.skip(-2); break; case 255: t.skip(-1); break; case 217: o = !0 }if (o) break } t.pos = i; return (0, r.shadow)(this, "maybeValidDimensions", s) }, configurable: !0 }); e.prototype.getIR = function (e = !1) { return (0, r.createObjectURL)(this.bytes, "image/jpeg", e) }; return e }(); t.JpegStream = o }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.JpegImage = void 0; var r = a(2), i = a(7); class n extends r.BaseException { constructor(e) { super(`JPEG error: ${e}`) } } class s extends r.BaseException { constructor(e, t) { super(e); this.scanLines = t } } class o extends r.BaseException { } var c = function () { var e = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]); function t({ decodeTransform: e = null, colorTransform: t = -1 } = {}) { this._decodeTransform = e; this._colorTransform = t } function a(e, t) { for (var a, r, i = 0, n = [], s = 16; s > 0 && !e[s - 1];)s--; n.push({ children: [], index: 0 }); var o, c = n[0]; for (a = 0; a < s; a++) { for (r = 0; r < e[a]; r++) { (c = n.pop()).children[c.index] = t[i]; for (; c.index > 0;)c = n.pop(); c.index++; n.push(c); for (; n.length <= a;) { n.push(o = { children: [], index: 0 }); c.children[c.index] = o.children; c = o } i++ } if (a + 1 < s) { n.push(o = { children: [], index: 0 }); c.children[c.index] = o.children; c = o } } return n[0].children } function c(e, t, a) { return 64 * ((e.blocksPerLine + 1) * t + a) } function l(t, a, l, h, u, f, g, m, p, b = !1) { var y = l.mcusPerLine, v = l.progressive, w = a, k = 0, S = 0; function C() { if (S > 0) { S--; return k >> S & 1 } if (255 === (k = t[a++])) { var e = t[a++]; if (e) { if (220 === e && b) { a += 2; const e = (0, i.readUint16)(t, a); a += 2; if (e > 0 && e !== l.scanLines) throw new s("Found DNL marker (0xFFDC) while parsing scan data", e) } else if (217 === e) { if (b) { const e = 8 * O; if (e > 0 && e < l.scanLines / 10) throw new s("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter", e) } throw new o("Found EOI marker (0xFFD9) while parsing scan data") } throw new n(`unexpected marker ${(k << 8 | e).toString(16)}`) } } S = 7; return k >>> 7 } function x(e) { for (var t = e; ;) { switch (typeof (t = t[C()])) { case "number": return t; case "object": continue }throw new n("invalid huffman sequence") } } function A(e) { for (var t = 0; e > 0;) { t = t << 1 | C(); e-- } return t } function I(e) { if (1 === e) return 1 === C() ? 1 : -1; var t = A(e); return t >= 1 << e - 1 ? t : t + (-1 << e) + 1 } var F = 0; var T, E = 0; let O = 0; function P(e, t, a, r, i) { var n = a % y; O = (a / y | 0) * e.v + r; var s = n * e.h + i; t(e, c(e, O, s)) } function B(e, t, a) { O = a / e.blocksPerLine | 0; var r = a % e.blocksPerLine; t(e, c(e, O, r)) } var D, N, M, L, R, U, q = h.length; U = v ? 0 === f ? 0 === m ? function (e, t) { var a = x(e.huffmanTableDC), r = 0 === a ? 0 : I(a) << p; e.blockData[t] = e.pred += r } : function (e, t) { e.blockData[t] |= C() << p } : 0 === m ? function (t, a) { if (F > 0) F--; else for (var r = f, i = g; r <= i;) { var n = x(t.huffmanTableAC), s = 15 & n, o = n >> 4; if (0 !== s) { var c = e[r += o]; t.blockData[a + c] = I(s) * (1 << p); r++ } else { if (o < 15) { F = A(o) + (1 << o) - 1; break } r += 16 } } } : function (t, a) { for (var r, i, s = f, o = g, c = 0; s <= o;) { const o = a + e[s], l = t.blockData[o] < 0 ? -1 : 1; switch (E) { case 0: c = (i = x(t.huffmanTableAC)) >> 4; if (0 === (r = 15 & i)) if (c < 15) { F = A(c) + (1 << c); E = 4 } else { c = 16; E = 1 } else { if (1 !== r) throw new n("invalid ACn encoding"); T = I(r); E = c ? 2 : 3 } continue; case 1: case 2: t.blockData[o] ? t.blockData[o] += l * (C() << p) : 0 === --c && (E = 2 === E ? 3 : 0); break; case 3: if (t.blockData[o]) t.blockData[o] += l * (C() << p); else { t.blockData[o] = T << p; E = 0 } break; case 4: t.blockData[o] && (t.blockData[o] += l * (C() << p)) }s++ } 4 === E && 0 === --F && (E = 0) } : function (t, a) { var r = x(t.huffmanTableDC), i = 0 === r ? 0 : I(r); t.blockData[a] = t.pred += i; for (var n = 1; n < 64;) { var s = x(t.huffmanTableAC), o = 15 & s, c = s >> 4; if (0 !== o) { var l = e[n += c]; t.blockData[a + l] = I(o); n++ } else { if (c < 15) break; n += 16 } } }; var j, _, z, H, G = 0; _ = 1 === q ? h[0].blocksPerLine * h[0].blocksPerColumn : y * l.mcusPerColumn; for (; G < _;) { var W = u ? Math.min(_ - G, u) : _; for (N = 0; N < q; N++)h[N].pred = 0; F = 0; if (1 === q) { D = h[0]; for (R = 0; R < W; R++) { B(D, U, G); G++ } } else for (R = 0; R < W; R++) { for (N = 0; N < q; N++) { z = (D = h[N]).h; H = D.v; for (M = 0; M < H; M++)for (L = 0; L < z; L++)P(D, U, G, M, L) } G++ } S = 0; if (!(j = d(t, a))) break; if (j.invalid) { (0, r.warn)("decodeScan - unexpected MCU data, current marker is: " + j.invalid); a = j.offset } var X = j && j.marker; if (!X || X <= 65280) throw new n("decodeScan - a valid marker was not found."); if (!(X >= 65488 && X <= 65495)) break; a += 2 } if ((j = d(t, a)) && j.invalid) { (0, r.warn)("decodeScan - unexpected Scan data, current marker is: " + j.invalid); a = j.offset } return a - w } function h(e, t, a) { var r, i, s, o, c, l, h, u, d, f, g, m, p, b, y, v, w, k = e.quantizationTable, S = e.blockData; if (!k) throw new n("missing required Quantization Table."); for (var C = 0; C < 64; C += 8) { d = S[t + C]; f = S[t + C + 1]; g = S[t + C + 2]; m = S[t + C + 3]; p = S[t + C + 4]; b = S[t + C + 5]; y = S[t + C + 6]; v = S[t + C + 7]; d *= k[C]; if (0 != (f | g | m | p | b | y | v)) { f *= k[C + 1]; g *= k[C + 2]; m *= k[C + 3]; p *= k[C + 4]; b *= k[C + 5]; i = (r = (r = 5793 * d + 128 >> 8) + (i = 5793 * p + 128 >> 8) + 1 >> 1) - i; w = 3784 * (s = g) + 1567 * (o = y *= k[C + 6]) + 128 >> 8; s = 1567 * s - 3784 * o + 128 >> 8; h = (c = (c = 2896 * (f - (v *= k[C + 7])) + 128 >> 8) + (h = b << 4) + 1 >> 1) - h; l = (u = (u = 2896 * (f + v) + 128 >> 8) + (l = m << 4) + 1 >> 1) - l; o = (r = r + (o = w) + 1 >> 1) - o; s = (i = i + s + 1 >> 1) - s; w = 2276 * c + 3406 * u + 2048 >> 12; c = 3406 * c - 2276 * u + 2048 >> 12; u = w; w = 799 * l + 4017 * h + 2048 >> 12; l = 4017 * l - 799 * h + 2048 >> 12; h = w; a[C] = r + u; a[C + 7] = r - u; a[C + 1] = i + h; a[C + 6] = i - h; a[C + 2] = s + l; a[C + 5] = s - l; a[C + 3] = o + c; a[C + 4] = o - c } else { w = 5793 * d + 512 >> 10; a[C] = w; a[C + 1] = w; a[C + 2] = w; a[C + 3] = w; a[C + 4] = w; a[C + 5] = w; a[C + 6] = w; a[C + 7] = w } } for (var x = 0; x < 8; ++x) { d = a[x]; if (0 != ((f = a[x + 8]) | (g = a[x + 16]) | (m = a[x + 24]) | (p = a[x + 32]) | (b = a[x + 40]) | (y = a[x + 48]) | (v = a[x + 56]))) { i = (r = 4112 + ((r = 5793 * d + 2048 >> 12) + (i = 5793 * p + 2048 >> 12) + 1 >> 1)) - i; w = 3784 * (s = g) + 1567 * (o = y) + 2048 >> 12; s = 1567 * s - 3784 * o + 2048 >> 12; o = w; h = (c = (c = 2896 * (f - v) + 2048 >> 12) + (h = b) + 1 >> 1) - h; l = (u = (u = 2896 * (f + v) + 2048 >> 12) + (l = m) + 1 >> 1) - l; w = 2276 * c + 3406 * u + 2048 >> 12; c = 3406 * c - 2276 * u + 2048 >> 12; u = w; w = 799 * l + 4017 * h + 2048 >> 12; l = 4017 * l - 799 * h + 2048 >> 12; (d = (r = r + o + 1 >> 1) + u) < 16 ? d = 0 : d >= 4080 ? d = 255 : d >>= 4; (f = (i = i + s + 1 >> 1) + (h = w)) < 16 ? f = 0 : f >= 4080 ? f = 255 : f >>= 4; (g = (s = i - s) + l) < 16 ? g = 0 : g >= 4080 ? g = 255 : g >>= 4; (m = (o = r - o) + c) < 16 ? m = 0 : m >= 4080 ? m = 255 : m >>= 4; (p = o - c) < 16 ? p = 0 : p >= 4080 ? p = 255 : p >>= 4; (b = s - l) < 16 ? b = 0 : b >= 4080 ? b = 255 : b >>= 4; (y = i - h) < 16 ? y = 0 : y >= 4080 ? y = 255 : y >>= 4; (v = r - u) < 16 ? v = 0 : v >= 4080 ? v = 255 : v >>= 4; S[t + x] = d; S[t + x + 8] = f; S[t + x + 16] = g; S[t + x + 24] = m; S[t + x + 32] = p; S[t + x + 40] = b; S[t + x + 48] = y; S[t + x + 56] = v } else { w = (w = 5793 * d + 8192 >> 14) < -2040 ? 0 : w >= 2024 ? 255 : w + 2056 >> 4; S[t + x] = w; S[t + x + 8] = w; S[t + x + 16] = w; S[t + x + 24] = w; S[t + x + 32] = w; S[t + x + 40] = w; S[t + x + 48] = w; S[t + x + 56] = w } } } function u(e, t) { for (var a = t.blocksPerLine, r = t.blocksPerColumn, i = new Int16Array(64), n = 0; n < r; n++)for (var s = 0; s < a; s++) { h(t, c(t, n, s), i) } return t.blockData } function d(e, t, a = t) { const r = e.length - 1; var n = a < t ? a : t; if (t >= r) return null; var s = (0, i.readUint16)(e, t); if (s >= 65472 && s <= 65534) return { invalid: null, marker: s, offset: t }; for (var o = (0, i.readUint16)(e, n); !(o >= 65472 && o <= 65534);) { if (++n >= r) return null; o = (0, i.readUint16)(e, n) } return { invalid: s.toString(16), marker: o, offset: n } } t.prototype = { parse(t, { dnlScanLines: c = null } = {}) { function h() { const e = (0, i.readUint16)(t, p); let a = (p += 2) + e - 2; var n = d(t, a, p); if (n && n.invalid) { (0, r.warn)("readDataBlock - incorrect length, current marker is: " + n.invalid); a = n.offset } var s = t.subarray(p, a); p += s.length; return s } function f(e) { for (var t = Math.ceil(e.samplesPerLine / 8 / e.maxH), a = Math.ceil(e.scanLines / 8 / e.maxV), r = 0; r < e.components.length; r++) { z = e.components[r]; var i = Math.ceil(Math.ceil(e.samplesPerLine / 8) * z.h / e.maxH), n = Math.ceil(Math.ceil(e.scanLines / 8) * z.v / e.maxV), s = t * z.h, o = 64 * (a * z.v) * (s + 1); z.blockData = new Int16Array(o); z.blocksPerLine = i; z.blocksPerColumn = n } e.mcusPerLine = t; e.mcusPerColumn = a } var g, m, p = 0, b = null, y = null; let v = 0; var w = [], k = [], S = []; let C = (0, i.readUint16)(t, p); p += 2; if (65496 !== C) throw new n("SOI not found"); C = (0, i.readUint16)(t, p); p += 2; e: for (; 65497 !== C;) { var x, A, I; switch (C) { case 65504: case 65505: case 65506: case 65507: case 65508: case 65509: case 65510: case 65511: case 65512: case 65513: case 65514: case 65515: case 65516: case 65517: case 65518: case 65519: case 65534: var F = h(); 65504 === C && 74 === F[0] && 70 === F[1] && 73 === F[2] && 70 === F[3] && 0 === F[4] && (b = { version: { major: F[5], minor: F[6] }, densityUnits: F[7], xDensity: F[8] << 8 | F[9], yDensity: F[10] << 8 | F[11], thumbWidth: F[12], thumbHeight: F[13], thumbData: F.subarray(14, 14 + 3 * F[12] * F[13]) }); 65518 === C && 65 === F[0] && 100 === F[1] && 111 === F[2] && 98 === F[3] && 101 === F[4] && (y = { version: F[5] << 8 | F[6], flags0: F[7] << 8 | F[8], flags1: F[9] << 8 | F[10], transformCode: F[11] }); break; case 65499: for (var T = (0, i.readUint16)(t, p) + (p += 2) - 2; p < T;) { var E = t[p++], O = new Uint16Array(64); if (E >> 4 == 0) for (A = 0; A < 64; A++)O[e[A]] = t[p++]; else { if (E >> 4 != 1) throw new n("DQT - invalid table spec"); for (A = 0; A < 64; A++) { O[e[A]] = (0, i.readUint16)(t, p); p += 2 } } w[15 & E] = O } break; case 65472: case 65473: case 65474: if (g) throw new n("Only single frame JPEGs supported"); p += 2; (g = {}).extended = 65473 === C; g.progressive = 65474 === C; g.precision = t[p++]; const u = (0, i.readUint16)(t, p); p += 2; g.scanLines = c || u; g.samplesPerLine = (0, i.readUint16)(t, p); p += 2; g.components = []; g.componentIds = {}; var P, B = t[p++], D = 0, N = 0; for (x = 0; x < B; x++) { P = t[p]; var M = t[p + 1] >> 4, L = 15 & t[p + 1]; D < M && (D = M); N < L && (N = L); var R = t[p + 2]; I = g.components.push({ h: M, v: L, quantizationId: R, quantizationTable: null }); g.componentIds[P] = I - 1; p += 3 } g.maxH = D; g.maxV = N; f(g); break; case 65476: const J = (0, i.readUint16)(t, p); p += 2; for (x = 2; x < J;) { var U = t[p++], q = new Uint8Array(16), j = 0; for (A = 0; A < 16; A++, p++)j += q[A] = t[p]; var _ = new Uint8Array(j); for (A = 0; A < j; A++, p++)_[A] = t[p]; x += 17 + j; (U >> 4 == 0 ? S : k)[15 & U] = a(q, _) } break; case 65501: p += 2; m = (0, i.readUint16)(t, p); p += 2; break; case 65498: const Z = 1 == ++v && !c; p += 2; var z, H = t[p++], G = []; for (x = 0; x < H; x++) { var W = g.componentIds[t[p++]]; z = g.components[W]; var X = t[p++]; z.huffmanTableDC = S[X >> 4]; z.huffmanTableAC = k[15 & X]; G.push(z) } var V = t[p++], K = t[p++], Y = t[p++]; try { var $ = l(t, p, g, G, m, V, K, Y >> 4, 15 & Y, Z); p += $ } catch (e) { if (e instanceof s) { (0, r.warn)(`${e.message} -- attempting to re-parse the JPEG image.`); return this.parse(t, { dnlScanLines: e.scanLines }) } if (e instanceof o) { (0, r.warn)(`${e.message} -- ignoring the rest of the image data.`); break e } throw e } break; case 65500: p += 4; break; case 65535: 255 !== t[p] && p--; break; default: const Q = d(t, p - 2, p - 3); if (Q && Q.invalid) { (0, r.warn)("JpegImage.parse - unexpected data, current marker is: " + Q.invalid); p = Q.offset; break } if (p >= t.length - 1) { (0, r.warn)("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9)."); break e } throw new n("JpegImage.parse - unknown marker: " + C.toString(16)) }C = (0, i.readUint16)(t, p); p += 2 } this.width = g.samplesPerLine; this.height = g.scanLines; this.jfif = b; this.adobe = y; this.components = []; for (x = 0; x < g.components.length; x++) { var J = w[(z = g.components[x]).quantizationId]; J && (z.quantizationTable = J); this.components.push({ output: u(0, z), scaleX: z.h / g.maxH, scaleY: z.v / g.maxV, blocksPerLine: z.blocksPerLine, blocksPerColumn: z.blocksPerColumn }) } this.numComponents = this.components.length }, _getLinearizedBlockData(e, t, a = !1) { var r, i, n, s, o, c, l, h, u, d, f, g = this.width / e, m = this.height / t, p = 0, b = this.components.length, y = e * t * b, v = new Uint8ClampedArray(y), w = new Uint32Array(e); let k; for (l = 0; l < b; l++) { i = (r = this.components[l]).scaleX * g; n = r.scaleY * m; p = l; f = r.output; s = r.blocksPerLine + 1 << 3; if (i !== k) { for (o = 0; o < e; o++) { h = 0 | o * i; w[o] = (4294967288 & h) << 3 | 7 & h } k = i } for (c = 0; c < t; c++) { d = s * (4294967288 & (h = 0 | c * n)) | (7 & h) << 3; for (o = 0; o < e; o++) { v[p] = f[d + w[o]]; p += b } } } let S = this._decodeTransform; a || 4 !== b || S || (S = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255])); if (S) for (l = 0; l < y;)for (h = 0, u = 0; h < b; h++, l++, u += 2)v[l] = (v[l] * S[u] >> 8) + S[u + 1]; return v }, get _isColorConversionNeeded() { return this.adobe ? !!this.adobe.transformCode : 3 === this.numComponents ? 0 !== this._colorTransform : 1 === this._colorTransform }, _convertYccToRgb: function (e) { for (var t, a, r, i = 0, n = e.length; i < n; i += 3) { t = e[i]; a = e[i + 1]; r = e[i + 2]; e[i] = t - 179.456 + 1.402 * r; e[i + 1] = t + 135.459 - .344 * a - .714 * r; e[i + 2] = t - 226.816 + 1.772 * a } return e }, _convertYcckToRgb: function (e) { for (var t, a, r, i, n = 0, s = 0, o = e.length; s < o; s += 4) { t = e[s]; a = e[s + 1]; r = e[s + 2]; i = e[s + 3]; e[n++] = a * (-660635669420364e-19 * a + .000437130475926232 * r - 54080610064599e-18 * t + .00048449797120281 * i - .154362151871126) - 122.67195406894 + r * (-.000957964378445773 * r + .000817076911346625 * t - .00477271405408747 * i + 1.53380253221734) + t * (.000961250184130688 * t - .00266257332283933 * i + .48357088451265) + i * (-.000336197177618394 * i + .484791561490776); e[n++] = 107.268039397724 + a * (219927104525741e-19 * a - .000640992018297945 * r + .000659397001245577 * t + .000426105652938837 * i - .176491792462875) + r * (-.000778269941513683 * r + .00130872261408275 * t + .000770482631801132 * i - .151051492775562) + t * (.00126935368114843 * t - .00265090189010898 * i + .25802910206845) + i * (-.000318913117588328 * i - .213742400323665); e[n++] = a * (-.000570115196973677 * a - 263409051004589e-19 * r + .0020741088115012 * t - .00288260236853442 * i + .814272968359295) - 20.810012546947 + r * (-153496057440975e-19 * r - .000132689043961446 * t + .000560833691242812 * i - .195152027534049) + t * (.00174418132927582 * t - .00255243321439347 * i + .116935020465145) + i * (-.000343531996510555 * i + .24165260232407) } return e.subarray(0, n) }, _convertYcckToCmyk: function (e) { for (var t, a, r, i = 0, n = e.length; i < n; i += 4) { t = e[i]; a = e[i + 1]; r = e[i + 2]; e[i] = 434.456 - t - 1.402 * r; e[i + 1] = 119.541 - t + .344 * a + .714 * r; e[i + 2] = 481.816 - t - 1.772 * a } return e }, _convertCmykToRgb: function (e) { for (var t, a, r, i, n = 0, s = 0, o = e.length; s < o; s += 4) { t = e[s]; a = e[s + 1]; r = e[s + 2]; i = e[s + 3]; e[n++] = 255 + t * (-6747147073602441e-20 * t + .0008379262121013727 * a + .0002894718188643294 * r + .003264231057537806 * i - 1.1185611867203937) + a * (26374107616089405e-21 * a - 8626949158638572e-20 * r - .0002748769067499491 * i - .02155688794978967) + r * (-3878099212869363e-20 * r - .0003267808279485286 * i + .0686742238595345) - i * (.0003361971776183937 * i + .7430659151342254); e[n++] = 255 + t * (.00013596372813588848 * t + .000924537132573585 * a + .00010567359618683593 * r + .0004791864687436512 * i - .3109689587515875) + a * (-.00023545346108370344 * a + .0002702845253534714 * r + .0020200308977307156 * i - .7488052167015494) + r * (6834815998235662e-20 * r + .00015168452363460973 * i - .09751927774728933) - i * (.0003189131175883281 * i + .7364883807733168); e[n++] = 255 + t * (13598650411385307e-21 * t + .00012423956175490851 * a + .0004751985097583589 * r - 36729317476630422e-22 * i - .05562186980264034) + a * (.00016141380598724676 * a + .0009692239130725186 * r + .0007782692450036253 * i - .44015232367526463) + r * (5.068882914068769e-7 * r + .0017778369011375071 * i - .7591454649749609) - i * (.0003435319965105553 * i + .7063770186160144) } return e.subarray(0, n) }, getData({ width: e, height: t, forceRGB: a = !1, isSourcePDF: r = !1 }) { if (this.numComponents > 4) throw new n("Unsupported color mode"); var i = this._getLinearizedBlockData(e, t, r); if (1 === this.numComponents && a) { for (var s = i.length, o = new Uint8ClampedArray(3 * s), c = 0, l = 0; l < s; l++) { var h = i[l]; o[c++] = h; o[c++] = h; o[c++] = h } return o } if (3 === this.numComponents && this._isColorConversionNeeded) return this._convertYccToRgb(i); if (4 === this.numComponents) { if (this._isColorConversionNeeded) return a ? this._convertYcckToRgb(i) : this._convertYcckToCmyk(i); if (a) return this._convertCmykToRgb(i) } return i } }; return t }(); t.JpegImage = c }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.JpxStream = void 0; var r = a(11), i = a(20), n = a(2); const s = function () { function e(e, t, a, i) { this.stream = e; this.maybeLength = t; this.dict = a; this.params = i; r.DecodeStream.call(this, t) } e.prototype = Object.create(r.DecodeStream.prototype); Object.defineProperty(e.prototype, "bytes", { get: function () { return (0, n.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)) }, configurable: !0 }); e.prototype.ensureBuffer = function (e) { }; e.prototype.readBlock = function () { if (this.eof) return; const e = new i.JpxImage; e.parse(this.bytes); const t = e.width, a = e.height, r = e.componentsCount, n = e.tiles.length; if (1 === n) this.buffer = e.tiles[0].items; else { const i = new Uint8ClampedArray(t * a * r); for (let a = 0; a < n; a++) { const n = e.tiles[a], s = n.width, o = n.height, c = n.left, l = n.top, h = n.items; let u = 0, d = (t * l + c) * r; const f = t * r, g = s * r; for (let e = 0; e < o; e++) { const e = h.subarray(u, u + g); i.set(e, d); u += g; d += f } } this.buffer = i } this.bufferLength = this.buffer.length; this.eof = !0 }; return e }(); t.JpxStream = s }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.JpxImage = void 0; var r = a(2), i = a(7), n = a(16); class s extends r.BaseException { constructor(e) { super(`JPX error: ${e}`) } } var o = function () { var e = { LL: 0, LH: 1, HL: 1, HH: 2 }; function t() { this.failOnCorruptedImage = !1 } t.prototype = { parse: function (e) { if (65359 !== (0, i.readUint16)(e, 0)) for (var t = 0, a = e.length; t < a;) { var n = 8, o = (0, i.readUint32)(e, t), c = (0, i.readUint32)(e, t + 4); t += n; if (1 === o) { o = 4294967296 * (0, i.readUint32)(e, t) + (0, i.readUint32)(e, t + 4); t += 8; n += 8 } 0 === o && (o = a - t + n); if (o < n) throw new s("Invalid box field size"); var l = o - n, h = !0; switch (c) { case 1785737832: h = !1; break; case 1668246642: var u = e[t]; if (1 === u) { var d = (0, i.readUint32)(e, t + 3); switch (d) { case 16: case 17: case 18: break; default: (0, r.warn)("Unknown colorspace " + d) } } else 2 === u && (0, r.info)("ICC profile not supported"); break; case 1785737827: this.parseCodestream(e, t, t + l); break; case 1783636e3: 218793738 !== (0, i.readUint32)(e, t) && (0, r.warn)("Invalid JP2 signature"); break; case 1783634458: case 1718909296: case 1920099697: case 1919251232: case 1768449138: break; default: var f = String.fromCharCode(c >> 24 & 255, c >> 16 & 255, c >> 8 & 255, 255 & c); (0, r.warn)("Unsupported header type " + c + " (" + f + ")") }h && (t += l) } else this.parseCodestream(e, 0, e.length) }, parseImageProperties: function (e) { for (var t = e.getByte(); t >= 0;) { if (65361 === (t << 8 | (t = e.getByte()))) { e.skip(4); var a = e.getInt32() >>> 0, r = e.getInt32() >>> 0, i = e.getInt32() >>> 0, n = e.getInt32() >>> 0; e.skip(16); var o = e.getUint16(); this.width = a - i; this.height = r - n; this.componentsCount = o; this.bitsPerComponent = 8; return } } throw new s("No size marker found in JPX stream") }, parseCodestream: function (e, t, n) { var c = {}, l = !1; try { for (var h = t; h + 1 < n;) { var u = (0, i.readUint16)(e, h); h += 2; var d, f, g, m, p, b, y = 0; switch (u) { case 65359: c.mainHeader = !0; break; case 65497: break; case 65361: y = (0, i.readUint16)(e, h); var k = {}; k.Xsiz = (0, i.readUint32)(e, h + 4); k.Ysiz = (0, i.readUint32)(e, h + 8); k.XOsiz = (0, i.readUint32)(e, h + 12); k.YOsiz = (0, i.readUint32)(e, h + 16); k.XTsiz = (0, i.readUint32)(e, h + 20); k.YTsiz = (0, i.readUint32)(e, h + 24); k.XTOsiz = (0, i.readUint32)(e, h + 28); k.YTOsiz = (0, i.readUint32)(e, h + 32); var x = (0, i.readUint16)(e, h + 36); k.Csiz = x; var A = []; d = h + 38; for (var I = 0; I < x; I++) { var F = { precision: 1 + (127 & e[d]), isSigned: !!(128 & e[d]), XRsiz: e[d + 1], YRsiz: e[d + 2] }; d += 3; a(F, k); A.push(F) } c.SIZ = k; c.components = A; o(c, A); c.QCC = []; c.COC = []; break; case 65372: y = (0, i.readUint16)(e, h); var T = {}; d = h + 2; switch (31 & (f = e[d++])) { case 0: m = 8; p = !0; break; case 1: m = 16; p = !1; break; case 2: m = 16; p = !0; break; default: throw new Error("Invalid SQcd value " + f) }T.noQuantization = 8 === m; T.scalarExpounded = p; T.guardBits = f >> 5; g = []; for (; d < y + h;) { var E = {}; if (8 === m) { E.epsilon = e[d++] >> 3; E.mu = 0 } else { E.epsilon = e[d] >> 3; E.mu = (7 & e[d]) << 8 | e[d + 1]; d += 2 } g.push(E) } T.SPqcds = g; if (c.mainHeader) c.QCD = T; else { c.currentTile.QCD = T; c.currentTile.QCC = [] } break; case 65373: y = (0, i.readUint16)(e, h); var O, P = {}; d = h + 2; if (c.SIZ.Csiz < 257) O = e[d++]; else { O = (0, i.readUint16)(e, d); d += 2 } switch (31 & (f = e[d++])) { case 0: m = 8; p = !0; break; case 1: m = 16; p = !1; break; case 2: m = 16; p = !0; break; default: throw new Error("Invalid SQcd value " + f) }P.noQuantization = 8 === m; P.scalarExpounded = p; P.guardBits = f >> 5; g = []; for (; d < y + h;) { E = {}; if (8 === m) { E.epsilon = e[d++] >> 3; E.mu = 0 } else { E.epsilon = e[d] >> 3; E.mu = (7 & e[d]) << 8 | e[d + 1]; d += 2 } g.push(E) } P.SPqcds = g; c.mainHeader ? c.QCC[O] = P : c.currentTile.QCC[O] = P; break; case 65362: y = (0, i.readUint16)(e, h); var B = {}; d = h + 2; var D = e[d++]; B.entropyCoderWithCustomPrecincts = !!(1 & D); B.sopMarkerUsed = !!(2 & D); B.ephMarkerUsed = !!(4 & D); B.progressionOrder = e[d++]; B.layersCount = (0, i.readUint16)(e, d); d += 2; B.multipleComponentTransform = e[d++]; B.decompositionLevelsCount = e[d++]; B.xcb = 2 + (15 & e[d++]); B.ycb = 2 + (15 & e[d++]); var N = e[d++]; B.selectiveArithmeticCodingBypass = !!(1 & N); B.resetContextProbabilities = !!(2 & N); B.terminationOnEachCodingPass = !!(4 & N); B.verticallyStripe = !!(8 & N); B.predictableTermination = !!(16 & N); B.segmentationSymbolUsed = !!(32 & N); B.reversibleTransformation = e[d++]; if (B.entropyCoderWithCustomPrecincts) { for (var M = []; d < y + h;) { var L = e[d++]; M.push({ PPx: 15 & L, PPy: L >> 4 }) } B.precinctsSizes = M } var R = []; B.selectiveArithmeticCodingBypass && R.push("selectiveArithmeticCodingBypass"); B.resetContextProbabilities && R.push("resetContextProbabilities"); B.terminationOnEachCodingPass && R.push("terminationOnEachCodingPass"); B.verticallyStripe && R.push("verticallyStripe"); B.predictableTermination && R.push("predictableTermination"); if (R.length > 0) { l = !0; throw new Error("Unsupported COD options (" + R.join(", ") + ")") } if (c.mainHeader) c.COD = B; else { c.currentTile.COD = B; c.currentTile.COC = [] } break; case 65424: y = (0, i.readUint16)(e, h); (b = {}).index = (0, i.readUint16)(e, h + 2); b.length = (0, i.readUint32)(e, h + 4); b.dataEnd = b.length + h - 2; b.partIndex = e[h + 8]; b.partsCount = e[h + 9]; c.mainHeader = !1; if (0 === b.partIndex) { b.COD = c.COD; b.COC = c.COC.slice(0); b.QCD = c.QCD; b.QCC = c.QCC.slice(0) } c.currentTile = b; break; case 65427: if (0 === (b = c.currentTile).partIndex) { C(c, b.index); v(c) } w(c, e, h, y = b.dataEnd - h); break; case 65365: case 65367: case 65368: case 65380: y = (0, i.readUint16)(e, h); break; case 65363: throw new Error("Codestream code 0xFF53 (COC) is not implemented"); default: throw new Error("Unknown codestream code: " + u.toString(16)) }h += y } } catch (e) { if (l || this.failOnCorruptedImage) throw new s(e.message); (0, r.warn)("JPX: Trying to recover from: " + e.message) } this.tiles = function (e) { for (var t = e.SIZ, a = e.components, r = t.Csiz, i = [], n = 0, s = e.tiles.length; n < s; n++) { var o, c = e.tiles[n], l = []; for (o = 0; o < r; o++)l[o] = S(e, c, o); var h, u, d, f, g, m, p, b = l[0], y = new Uint8ClampedArray(b.items.length * r), v = { left: b.left, top: b.top, width: b.width, height: b.height, items: y }, w = 0; if (c.codingStyleDefaultParameters.multipleComponentTransform) { var k = 4 === r, C = l[0].items, x = l[1].items, A = l[2].items, I = k ? l[3].items : null; h = a[0].precision - 8; u = .5 + (128 << h); var F = c.components[0], T = r - 3; f = C.length; if (F.codingStyleParameters.reversibleTransformation) for (d = 0; d < f; d++, w += T) { g = C[d] + u; m = x[d]; p = A[d]; const e = g - (p + m >> 2); y[w++] = e + p >> h; y[w++] = e >> h; y[w++] = e + m >> h } else for (d = 0; d < f; d++, w += T) { g = C[d] + u; m = x[d]; p = A[d]; y[w++] = g + 1.402 * p >> h; y[w++] = g - .34413 * m - .71414 * p >> h; y[w++] = g + 1.772 * m >> h } if (k) for (d = 0, w = 3; d < f; d++, w += 4)y[w] = I[d] + u >> h } else for (o = 0; o < r; o++) { var E = l[o].items; h = a[o].precision - 8; u = .5 + (128 << h); for (w = o, d = 0, f = E.length; d < f; d++) { y[w] = E[d] + u >> h; w += r } } i.push(v) } return i }(c); this.width = c.SIZ.Xsiz - c.SIZ.XOsiz; this.height = c.SIZ.Ysiz - c.SIZ.YOsiz; this.componentsCount = c.SIZ.Csiz } }; function a(e, t) { e.x0 = Math.ceil(t.XOsiz / e.XRsiz); e.x1 = Math.ceil(t.Xsiz / e.XRsiz); e.y0 = Math.ceil(t.YOsiz / e.YRsiz); e.y1 = Math.ceil(t.Ysiz / e.YRsiz); e.width = e.x1 - e.x0; e.height = e.y1 - e.y0 } function o(e, t) { for (var a, r = e.SIZ, i = [], n = Math.ceil((r.Xsiz - r.XTOsiz) / r.XTsiz), s = Math.ceil((r.Ysiz - r.YTOsiz) / r.YTsiz), o = 0; o < s; o++)for (var c = 0; c < n; c++) { (a = {}).tx0 = Math.max(r.XTOsiz + c * r.XTsiz, r.XOsiz); a.ty0 = Math.max(r.YTOsiz + o * r.YTsiz, r.YOsiz); a.tx1 = Math.min(r.XTOsiz + (c + 1) * r.XTsiz, r.Xsiz); a.ty1 = Math.min(r.YTOsiz + (o + 1) * r.YTsiz, r.Ysiz); a.width = a.tx1 - a.tx0; a.height = a.ty1 - a.ty0; a.components = []; i.push(a) } e.tiles = i; for (var l = 0, h = r.Csiz; l < h; l++)for (var u = t[l], d = 0, f = i.length; d < f; d++) { var g = {}; a = i[d]; g.tcx0 = Math.ceil(a.tx0 / u.XRsiz); g.tcy0 = Math.ceil(a.ty0 / u.YRsiz); g.tcx1 = Math.ceil(a.tx1 / u.XRsiz); g.tcy1 = Math.ceil(a.ty1 / u.YRsiz); g.width = g.tcx1 - g.tcx0; g.height = g.tcy1 - g.tcy0; a.components[l] = g } } function c(e, t, a) { var r = t.codingStyleParameters, i = {}; if (r.entropyCoderWithCustomPrecincts) { i.PPx = r.precinctsSizes[a].PPx; i.PPy = r.precinctsSizes[a].PPy } else { i.PPx = 15; i.PPy = 15 } i.xcb_ = a > 0 ? Math.min(r.xcb, i.PPx - 1) : Math.min(r.xcb, i.PPx); i.ycb_ = a > 0 ? Math.min(r.ycb, i.PPy - 1) : Math.min(r.ycb, i.PPy); return i } function l(e, t, a) { var r = 1 << a.PPx, i = 1 << a.PPy, n = 0 === t.resLevel, s = 1 << a.PPx + (n ? 0 : -1), o = 1 << a.PPy + (n ? 0 : -1), c = t.trx1 > t.trx0 ? Math.ceil(t.trx1 / r) - Math.floor(t.trx0 / r) : 0, l = t.try1 > t.try0 ? Math.ceil(t.try1 / i) - Math.floor(t.try0 / i) : 0, h = c * l; t.precinctParameters = { precinctWidth: r, precinctHeight: i, numprecinctswide: c, numprecinctshigh: l, numprecincts: h, precinctWidthInSubband: s, precinctHeightInSubband: o } } function h(e, t, a) { var r, i, n, s, o = a.xcb_, c = a.ycb_, l = 1 << o, h = 1 << c, u = t.tbx0 >> o, d = t.tby0 >> c, f = t.tbx1 + l - 1 >> o, g = t.tby1 + h - 1 >> c, m = t.resolution.precinctParameters, p = [], b = []; for (i = d; i < g; i++)for (r = u; r < f; r++) { (n = { cbx: r, cby: i, tbx0: l * r, tby0: h * i, tbx1: l * (r + 1), tby1: h * (i + 1) }).tbx0_ = Math.max(t.tbx0, n.tbx0); n.tby0_ = Math.max(t.tby0, n.tby0); n.tbx1_ = Math.min(t.tbx1, n.tbx1); n.tby1_ = Math.min(t.tby1, n.tby1); s = Math.floor((n.tbx0_ - t.tbx0) / m.precinctWidthInSubband) + Math.floor((n.tby0_ - t.tby0) / m.precinctHeightInSubband) * m.numprecinctswide; n.precinctNumber = s; n.subbandType = t.type; n.Lblock = 3; if (!(n.tbx1_ <= n.tbx0_ || n.tby1_ <= n.tby0_)) { p.push(n); var y = b[s]; if (void 0 !== y) { r < y.cbxMin ? y.cbxMin = r : r > y.cbxMax && (y.cbxMax = r); i < y.cbyMin ? y.cbxMin = i : i > y.cbyMax && (y.cbyMax = i) } else b[s] = y = { cbxMin: r, cbyMin: i, cbxMax: r, cbyMax: i }; n.precinct = y } } t.codeblockParameters = { codeblockWidth: o, codeblockHeight: c, numcodeblockwide: f - u + 1, numcodeblockhigh: g - d + 1 }; t.codeblocks = p; t.precincts = b } function u(e, t, a) { for (var r = [], i = e.subbands, n = 0, s = i.length; n < s; n++)for (var o = i[n].codeblocks, c = 0, l = o.length; c < l; c++) { var h = o[c]; h.precinctNumber === t && r.push(h) } return { layerNumber: a, codeblocks: r } } function d(e) { for (var t = e.SIZ, a = e.currentTile.index, r = e.tiles[a], i = r.codingStyleDefaultParameters.layersCount, n = t.Csiz, o = 0, c = 0; c < n; c++)o = Math.max(o, r.components[c].codingStyleParameters.decompositionLevelsCount); var l = 0, h = 0, d = 0, f = 0; this.nextPacket = function () { for (; l < i; l++) { for (; h <= o; h++) { for (; d < n; d++) { var e = r.components[d]; if (!(h > e.codingStyleParameters.decompositionLevelsCount)) { for (var t = e.resolutions[h], a = t.precinctParameters.numprecincts; f < a;) { var c = u(t, f, l); f++; return c } f = 0 } } d = 0 } h = 0 } throw new s("Out of packets") } } function f(e) { for (var t = e.SIZ, a = e.currentTile.index, r = e.tiles[a], i = r.codingStyleDefaultParameters.layersCount, n = t.Csiz, o = 0, c = 0; c < n; c++)o = Math.max(o, r.components[c].codingStyleParameters.decompositionLevelsCount); var l = 0, h = 0, d = 0, f = 0; this.nextPacket = function () { for (; l <= o; l++) { for (; h < i; h++) { for (; d < n; d++) { var e = r.components[d]; if (!(l > e.codingStyleParameters.decompositionLevelsCount)) { for (var t = e.resolutions[l], a = t.precinctParameters.numprecincts; f < a;) { var c = u(t, f, h); f++; return c } f = 0 } } d = 0 } h = 0 } throw new s("Out of packets") } } function g(e) { var t, a, r, i, n = e.SIZ, o = e.currentTile.index, c = e.tiles[o], l = c.codingStyleDefaultParameters.layersCount, h = n.Csiz, d = 0; for (r = 0; r < h; r++) { var f = c.components[r]; d = Math.max(d, f.codingStyleParameters.decompositionLevelsCount) } var g = new Int32Array(d + 1); for (a = 0; a <= d; ++a) { var m = 0; for (r = 0; r < h; ++r) { var p = c.components[r].resolutions; a < p.length && (m = Math.max(m, p[a].precinctParameters.numprecincts)) } g[a] = m } t = 0; a = 0; r = 0; i = 0; this.nextPacket = function () { for (; a <= d; a++) { for (; i < g[a]; i++) { for (; r < h; r++) { var e = c.components[r]; if (!(a > e.codingStyleParameters.decompositionLevelsCount)) { var n = e.resolutions[a], o = n.precinctParameters.numprecincts; if (!(i >= o)) { for (; t < l;) { var f = u(n, i, t); t++; return f } t = 0 } } } r = 0 } i = 0 } throw new s("Out of packets") } } function m(e) { var t = e.SIZ, a = e.currentTile.index, r = e.tiles[a], i = r.codingStyleDefaultParameters.layersCount, n = t.Csiz, o = y(r), c = o, l = 0, h = 0, d = 0, f = 0, g = 0; this.nextPacket = function () { for (; g < c.maxNumHigh; g++) { for (; f < c.maxNumWide; f++) { for (; d < n; d++) { for (var e = r.components[d], t = e.codingStyleParameters.decompositionLevelsCount; h <= t; h++) { var a = e.resolutions[h], m = o.components[d].resolutions[h], p = b(f, g, m, c, a); if (null !== p) { for (; l < i;) { var y = u(a, p, l); l++; return y } l = 0 } } h = 0 } d = 0 } f = 0 } throw new s("Out of packets") } } function p(e) { var t = e.SIZ, a = e.currentTile.index, r = e.tiles[a], i = r.codingStyleDefaultParameters.layersCount, n = t.Csiz, o = y(r), c = 0, l = 0, h = 0, d = 0, f = 0; this.nextPacket = function () { for (; h < n; ++h) { for (var e = r.components[h], t = o.components[h], a = e.codingStyleParameters.decompositionLevelsCount; f < t.maxNumHigh; f++) { for (; d < t.maxNumWide; d++) { for (; l <= a; l++) { var g = e.resolutions[l], m = t.resolutions[l], p = b(d, f, m, t, g); if (null !== p) { for (; c < i;) { var y = u(g, p, c); c++; return y } c = 0 } } l = 0 } d = 0 } f = 0 } throw new s("Out of packets") } } function b(e, t, a, r, i) { var n = e * r.minWidth, s = t * r.minHeight; if (n % a.width != 0 || s % a.height != 0) return null; var o = s / a.width * i.precinctParameters.numprecinctswide; return n / a.height + o } function y(e) { for (var t = e.components.length, a = Number.MAX_VALUE, r = Number.MAX_VALUE, i = 0, n = 0, s = new Array(t), o = 0; o < t; o++) { for (var c = e.components[o], l = c.codingStyleParameters.decompositionLevelsCount, h = new Array(l + 1), u = Number.MAX_VALUE, d = Number.MAX_VALUE, f = 0, g = 0, m = 1, p = l; p >= 0; --p) { var b = c.resolutions[p], y = m * b.precinctParameters.precinctWidth, v = m * b.precinctParameters.precinctHeight; u = Math.min(u, y); d = Math.min(d, v); f = Math.max(f, b.precinctParameters.numprecinctswide); g = Math.max(g, b.precinctParameters.numprecinctshigh); h[p] = { width: y, height: v }; m <<= 1 } a = Math.min(a, u); r = Math.min(r, d); i = Math.max(i, f); n = Math.max(n, g); s[o] = { resolutions: h, minWidth: u, minHeight: d, maxNumWide: f, maxNumHigh: g } } return { components: s, minWidth: a, minHeight: r, maxNumWide: i, maxNumHigh: n } } function v(e) { for (var t = e.SIZ, a = e.currentTile.index, r = e.tiles[a], i = t.Csiz, n = 0; n < i; n++) { for (var o = r.components[n], u = o.codingStyleParameters.decompositionLevelsCount, b = [], y = [], v = 0; v <= u; v++) { var w, k = c(0, o, v), S = {}, C = 1 << u - v; S.trx0 = Math.ceil(o.tcx0 / C); S.try0 = Math.ceil(o.tcy0 / C); S.trx1 = Math.ceil(o.tcx1 / C); S.try1 = Math.ceil(o.tcy1 / C); S.resLevel = v; l(0, S, k); b.push(S); if (0 === v) { (w = {}).type = "LL"; w.tbx0 = Math.ceil(o.tcx0 / C); w.tby0 = Math.ceil(o.tcy0 / C); w.tbx1 = Math.ceil(o.tcx1 / C); w.tby1 = Math.ceil(o.tcy1 / C); w.resolution = S; h(0, w, k); y.push(w); S.subbands = [w] } else { var x = 1 << u - v + 1, A = []; (w = {}).type = "HL"; w.tbx0 = Math.ceil(o.tcx0 / x - .5); w.tby0 = Math.ceil(o.tcy0 / x); w.tbx1 = Math.ceil(o.tcx1 / x - .5); w.tby1 = Math.ceil(o.tcy1 / x); w.resolution = S; h(0, w, k); y.push(w); A.push(w); (w = {}).type = "LH"; w.tbx0 = Math.ceil(o.tcx0 / x); w.tby0 = Math.ceil(o.tcy0 / x - .5); w.tbx1 = Math.ceil(o.tcx1 / x); w.tby1 = Math.ceil(o.tcy1 / x - .5); w.resolution = S; h(0, w, k); y.push(w); A.push(w); (w = {}).type = "HH"; w.tbx0 = Math.ceil(o.tcx0 / x - .5); w.tby0 = Math.ceil(o.tcy0 / x - .5); w.tbx1 = Math.ceil(o.tcx1 / x - .5); w.tby1 = Math.ceil(o.tcy1 / x - .5); w.resolution = S; h(0, w, k); y.push(w); A.push(w); S.subbands = A } } o.resolutions = b; o.subbands = y } var I = r.codingStyleDefaultParameters.progressionOrder; switch (I) { case 0: r.packetsIterator = new d(e); break; case 1: r.packetsIterator = new f(e); break; case 2: r.packetsIterator = new g(e); break; case 3: r.packetsIterator = new m(e); break; case 4: r.packetsIterator = new p(e); break; default: throw new s(`Unsupported progression order ${I}`) } } function w(e, t, a, r) { var n, s = 0, o = 0, c = !1; function l(e) { for (; o < e;) { var r = t[a + s]; s++; if (c) { n = n << 7 | r; o += 7; c = !1 } else { n = n << 8 | r; o += 8 } 255 === r && (c = !0) } return n >>> (o -= e) & (1 << e) - 1 } function h(e) { if (255 === t[a + s - 1] && t[a + s] === e) { u(1); return !0 } if (255 === t[a + s] && t[a + s + 1] === e) { u(2); return !0 } return !1 } function u(e) { s += e } function d() { o = 0; if (c) { s++; c = !1 } } function f() { if (0 === l(1)) return 1; if (0 === l(1)) return 2; var e = l(2); return e < 3 ? e + 3 : (e = l(5)) < 31 ? e + 6 : (e = l(7)) + 37 } for (var g = e.currentTile.index, m = e.tiles[g], p = e.COD.sopMarkerUsed, b = e.COD.ephMarkerUsed, y = m.packetsIterator; s < r;) { d(); p && h(145) && u(4); var v = y.nextPacket(); if (l(1)) { for (var w, k = v.layerNumber, S = [], C = 0, I = v.codeblocks.length; C < I; C++) { var F = (w = v.codeblocks[C]).precinct, T = w.cbx - F.cbxMin, E = w.cby - F.cbyMin, O = !1, P = !1; if (void 0 !== w.included) O = !!l(1); else { var B, D; if (void 0 !== (F = w.precinct).inclusionTree) B = F.inclusionTree; else { var N = F.cbxMax - F.cbxMin + 1, M = F.cbyMax - F.cbyMin + 1; B = new A(N, M, k); D = new x(N, M); F.inclusionTree = B; F.zeroBitPlanesTree = D } if (B.reset(T, E, k)) for (; ;) { if (!l(1)) { B.incrementValue(k); break } if (!B.nextLevel()) { w.included = !0; O = P = !0; break } } } if (O) { if (P) { (D = F.zeroBitPlanesTree).reset(T, E); for (; ;)if (l(1)) { if (!D.nextLevel()) break } else D.incrementValue(); w.zeroBitPlanes = D.value } for (var L = f(); l(1);)w.Lblock++; var R = (0, i.log2)(L), U = l((L < 1 << R ? R - 1 : R) + w.Lblock); S.push({ codeblock: w, codingpasses: L, dataLength: U }) } } d(); b && h(146); for (; S.length > 0;) { var q = S.shift(); void 0 === (w = q.codeblock).data && (w.data = []); w.data.push({ data: t, start: a + s, end: a + s + q.dataLength, codingpasses: q.codingpasses }); s += q.dataLength } } } return s } function k(e, t, a, r, i, s, o, c) { for (var l = r.tbx0, h = r.tby0, u = r.tbx1 - r.tbx0, d = r.codeblocks, f = "H" === r.type.charAt(0) ? 1 : 0, g = "H" === r.type.charAt(1) ? t : 0, m = 0, p = d.length; m < p; ++m) { var b = d[m], y = b.tbx1_ - b.tbx0_, v = b.tby1_ - b.tby0_; if (0 !== y && 0 !== v && void 0 !== b.data) { var w, k; w = new I(y, v, b.subbandType, b.zeroBitPlanes, s); k = 2; var S, C, x, A = b.data, F = 0, T = 0; for (S = 0, C = A.length; S < C; S++) { F += (x = A[S]).end - x.start; T += x.codingpasses } var E = new Uint8Array(F), O = 0; for (S = 0, C = A.length; S < C; S++) { var P = (x = A[S]).data.subarray(x.start, x.end); E.set(P, O); O += P.length } var B = new n.ArithmeticDecoder(E, 0, F); w.setDecoder(B); for (S = 0; S < T; S++) { switch (k) { case 0: w.runSignificancePropagationPass(); break; case 1: w.runMagnitudeRefinementPass(); break; case 2: w.runCleanupPass(); c && w.checkSegmentationSymbol() }k = (k + 1) % 3 } var D, N, M, L = b.tbx0_ - l + (b.tby0_ - h) * u, R = w.coefficentsSign, U = w.coefficentsMagnitude, q = w.bitsDecoded, j = o ? 0 : .5; O = 0; var _ = "LL" !== r.type; for (S = 0; S < v; S++) { var z = 2 * (L / u | 0) * (t - u) + f + g; for (D = 0; D < y; D++) { if (0 !== (N = U[O])) { N = (N + j) * i; 0 !== R[O] && (N = -N); M = q[O]; var H = _ ? z + (L << 1) : L; e[H] = o && M >= s ? N : N * (1 << s - M) } L++; O++ } L += u - y } } } } function S(t, a, r) { for (var i = a.components[r], n = i.codingStyleParameters, s = i.quantizationParameters, o = n.decompositionLevelsCount, c = s.SPqcds, l = s.scalarExpounded, h = s.guardBits, u = n.segmentationSymbolUsed, d = t.components[r].precision, f = n.reversibleTransformation, g = f ? new E : new T, m = [], p = 0, b = 0; b <= o; b++) { for (var y = i.resolutions[b], v = y.trx1 - y.trx0, w = y.try1 - y.try0, S = new Float32Array(v * w), C = 0, x = y.subbands.length; C < x; C++) { var A, I; if (l) { A = c[p].mu; I = c[p].epsilon; p++ } else { A = c[0].mu; I = c[0].epsilon + (b > 0 ? 1 - b : 0) } var F = y.subbands[C], O = e[F.type]; k(S, v, 0, F, f ? 1 : 2 ** (d + O - I) * (1 + A / 2048), h + I - 1, f, u) } m.push({ width: v, height: w, items: S }) } var P = g.calculate(m, i.tcx0, i.tcy0); return { left: i.tcx0, top: i.tcy0, width: P.width, height: P.height, items: P.items } } function C(e, t) { for (var a = e.SIZ.Csiz, r = e.tiles[t], i = 0; i < a; i++) { var n = r.components[i], s = void 0 !== e.currentTile.QCC[i] ? e.currentTile.QCC[i] : e.currentTile.QCD; n.quantizationParameters = s; var o = void 0 !== e.currentTile.COC[i] ? e.currentTile.COC[i] : e.currentTile.COD; n.codingStyleParameters = o } r.codingStyleDefaultParameters = e.currentTile.COD } var x = function () { function e(e, t) { var a = (0, i.log2)(Math.max(e, t)) + 1; this.levels = []; for (var r = 0; r < a; r++) { var n = { width: e, height: t, items: [] }; this.levels.push(n); e = Math.ceil(e / 2); t = Math.ceil(t / 2) } } e.prototype = { reset: function (e, t) { for (var a, r = 0, i = 0; r < this.levels.length;) { var n = e + t * (a = this.levels[r]).width; if (void 0 !== a.items[n]) { i = a.items[n]; break } a.index = n; e >>= 1; t >>= 1; r++ } r--; (a = this.levels[r]).items[a.index] = i; this.currentLevel = r; delete this.value }, incrementValue: function () { var e = this.levels[this.currentLevel]; e.items[e.index]++ }, nextLevel: function () { var e = this.currentLevel, t = this.levels[e], a = t.items[t.index]; if (--e < 0) { this.value = a; return !1 } this.currentLevel = e; (t = this.levels[e]).items[t.index] = a; return !0 } }; return e }(), A = function () { function e(e, t, a) { var r = (0, i.log2)(Math.max(e, t)) + 1; this.levels = []; for (var n = 0; n < r; n++) { for (var s = new Uint8Array(e * t), o = 0, c = s.length; o < c; o++)s[o] = a; var l = { width: e, height: t, items: s }; this.levels.push(l); e = Math.ceil(e / 2); t = Math.ceil(t / 2) } } e.prototype = { reset: function (e, t, a) { for (var r = 0; r < this.levels.length;) { var i = this.levels[r], n = e + t * i.width; i.index = n; var s = i.items[n]; if (255 === s) break; if (s > a) { this.currentLevel = r; this.propagateValues(); return !1 } e >>= 1; t >>= 1; r++ } this.currentLevel = r - 1; return !0 }, incrementValue: function (e) { var t = this.levels[this.currentLevel]; t.items[t.index] = e + 1; this.propagateValues() }, propagateValues: function () { for (var e = this.currentLevel, t = this.levels[e], a = t.items[t.index]; --e >= 0;)(t = this.levels[e]).items[t.index] = a }, nextLevel: function () { var e = this.currentLevel, t = this.levels[e], a = t.items[t.index]; t.items[t.index] = 255; if (--e < 0) return !1; this.currentLevel = e; (t = this.levels[e]).items[t.index] = a; return !0 } }; return e }(), I = function () { var e = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]), t = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]), a = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]); function r(r, i, n, s, o) { this.width = r; this.height = i; let c; c = "HH" === n ? a : "HL" === n ? t : e; this.contextLabelTable = c; var l = r * i; this.neighborsSignificance = new Uint8Array(l); this.coefficentsSign = new Uint8Array(l); let h; h = o > 14 ? new Uint32Array(l) : o > 6 ? new Uint16Array(l) : new Uint8Array(l); this.coefficentsMagnitude = h; this.processingFlags = new Uint8Array(l); var u = new Uint8Array(l); if (0 !== s) for (var d = 0; d < l; d++)u[d] = s; this.bitsDecoded = u; this.reset() } r.prototype = { setDecoder: function (e) { this.decoder = e }, reset: function () { this.contexts = new Int8Array(19); this.contexts[0] = 8; this.contexts[17] = 92; this.contexts[18] = 6 }, setNeighborsSignificance: function (e, t, a) { var r, i = this.neighborsSignificance, n = this.width, s = this.height, o = t > 0, c = t + 1 < n; if (e > 0) { r = a - n; o && (i[r - 1] += 16); c && (i[r + 1] += 16); i[r] += 4 } if (e + 1 < s) { r = a + n; o && (i[r - 1] += 16); c && (i[r + 1] += 16); i[r] += 4 } o && (i[a - 1] += 1); c && (i[a + 1] += 1); i[a] |= 128 }, runSignificancePropagationPass: function () { for (var e = this.decoder, t = this.width, a = this.height, r = this.coefficentsMagnitude, i = this.coefficentsSign, n = this.neighborsSignificance, s = this.processingFlags, o = this.contexts, c = this.contextLabelTable, l = this.bitsDecoded, h = 0; h < a; h += 4)for (var u = 0; u < t; u++)for (var d = h * t + u, f = 0; f < 4; f++, d += t) { var g = h + f; if (g >= a) break; s[d] &= -2; if (!r[d] && n[d]) { var m = c[n[d]]; if (e.readBit(o, m)) { var p = this.decodeSignBit(g, u, d); i[d] = p; r[d] = 1; this.setNeighborsSignificance(g, u, d); s[d] |= 2 } l[d]++; s[d] |= 1 } } }, decodeSignBit: function (e, t, a) { var r, i, n, s, o, c, l = this.width, h = this.height, u = this.coefficentsMagnitude, d = this.coefficentsSign; s = t > 0 && 0 !== u[a - 1]; if (t + 1 < l && 0 !== u[a + 1]) { n = d[a + 1]; r = s ? 1 - n - (i = d[a - 1]) : 1 - n - n } else r = s ? 1 - (i = d[a - 1]) - i : 0; var f = 3 * r; s = e > 0 && 0 !== u[a - l]; if (e + 1 < h && 0 !== u[a + l]) { n = d[a + l]; r = s ? 1 - n - (i = d[a - l]) + f : 1 - n - n + f } else r = s ? 1 - (i = d[a - l]) - i + f : f; if (r >= 0) { o = 9 + r; c = this.decoder.readBit(this.contexts, o) } else { o = 9 - r; c = 1 ^ this.decoder.readBit(this.contexts, o) } return c }, runMagnitudeRefinementPass: function () { for (var e, t = this.decoder, a = this.width, r = this.height, i = this.coefficentsMagnitude, n = this.neighborsSignificance, s = this.contexts, o = this.bitsDecoded, c = this.processingFlags, l = a * r, h = 4 * a, u = 0; u < l; u = e) { e = Math.min(l, u + h); for (var d = 0; d < a; d++)for (var f = u + d; f < e; f += a)if (i[f] && 0 == (1 & c[f])) { var g = 16; if (0 != (2 & c[f])) { c[f] ^= 2; g = 0 === (127 & n[f]) ? 15 : 14 } var m = t.readBit(s, g); i[f] = i[f] << 1 | m; o[f]++; c[f] |= 1 } } }, runCleanupPass: function () { for (var e, t = this.decoder, a = this.width, r = this.height, i = this.neighborsSignificance, n = this.coefficentsMagnitude, s = this.coefficentsSign, o = this.contexts, c = this.contextLabelTable, l = this.bitsDecoded, h = this.processingFlags, u = a, d = 2 * a, f = 3 * a, g = 0; g < r; g = e) { e = Math.min(g + 4, r); for (var m = g * a, p = g + 3 < r, b = 0; b < a; b++) { var y, v = m + b, w = 0, k = v, S = g; if (p && 0 === h[v] && 0 === h[v + u] && 0 === h[v + d] && 0 === h[v + f] && 0 === i[v] && 0 === i[v + u] && 0 === i[v + d] && 0 === i[v + f]) { if (!t.readBit(o, 18)) { l[v]++; l[v + u]++; l[v + d]++; l[v + f]++; continue } if (0 !== (w = t.readBit(o, 17) << 1 | t.readBit(o, 17))) { S = g + w; k += w * a } y = this.decodeSignBit(S, b, k); s[k] = y; n[k] = 1; this.setNeighborsSignificance(S, b, k); h[k] |= 2; k = v; for (var C = g; C <= S; C++, k += a)l[k]++; w++ } for (S = g + w; S < e; S++, k += a)if (!n[k] && 0 == (1 & h[k])) { var x = c[i[k]]; if (1 === t.readBit(o, x)) { y = this.decodeSignBit(S, b, k); s[k] = y; n[k] = 1; this.setNeighborsSignificance(S, b, k); h[k] |= 2 } l[k]++ } } } }, checkSegmentationSymbol: function () { var e = this.decoder, t = this.contexts; if (10 !== (e.readBit(t, 17) << 3 | e.readBit(t, 17) << 2 | e.readBit(t, 17) << 1 | e.readBit(t, 17))) throw new s("Invalid segmentation symbol") } }; return r }(), F = function () { function e() { } e.prototype.calculate = function (e, t, a) { for (var r = e[0], i = 1, n = e.length; i < n; i++)r = this.iterate(r, e[i], t, a); return r }; e.prototype.extend = function (e, t, a) { var r = t - 1, i = t + 1, n = t + a - 2, s = t + a; e[r--] = e[i++]; e[s++] = e[n--]; e[r--] = e[i++]; e[s++] = e[n--]; e[r--] = e[i++]; e[s++] = e[n--]; e[r] = e[i]; e[s] = e[n] }; e.prototype.iterate = function (e, t, a, r) { var i, n, s, o, c, l, h = e.width, u = e.height, d = e.items, f = t.width, g = t.height, m = t.items; for (s = 0, i = 0; i < u; i++) { o = 2 * i * f; for (n = 0; n < h; n++, s++, o += 2)m[o] = d[s] } d = e.items = null; var p = new Float32Array(f + 8); if (1 === f) { if (0 != (1 & a)) for (l = 0, s = 0; l < g; l++, s += f)m[s] *= .5 } else for (l = 0, s = 0; l < g; l++, s += f) { p.set(m.subarray(s, s + f), 4); this.extend(p, 4, f); this.filter(p, 4, f); m.set(p.subarray(4, 4 + f), s) } var b = 16, y = []; for (i = 0; i < b; i++)y.push(new Float32Array(g + 8)); var v, w = 0; e = 4 + g; if (1 === g) { if (0 != (1 & r)) for (c = 0; c < f; c++)m[c] *= .5 } else for (c = 0; c < f; c++) { if (0 === w) { b = Math.min(f - c, b); for (s = c, o = 4; o < e; s += f, o++)for (v = 0; v < b; v++)y[v][o] = m[s + v]; w = b } var k = y[--w]; this.extend(k, 4, g); this.filter(k, 4, g); if (0 === w) { s = c - b + 1; for (o = 4; o < e; s += f, o++)for (v = 0; v < b; v++)m[s + v] = y[v][o] } } return { width: f, height: g, items: m } }; return e }(), T = function () { function e() { F.call(this) } e.prototype = Object.create(F.prototype); e.prototype.filter = function (e, t, a) { var r, i, n, s, o = a >> 1, c = -1.586134342059924, l = -.052980118572961, h = .882911075530934, u = .443506852043971, d = 1.230174104914001; r = (t |= 0) - 3; for (i = o + 4; i--; r += 2)e[r] *= .8128930661159609; n = u * e[(r = t - 2) - 1]; for (i = o + 3; i--; r += 2) { s = u * e[r + 1]; e[r] = d * e[r] - n - s; if (!i--) break; n = u * e[(r += 2) + 1]; e[r] = d * e[r] - n - s } n = h * e[(r = t - 1) - 1]; for (i = o + 2; i--; r += 2) { s = h * e[r + 1]; e[r] -= n + s; if (!i--) break; n = h * e[(r += 2) + 1]; e[r] -= n + s } n = l * e[(r = t) - 1]; for (i = o + 1; i--; r += 2) { s = l * e[r + 1]; e[r] -= n + s; if (!i--) break; n = l * e[(r += 2) + 1]; e[r] -= n + s } if (0 !== o) { n = c * e[(r = t + 1) - 1]; for (i = o; i--; r += 2) { s = c * e[r + 1]; e[r] -= n + s; if (!i--) break; n = c * e[(r += 2) + 1]; e[r] -= n + s } } }; return e }(), E = function () { function e() { F.call(this) } e.prototype = Object.create(F.prototype); e.prototype.filter = function (e, t, a) { var r, i, n = a >> 1; for (r = t |= 0, i = n + 1; i--; r += 2)e[r] -= e[r - 1] + e[r + 1] + 2 >> 2; for (r = t + 1, i = n; i--; r += 2)e[r] += e[r - 1] + e[r + 1] >> 1 }; return e }(); return t }(); t.JpxImage = o }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.calculateSHA512 = t.calculateSHA384 = t.calculateSHA256 = t.calculateMD5 = t.PDF20 = t.PDF17 = t.CipherTransformFactory = t.ARCFourCipher = t.AES256Cipher = t.AES128Cipher = void 0; var r = a(2), i = a(4), n = a(11), s = function () { function e(e) { this.a = 0; this.b = 0; var t, a, r = new Uint8Array(256), i = 0, n = e.length; for (t = 0; t < 256; ++t)r[t] = t; for (t = 0; t < 256; ++t) { i = i + (a = r[t]) + e[t % n] & 255; r[t] = r[i]; r[i] = a } this.s = r } e.prototype = { encryptBlock: function (e) { var t, a, r, i = e.length, n = this.a, s = this.b, o = this.s, c = new Uint8Array(i); for (t = 0; t < i; ++t) { r = o[s = s + (a = o[n = n + 1 & 255]) & 255]; o[n] = r; o[s] = a; c[t] = e[t] ^ o[a + r & 255] } this.a = n; this.b = s; return c } }; e.prototype.decryptBlock = e.prototype.encryptBlock; return e }(); t.ARCFourCipher = s; var o, c, l = (o = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]), c = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]), function (e, t, a) { var r, i, n, s = 1732584193, l = -271733879, h = -1732584194, u = 271733878, d = a + 72 & -64, f = new Uint8Array(d); for (r = 0; r < a; ++r)f[r] = e[t++]; f[r++] = 128; n = d - 8; for (; r < n;)f[r++] = 0; f[r++] = a << 3 & 255; f[r++] = a >> 5 & 255; f[r++] = a >> 13 & 255; f[r++] = a >> 21 & 255; f[r++] = a >>> 29 & 255; f[r++] = 0; f[r++] = 0; f[r++] = 0; var g = new Int32Array(16); for (r = 0; r < d;) { for (i = 0; i < 16; ++i, r += 4)g[i] = f[r] | f[r + 1] << 8 | f[r + 2] << 16 | f[r + 3] << 24; var m, p, b = s, y = l, v = h, w = u; for (i = 0; i < 64; ++i) { if (i < 16) { m = y & v | ~y & w; p = i } else if (i < 32) { m = w & y | ~w & v; p = 5 * i + 1 & 15 } else if (i < 48) { m = y ^ v ^ w; p = 3 * i + 5 & 15 } else { m = v ^ (y | ~w); p = 7 * i & 15 } var k = w, S = b + m + c[i] + g[p] | 0, C = o[i]; w = v; v = y; y = y + (S << C | S >>> 32 - C) | 0; b = k } s = s + b | 0; l = l + y | 0; h = h + v | 0; u = u + w | 0 } return new Uint8Array([255 & s, s >> 8 & 255, s >> 16 & 255, s >>> 24 & 255, 255 & l, l >> 8 & 255, l >> 16 & 255, l >>> 24 & 255, 255 & h, h >> 8 & 255, h >> 16 & 255, h >>> 24 & 255, 255 & u, u >> 8 & 255, u >> 16 & 255, u >>> 24 & 255]) }); t.calculateMD5 = l; var h = function () { function e(e, t) { this.high = 0 | e; this.low = 0 | t } e.prototype = { and: function (e) { this.high &= e.high; this.low &= e.low }, xor: function (e) { this.high ^= e.high; this.low ^= e.low }, or: function (e) { this.high |= e.high; this.low |= e.low }, shiftRight: function (e) { if (e >= 32) { this.low = this.high >>> e - 32 | 0; this.high = 0 } else { this.low = this.low >>> e | this.high << 32 - e; this.high = this.high >>> e | 0 } }, shiftLeft: function (e) { if (e >= 32) { this.high = this.low << e - 32; this.low = 0 } else { this.high = this.high << e | this.low >>> 32 - e; this.low = this.low << e } }, rotateRight: function (e) { var t, a; if (32 & e) { a = this.low; t = this.high } else { t = this.low; a = this.high } e &= 31; this.low = t >>> e | a << 32 - e; this.high = a >>> e | t << 32 - e }, not: function () { this.high = ~this.high; this.low = ~this.low }, add: function (e) { var t = (this.low >>> 0) + (e.low >>> 0), a = (this.high >>> 0) + (e.high >>> 0); t > 4294967295 && (a += 1); this.low = 0 | t; this.high = 0 | a }, copyTo: function (e, t) { e[t] = this.high >>> 24 & 255; e[t + 1] = this.high >> 16 & 255; e[t + 2] = this.high >> 8 & 255; e[t + 3] = 255 & this.high; e[t + 4] = this.low >>> 24 & 255; e[t + 5] = this.low >> 16 & 255; e[t + 6] = this.low >> 8 & 255; e[t + 7] = 255 & this.low }, assign: function (e) { this.high = e.high; this.low = e.low } }; return e }(), u = function () { function e(e, t) { return e >>> t | e << 32 - t } function t(e, t, a) { return e & t ^ ~e & a } function a(e, t, a) { return e & t ^ e & a ^ t & a } function r(t) { return e(t, 2) ^ e(t, 13) ^ e(t, 22) } function i(t) { return e(t, 6) ^ e(t, 11) ^ e(t, 25) } function n(t) { return e(t, 7) ^ e(t, 18) ^ t >>> 3 } var s = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298]; return function (o, c, l) { var h, u, d, f = 1779033703, g = 3144134277, m = 1013904242, p = 2773480762, b = 1359893119, y = 2600822924, v = 528734635, w = 1541459225, k = 64 * Math.ceil((l + 9) / 64), S = new Uint8Array(k); for (h = 0; h < l; ++h)S[h] = o[c++]; S[h++] = 128; d = k - 8; for (; h < d;)S[h++] = 0; S[h++] = 0; S[h++] = 0; S[h++] = 0; S[h++] = l >>> 29 & 255; S[h++] = l >> 21 & 255; S[h++] = l >> 13 & 255; S[h++] = l >> 5 & 255; S[h++] = l << 3 & 255; var C, x = new Uint32Array(64); for (h = 0; h < k;) { for (u = 0; u < 16; ++u) { x[u] = S[h] << 24 | S[h + 1] << 16 | S[h + 2] << 8 | S[h + 3]; h += 4 } for (u = 16; u < 64; ++u)x[u] = (e(C = x[u - 2], 17) ^ e(C, 19) ^ C >>> 10) + x[u - 7] + n(x[u - 15]) + x[u - 16] | 0; var A, I, F = f, T = g, E = m, O = p, P = b, B = y, D = v, N = w; for (u = 0; u < 64; ++u) { A = N + i(P) + t(P, B, D) + s[u] + x[u]; I = r(F) + a(F, T, E); N = D; D = B; B = P; P = O + A | 0; O = E; E = T; T = F; F = A + I | 0 } f = f + F | 0; g = g + T | 0; m = m + E | 0; p = p + O | 0; b = b + P | 0; y = y + B | 0; v = v + D | 0; w = w + N | 0 } return new Uint8Array([f >> 24 & 255, f >> 16 & 255, f >> 8 & 255, 255 & f, g >> 24 & 255, g >> 16 & 255, g >> 8 & 255, 255 & g, m >> 24 & 255, m >> 16 & 255, m >> 8 & 255, 255 & m, p >> 24 & 255, p >> 16 & 255, p >> 8 & 255, 255 & p, b >> 24 & 255, b >> 16 & 255, b >> 8 & 255, 255 & b, y >> 24 & 255, y >> 16 & 255, y >> 8 & 255, 255 & y, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, 255 & v, w >> 24 & 255, w >> 16 & 255, w >> 8 & 255, 255 & w]) } }(); t.calculateSHA256 = u; var d = function () { function e(e, t, a, r, i) { e.assign(t); e.and(a); i.assign(t); i.not(); i.and(r); e.xor(i) } function t(e, t, a, r, i) { e.assign(t); e.and(a); i.assign(t); i.and(r); e.xor(i); i.assign(a); i.and(r); e.xor(i) } function a(e, t, a) { e.assign(t); e.rotateRight(28); a.assign(t); a.rotateRight(34); e.xor(a); a.assign(t); a.rotateRight(39); e.xor(a) } function r(e, t, a) { e.assign(t); e.rotateRight(14); a.assign(t); a.rotateRight(18); e.xor(a); a.assign(t); a.rotateRight(41); e.xor(a) } function i(e, t, a) { e.assign(t); e.rotateRight(1); a.assign(t); a.rotateRight(8); e.xor(a); a.assign(t); a.shiftRight(7); e.xor(a) } function n(e, t, a) { e.assign(t); e.rotateRight(19); a.assign(t); a.rotateRight(61); e.xor(a); a.assign(t); a.shiftRight(6); e.xor(a) } var s = [new h(1116352408, 3609767458), new h(1899447441, 602891725), new h(3049323471, 3964484399), new h(3921009573, 2173295548), new h(961987163, 4081628472), new h(1508970993, 3053834265), new h(2453635748, 2937671579), new h(2870763221, 3664609560), new h(3624381080, 2734883394), new h(310598401, 1164996542), new h(607225278, 1323610764), new h(1426881987, 3590304994), new h(1925078388, 4068182383), new h(2162078206, 991336113), new h(2614888103, 633803317), new h(3248222580, 3479774868), new h(3835390401, 2666613458), new h(4022224774, 944711139), new h(264347078, 2341262773), new h(604807628, 2007800933), new h(770255983, 1495990901), new h(1249150122, 1856431235), new h(1555081692, 3175218132), new h(1996064986, 2198950837), new h(2554220882, 3999719339), new h(2821834349, 766784016), new h(2952996808, 2566594879), new h(3210313671, 3203337956), new h(3336571891, 1034457026), new h(3584528711, 2466948901), new h(113926993, 3758326383), new h(338241895, 168717936), new h(666307205, 1188179964), new h(773529912, 1546045734), new h(1294757372, 1522805485), new h(1396182291, 2643833823), new h(1695183700, 2343527390), new h(1986661051, 1014477480), new h(2177026350, 1206759142), new h(2456956037, 344077627), new h(2730485921, 1290863460), new h(2820302411, 3158454273), new h(3259730800, 3505952657), new h(3345764771, 106217008), new h(3516065817, 3606008344), new h(3600352804, 1432725776), new h(4094571909, 1467031594), new h(275423344, 851169720), new h(430227734, 3100823752), new h(506948616, 1363258195), new h(659060556, 3750685593), new h(883997877, 3785050280), new h(958139571, 3318307427), new h(1322822218, 3812723403), new h(1537002063, 2003034995), new h(1747873779, 3602036899), new h(1955562222, 1575990012), new h(2024104815, 1125592928), new h(2227730452, 2716904306), new h(2361852424, 442776044), new h(2428436474, 593698344), new h(2756734187, 3733110249), new h(3204031479, 2999351573), new h(3329325298, 3815920427), new h(3391569614, 3928383900), new h(3515267271, 566280711), new h(3940187606, 3454069534), new h(4118630271, 4000239992), new h(116418474, 1914138554), new h(174292421, 2731055270), new h(289380356, 3203993006), new h(460393269, 320620315), new h(685471733, 587496836), new h(852142971, 1086792851), new h(1017036298, 365543100), new h(1126000580, 2618297676), new h(1288033470, 3409855158), new h(1501505948, 4234509866), new h(1607167915, 987167468), new h(1816402316, 1246189591)]; return function (o, c, l, u) { var d, f, g, m, p, b, y, v; if (u = !!u) { d = new h(3418070365, 3238371032); f = new h(1654270250, 914150663); g = new h(2438529370, 812702999); m = new h(355462360, 4144912697); p = new h(1731405415, 4290775857); b = new h(2394180231, 1750603025); y = new h(3675008525, 1694076839); v = new h(1203062813, 3204075428) } else { d = new h(1779033703, 4089235720); f = new h(3144134277, 2227873595); g = new h(1013904242, 4271175723); m = new h(2773480762, 1595750129); p = new h(1359893119, 2917565137); b = new h(2600822924, 725511199); y = new h(528734635, 4215389547); v = new h(1541459225, 327033209) } var w, k, S, C = 128 * Math.ceil((l + 17) / 128), x = new Uint8Array(C); for (w = 0; w < l; ++w)x[w] = o[c++]; x[w++] = 128; S = C - 16; for (; w < S;)x[w++] = 0; x[w++] = 0; x[w++] = 0; x[w++] = 0; x[w++] = 0; x[w++] = 0; x[w++] = 0; x[w++] = 0; x[w++] = 0; x[w++] = 0; x[w++] = 0; x[w++] = 0; x[w++] = l >>> 29 & 255; x[w++] = l >> 21 & 255; x[w++] = l >> 13 & 255; x[w++] = l >> 5 & 255; x[w++] = l << 3 & 255; var A = new Array(80); for (w = 0; w < 80; w++)A[w] = new h(0, 0); var I, F, T = new h(0, 0), E = new h(0, 0), O = new h(0, 0), P = new h(0, 0), B = new h(0, 0), D = new h(0, 0), N = new h(0, 0), M = new h(0, 0), L = new h(0, 0), R = new h(0, 0), U = new h(0, 0), q = new h(0, 0); for (w = 0; w < C;) { for (k = 0; k < 16; ++k) { A[k].high = x[w] << 24 | x[w + 1] << 16 | x[w + 2] << 8 | x[w + 3]; A[k].low = x[w + 4] << 24 | x[w + 5] << 16 | x[w + 6] << 8 | x[w + 7]; w += 8 } for (k = 16; k < 80; ++k) { n(I = A[k], A[k - 2], q); I.add(A[k - 7]); i(U, A[k - 15], q); I.add(U); I.add(A[k - 16]) } T.assign(d); E.assign(f); O.assign(g); P.assign(m); B.assign(p); D.assign(b); N.assign(y); M.assign(v); for (k = 0; k < 80; ++k) { L.assign(M); r(U, B, q); L.add(U); e(U, B, D, N, q); L.add(U); L.add(s[k]); L.add(A[k]); a(R, T, q); t(U, T, E, O, q); R.add(U); I = M; M = N; N = D; D = B; P.add(L); B = P; P = O; O = E; E = T; I.assign(L); I.add(R); T = I } d.add(T); f.add(E); g.add(O); m.add(P); p.add(B); b.add(D); y.add(N); v.add(M) } if (u) { F = new Uint8Array(48); d.copyTo(F, 0); f.copyTo(F, 8); g.copyTo(F, 16); m.copyTo(F, 24); p.copyTo(F, 32); b.copyTo(F, 40) } else { F = new Uint8Array(64); d.copyTo(F, 0); f.copyTo(F, 8); g.copyTo(F, 16); m.copyTo(F, 24); p.copyTo(F, 32); b.copyTo(F, 40); y.copyTo(F, 48); v.copyTo(F, 56) } return F } }(); t.calculateSHA512 = d; var f = function (e, t, a) { return d(e, t, a, !0) }; t.calculateSHA384 = f; var g = function () { function e() { } e.prototype = { decryptBlock: function (e) { return e } }; return e }(); class m { constructor() { this.constructor === m && (0, r.unreachable)("Cannot initialize AESBaseCipher."); this._s = new Uint8Array([99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22]); this._inv_s = new Uint8Array([82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125]); this._mix = new Uint32Array([0, 235474187, 470948374, 303765277, 941896748, 908933415, 607530554, 708780849, 1883793496, 2118214995, 1817866830, 1649639237, 1215061108, 1181045119, 1417561698, 1517767529, 3767586992, 4003061179, 4236429990, 4069246893, 3635733660, 3602770327, 3299278474, 3400528769, 2430122216, 2664543715, 2362090238, 2193862645, 2835123396, 2801107407, 3035535058, 3135740889, 3678124923, 3576870512, 3341394285, 3374361702, 3810496343, 3977675356, 4279080257, 4043610186, 2876494627, 2776292904, 3076639029, 3110650942, 2472011535, 2640243204, 2403728665, 2169303058, 1001089995, 899835584, 666464733, 699432150, 59727847, 226906860, 530400753, 294930682, 1273168787, 1172967064, 1475418501, 1509430414, 1942435775, 2110667444, 1876241833, 1641816226, 2910219766, 2743034109, 2976151520, 3211623147, 2505202138, 2606453969, 2302690252, 2269728455, 3711829422, 3543599269, 3240894392, 3475313331, 3843699074, 3943906441, 4178062228, 4144047775, 1306967366, 1139781709, 1374988112, 1610459739, 1975683434, 2076935265, 1775276924, 1742315127, 1034867998, 866637845, 566021896, 800440835, 92987698, 193195065, 429456164, 395441711, 1984812685, 2017778566, 1784663195, 1683407248, 1315562145, 1080094634, 1383856311, 1551037884, 101039829, 135050206, 437757123, 337553864, 1042385657, 807962610, 573804783, 742039012, 2531067453, 2564033334, 2328828971, 2227573024, 2935566865, 2700099354, 3001755655, 3168937228, 3868552805, 3902563182, 4203181171, 4102977912, 3736164937, 3501741890, 3265478751, 3433712980, 1106041591, 1340463100, 1576976609, 1408749034, 2043211483, 2009195472, 1708848333, 1809054150, 832877231, 1068351396, 766945465, 599762354, 159417987, 126454664, 361929877, 463180190, 2709260871, 2943682380, 3178106961, 3009879386, 2572697195, 2538681184, 2236228733, 2336434550, 3509871135, 3745345300, 3441850377, 3274667266, 3910161971, 3877198648, 4110568485, 4211818798, 2597806476, 2497604743, 2261089178, 2295101073, 2733856160, 2902087851, 3202437046, 2968011453, 3936291284, 3835036895, 4136440770, 4169408201, 3535486456, 3702665459, 3467192302, 3231722213, 2051518780, 1951317047, 1716890410, 1750902305, 1113818384, 1282050075, 1584504582, 1350078989, 168810852, 67556463, 371049330, 404016761, 841739592, 1008918595, 775550814, 540080725, 3969562369, 3801332234, 4035489047, 4269907996, 3569255213, 3669462566, 3366754619, 3332740144, 2631065433, 2463879762, 2160117071, 2395588676, 2767645557, 2868897406, 3102011747, 3069049960, 202008497, 33778362, 270040487, 504459436, 875451293, 975658646, 675039627, 641025152, 2084704233, 1917518562, 1615861247, 1851332852, 1147550661, 1248802510, 1484005843, 1451044056, 933301370, 967311729, 733156972, 632953703, 260388950, 25965917, 328671808, 496906059, 1206477858, 1239443753, 1543208500, 1441952575, 2144161806, 1908694277, 1675577880, 1842759443, 3610369226, 3644379585, 3408119516, 3307916247, 4011190502, 3776767469, 4077384432, 4245618683, 2809771154, 2842737049, 3144396420, 3043140495, 2673705150, 2438237621, 2203032232, 2370213795]); this._mixCol = new Uint8Array(256); for (let e = 0; e < 256; e++)this._mixCol[e] = e < 128 ? e << 1 : e << 1 ^ 27; this.buffer = new Uint8Array(16); this.bufferPosition = 0 } _expandKey(e) { (0, r.unreachable)("Cannot call `_expandKey` on the base class") } _decrypt(e, t) { let a, r, i; const n = new Uint8Array(16); n.set(e); for (let e = 0, a = this._keySize; e < 16; ++e, ++a)n[e] ^= t[a]; for (let e = this._cyclesOfRepetition - 1; e >= 1; --e) { a = n[13]; n[13] = n[9]; n[9] = n[5]; n[5] = n[1]; n[1] = a; a = n[14]; r = n[10]; n[14] = n[6]; n[10] = n[2]; n[6] = a; n[2] = r; a = n[15]; r = n[11]; i = n[7]; n[15] = n[3]; n[11] = a; n[7] = r; n[3] = i; for (let e = 0; e < 16; ++e)n[e] = this._inv_s[n[e]]; for (let a = 0, r = 16 * e; a < 16; ++a, ++r)n[a] ^= t[r]; for (let e = 0; e < 16; e += 4) { const t = this._mix[n[e]], r = this._mix[n[e + 1]], i = this._mix[n[e + 2]], s = this._mix[n[e + 3]]; a = t ^ r >>> 8 ^ r << 24 ^ i >>> 16 ^ i << 16 ^ s >>> 24 ^ s << 8; n[e] = a >>> 24 & 255; n[e + 1] = a >> 16 & 255; n[e + 2] = a >> 8 & 255; n[e + 3] = 255 & a } } a = n[13]; n[13] = n[9]; n[9] = n[5]; n[5] = n[1]; n[1] = a; a = n[14]; r = n[10]; n[14] = n[6]; n[10] = n[2]; n[6] = a; n[2] = r; a = n[15]; r = n[11]; i = n[7]; n[15] = n[3]; n[11] = a; n[7] = r; n[3] = i; for (let e = 0; e < 16; ++e) { n[e] = this._inv_s[n[e]]; n[e] ^= t[e] } return n } _encrypt(e, t) { const a = this._s; let r, i, n; const s = new Uint8Array(16); s.set(e); for (let e = 0; e < 16; ++e)s[e] ^= t[e]; for (let e = 1; e < this._cyclesOfRepetition; e++) { for (let e = 0; e < 16; ++e)s[e] = a[s[e]]; n = s[1]; s[1] = s[5]; s[5] = s[9]; s[9] = s[13]; s[13] = n; n = s[2]; i = s[6]; s[2] = s[10]; s[6] = s[14]; s[10] = n; s[14] = i; n = s[3]; i = s[7]; r = s[11]; s[3] = s[15]; s[7] = n; s[11] = i; s[15] = r; for (let e = 0; e < 16; e += 4) { const t = s[e + 0], a = s[e + 1], i = s[e + 2], n = s[e + 3]; r = t ^ a ^ i ^ n; s[e + 0] ^= r ^ this._mixCol[t ^ a]; s[e + 1] ^= r ^ this._mixCol[a ^ i]; s[e + 2] ^= r ^ this._mixCol[i ^ n]; s[e + 3] ^= r ^ this._mixCol[n ^ t] } for (let a = 0, r = 16 * e; a < 16; ++a, ++r)s[a] ^= t[r] } for (let e = 0; e < 16; ++e)s[e] = a[s[e]]; n = s[1]; s[1] = s[5]; s[5] = s[9]; s[9] = s[13]; s[13] = n; n = s[2]; i = s[6]; s[2] = s[10]; s[6] = s[14]; s[10] = n; s[14] = i; n = s[3]; i = s[7]; r = s[11]; s[3] = s[15]; s[7] = n; s[11] = i; s[15] = r; for (let e = 0, a = this._keySize; e < 16; ++e, ++a)s[e] ^= t[a]; return s } _decryptBlock2(e, t) { const a = e.length; let r = this.buffer, i = this.bufferPosition; const n = []; let s = this.iv; for (let t = 0; t < a; ++t) { r[i] = e[t]; ++i; if (i < 16) continue; const a = this._decrypt(r, this._key); for (let e = 0; e < 16; ++e)a[e] ^= s[e]; s = r; n.push(a); r = new Uint8Array(16); i = 0 } this.buffer = r; this.bufferLength = i; this.iv = s; if (0 === n.length) return new Uint8Array(0); let o = 16 * n.length; if (t) { const e = n[n.length - 1]; let t = e[15]; if (t <= 16) { for (let a = 15, r = 16 - t; a >= r; --a)if (e[a] !== t) { t = 0; break } o -= t; n[n.length - 1] = e.subarray(0, 16 - t) } } const c = new Uint8Array(o); for (let e = 0, t = 0, a = n.length; e < a; ++e, t += 16)c.set(n[e], t); return c } decryptBlock(e, t, a = null) { const r = e.length, i = this.buffer; let n = this.bufferPosition; if (a) this.iv = a; else { for (let t = 0; n < 16 && t < r; ++t, ++n)i[n] = e[t]; if (n < 16) { this.bufferLength = n; return new Uint8Array(0) } this.iv = i; e = e.subarray(16) } this.buffer = new Uint8Array(16); this.bufferLength = 0; this.decryptBlock = this._decryptBlock2; return this.decryptBlock(e, t) } encrypt(e, t) { const a = e.length; let r = this.buffer, i = this.bufferPosition; const n = []; t || (t = new Uint8Array(16)); for (let s = 0; s < a; ++s) { r[i] = e[s]; ++i; if (i < 16) continue; for (let e = 0; e < 16; ++e)r[e] ^= t[e]; const a = this._encrypt(r, this._key); t = a; n.push(a); r = new Uint8Array(16); i = 0 } this.buffer = r; this.bufferLength = i; this.iv = t; if (0 === n.length) return new Uint8Array(0); const s = 16 * n.length, o = new Uint8Array(s); for (let e = 0, t = 0, a = n.length; e < a; ++e, t += 16)o.set(n[e], t); return o } } class p extends m { constructor(e) { super(); this._cyclesOfRepetition = 10; this._keySize = 160; this._rcon = new Uint8Array([141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, 131, 29, 58, 116, 232, 203, 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, 131, 29, 58, 116, 232, 203, 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, 131, 29, 58, 116, 232, 203, 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, 131, 29, 58, 116, 232, 203, 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, 131, 29, 58, 116, 232, 203, 141]); this._key = this._expandKey(e) } _expandKey(e) { const t = this._s, a = this._rcon, r = new Uint8Array(176); r.set(e); for (let e = 16, i = 1; e < 176; ++i) { let n = r[e - 3], s = r[e - 2], o = r[e - 1], c = r[e - 4]; n = t[n]; s = t[s]; o = t[o]; c = t[c]; n ^= a[i]; for (let t = 0; t < 4; ++t) { r[e] = n ^= r[e - 16]; e++; r[e] = s ^= r[e - 16]; e++; r[e] = o ^= r[e - 16]; e++; r[e] = c ^= r[e - 16]; e++ } } return r } } t.AES128Cipher = p; class b extends m { constructor(e) { super(); this._cyclesOfRepetition = 14; this._keySize = 224; this._key = this._expandKey(e) } _expandKey(e) { const t = this._s, a = new Uint8Array(240); a.set(e); let r, i, n, s, o = 1; for (let e = 32, c = 1; e < 240; ++c) { if (e % 32 == 16) { r = t[r]; i = t[i]; n = t[n]; s = t[s] } else if (e % 32 == 0) { r = a[e - 3]; i = a[e - 2]; n = a[e - 1]; s = a[e - 4]; r = t[r]; i = t[i]; n = t[n]; s = t[s]; r ^= o; (o <<= 1) >= 256 && (o = 255 & (27 ^ o)) } for (let t = 0; t < 4; ++t) { a[e] = r ^= a[e - 32]; e++; a[e] = i ^= a[e - 32]; e++; a[e] = n ^= a[e - 32]; e++; a[e] = s ^= a[e - 32]; e++ } } return a } } t.AES256Cipher = b; var y = function () { function e(e, t) { if (e.length !== t.length) return !1; for (var a = 0; a < e.length; a++)if (e[a] !== t[a]) return !1; return !0 } function t() { } t.prototype = { checkOwnerPassword: function (t, a, r, i) { var n = new Uint8Array(t.length + 56); n.set(t, 0); n.set(a, t.length); n.set(r, t.length + a.length); return e(u(n, 0, n.length), i) }, checkUserPassword: function (t, a, r) { var i = new Uint8Array(t.length + 8); i.set(t, 0); i.set(a, t.length); return e(u(i, 0, i.length), r) }, getOwnerKey: function (e, t, a, r) { var i = new Uint8Array(e.length + 56); i.set(e, 0); i.set(t, e.length); i.set(a, e.length + t.length); var n = u(i, 0, i.length); return new b(n).decryptBlock(r, !1, new Uint8Array(16)) }, getUserKey: function (e, t, a) { var r = new Uint8Array(e.length + 8); r.set(e, 0); r.set(t, e.length); var i = u(r, 0, r.length); return new b(i).decryptBlock(a, !1, new Uint8Array(16)) } }; return t }(); t.PDF17 = y; var v = function () { function e(e, t) { var a = new Uint8Array(e.length + t.length); a.set(e, 0); a.set(t, e.length); return a } function t(t, a, r) { for (var i = u(a, 0, a.length).subarray(0, 32), n = [0], s = 0; s < 64 || n[n.length - 1] > s - 32;) { var o = t.length + i.length + r.length, c = new Uint8Array(64 * o), l = e(t, i); l = e(l, r); for (var h = 0, g = 0; h < 64; h++, g += o)c.set(l, g); n = new p(i.subarray(0, 16)).encrypt(c, i.subarray(16, 32)); for (var m = 0, b = 0; b < 16; b++) { m *= 1; m %= 3; m += (n[b] >>> 0) % 3; m %= 3 } 0 === m ? i = u(n, 0, n.length) : 1 === m ? i = f(n, 0, n.length) : 2 === m && (i = d(n, 0, n.length)); s++ } return i.subarray(0, 32) } function a() { } function r(e, t) { if (e.length !== t.length) return !1; for (var a = 0; a < e.length; a++)if (e[a] !== t[a]) return !1; return !0 } a.prototype = { hash: function (e, a, r) { return t(e, a, r) }, checkOwnerPassword: function (e, a, i, n) { var s = new Uint8Array(e.length + 56); s.set(e, 0); s.set(a, e.length); s.set(i, e.length + a.length); return r(t(e, s, i), n) }, checkUserPassword: function (e, a, i) { var n = new Uint8Array(e.length + 8); n.set(e, 0); n.set(a, e.length); return r(t(e, n, []), i) }, getOwnerKey: function (e, a, r, i) { var n = new Uint8Array(e.length + 56); n.set(e, 0); n.set(a, e.length); n.set(r, e.length + a.length); var s = t(e, n, r); return new b(s).decryptBlock(i, !1, new Uint8Array(16)) }, getUserKey: function (e, a, r) { var i = new Uint8Array(e.length + 8); i.set(e, 0); i.set(a, e.length); var n = t(e, i, []); return new b(n).decryptBlock(r, !1, new Uint8Array(16)) } }; return a }(); t.PDF20 = v; var w = function () { function e(e, t) { this.StringCipherConstructor = e; this.StreamCipherConstructor = t } e.prototype = { createStream: function (e, t) { var a = new this.StreamCipherConstructor; return new n.DecryptStream(e, t, (function (e, t) { return a.decryptBlock(e, t) })) }, decryptString: function (e) { var t = new this.StringCipherConstructor, a = (0, r.stringToBytes)(e); a = t.decryptBlock(a, !0); return (0, r.bytesToString)(a) } }; return e }(), k = function () { var e = new Uint8Array([40, 191, 78, 94, 78, 117, 138, 65, 100, 0, 78, 86, 255, 250, 1, 8, 46, 46, 0, 182, 208, 104, 62, 128, 47, 12, 169, 254, 100, 83, 105, 122]); function t(t, a, r, i, n, o, c, h) { var u, d, f = 40 + r.length + t.length, g = new Uint8Array(f), m = 0; if (a) { d = Math.min(32, a.length); for (; m < d; ++m)g[m] = a[m] } u = 0; for (; m < 32;)g[m++] = e[u++]; for (u = 0, d = r.length; u < d; ++u)g[m++] = r[u]; g[m++] = 255 & n; g[m++] = n >> 8 & 255; g[m++] = n >> 16 & 255; g[m++] = n >>> 24 & 255; for (u = 0, d = t.length; u < d; ++u)g[m++] = t[u]; if (o >= 4 && !h) { g[m++] = 255; g[m++] = 255; g[m++] = 255; g[m++] = 255 } var p = l(g, 0, m), b = c >> 3; if (o >= 3) for (u = 0; u < 50; ++u)p = l(p, 0, b); var y, v = p.subarray(0, b); if (o >= 3) { for (m = 0; m < 32; ++m)g[m] = e[m]; for (u = 0, d = t.length; u < d; ++u)g[m++] = t[u]; y = new s(v).encryptBlock(l(g, 0, m)); d = v.length; var w, k = new Uint8Array(d); for (u = 1; u <= 19; ++u) { for (w = 0; w < d; ++w)k[w] = v[w] ^ u; y = new s(k).encryptBlock(y) } for (u = 0, d = y.length; u < d; ++u)if (i[u] !== y[u]) return null } else for (u = 0, d = (y = new s(v).encryptBlock(e)).length; u < d; ++u)if (i[u] !== y[u]) return null; return v } var a = i.Name.get("Identity"); function n(n, o, c) { var h = n.get("Filter"); if (!(0, i.isName)(h, "Standard")) throw new r.FormatError("unknown encryption method"); this.dict = n; var u = n.get("V"); if (!Number.isInteger(u) || 1 !== u && 2 !== u && 4 !== u && 5 !== u) throw new r.FormatError("unsupported encryption algorithm"); this.algorithm = u; var d = n.get("Length"); if (!d) if (u <= 3) d = 40; else { var f = n.get("CF"), g = n.get("StmF"); if ((0, i.isDict)(f) && (0, i.isName)(g)) { f.suppressEncryption = !0; var m = f.get(g.name); (d = m && m.get("Length") || 128) < 40 && (d <<= 3) } } if (!Number.isInteger(d) || d < 40 || d % 8 != 0) throw new r.FormatError("invalid key length"); var p = (0, r.stringToBytes)(n.get("O")).subarray(0, 32), b = (0, r.stringToBytes)(n.get("U")).subarray(0, 32), w = n.get("P"), k = n.get("R"), S = (4 === u || 5 === u) && !1 !== n.get("EncryptMetadata"); this.encryptMetadata = S; var C, x, A = (0, r.stringToBytes)(o); if (c) { if (6 === k) try { c = (0, r.utf8StringToString)(c) } catch (e) { (0, r.warn)("CipherTransformFactory: Unable to convert UTF8 encoded password.") } C = (0, r.stringToBytes)(c) } if (5 !== u) x = t(A, C, p, b, w, k, d, S); else { var I = (0, r.stringToBytes)(n.get("O")).subarray(32, 40), F = (0, r.stringToBytes)(n.get("O")).subarray(40, 48), T = (0, r.stringToBytes)(n.get("U")).subarray(0, 48), E = (0, r.stringToBytes)(n.get("U")).subarray(32, 40), O = (0, r.stringToBytes)(n.get("U")).subarray(40, 48), P = (0, r.stringToBytes)(n.get("OE")), B = (0, r.stringToBytes)(n.get("UE")); (0, r.stringToBytes)(n.get("Perms")); x = function (e, t, a, r, i, n, s, o, c, l, h, u) { if (t) { var d = Math.min(127, t.length); t = t.subarray(0, d) } else t = []; var f; return (f = 6 === e ? new v : new y).checkUserPassword(t, o, s) ? f.getUserKey(t, c, h) : t.length && f.checkOwnerPassword(t, r, n, a) ? f.getOwnerKey(t, i, n, l) : null }(k, C, p, I, F, T, b, E, O, P, B) } if (!x && !c) throw new r.PasswordException("No password given", r.PasswordResponses.NEED_PASSWORD); if (!x && c) { x = t(A, function (t, a, r, i) { var n, o, c = new Uint8Array(32), h = 0; o = Math.min(32, t.length); for (; h < o; ++h)c[h] = t[h]; n = 0; for (; h < 32;)c[h++] = e[n++]; var u, d = l(c, 0, h), f = i >> 3; if (r >= 3) for (n = 0; n < 50; ++n)d = l(d, 0, d.length); if (r >= 3) { u = a; var g, m = new Uint8Array(f); for (n = 19; n >= 0; n--) { for (g = 0; g < f; ++g)m[g] = d[g] ^ n; u = new s(m).encryptBlock(u) } } else u = new s(d.subarray(0, f)).encryptBlock(a); return u }(C, p, k, d), p, b, w, k, d, S) } if (!x) throw new r.PasswordException("Incorrect Password", r.PasswordResponses.INCORRECT_PASSWORD); this.encryptionKey = x; if (u >= 4) { var D = n.get("CF"); (0, i.isDict)(D) && (D.suppressEncryption = !0); this.cf = D; this.stmf = n.get("StmF") || a; this.strf = n.get("StrF") || a; this.eff = n.get("EFF") || this.stmf } } function o(e, t, a, r) { var i, n, s = new Uint8Array(a.length + 9); for (i = 0, n = a.length; i < n; ++i)s[i] = a[i]; s[i++] = 255 & e; s[i++] = e >> 8 & 255; s[i++] = e >> 16 & 255; s[i++] = 255 & t; s[i++] = t >> 8 & 255; if (r) { s[i++] = 115; s[i++] = 65; s[i++] = 108; s[i++] = 84 } return l(s, 0, i).subarray(0, Math.min(a.length + 5, 16)) } function c(e, t, a, n, c) { if (!(0, i.isName)(t)) throw new r.FormatError("Invalid crypt filter name."); var l, h = e.get(t.name); null != h && (l = h.get("CFM")); if (!l || "None" === l.name) return function () { return new g }; if ("V2" === l.name) return function () { return new s(o(a, n, c, !1)) }; if ("AESV2" === l.name) return function () { return new p(o(a, n, c, !0)) }; if ("AESV3" === l.name) return function () { return new b(c) }; throw new r.FormatError("Unknown crypto method") } n.prototype = { createCipherTransform: function (e, t) { if (4 === this.algorithm || 5 === this.algorithm) return new w(c(this.cf, this.stmf, e, t, this.encryptionKey), c(this.cf, this.strf, e, t, this.encryptionKey)); var a = o(e, t, this.encryptionKey, !1), r = function () { return new s(a) }; return new w(r, r) } }; return n }(); t.CipherTransformFactory = k }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.ColorSpace = void 0; var r = a(2), i = a(4); class n { constructor(e, t) { this.constructor === n && (0, r.unreachable)("Cannot initialize ColorSpace."); this.name = e; this.numComps = t } getRgb(e, t) { const a = new Uint8ClampedArray(3); this.getRgbItem(e, t, a, 0); return a } getRgbItem(e, t, a, i) { (0, r.unreachable)("Should not call ColorSpace.getRgbItem") } getRgbBuffer(e, t, a, i, n, s, o) { (0, r.unreachable)("Should not call ColorSpace.getRgbBuffer") } getOutputLength(e, t) { (0, r.unreachable)("Should not call ColorSpace.getOutputLength") } isPassthrough(e) { return !1 } isDefaultDecode(e, t) { return n.isDefaultDecode(e, this.numComps) } fillRgb(e, t, a, r, i, n, s, o, c) { const l = t * a; let h = null; const u = 1 << s, d = a !== i || t !== r; if (this.isPassthrough(s)) h = o; else if (1 === this.numComps && l > u && "DeviceGray" !== this.name && "DeviceRGB" !== this.name) { const t = s <= 8 ? new Uint8Array(u) : new Uint16Array(u); for (let e = 0; e < u; e++)t[e] = e; const a = new Uint8ClampedArray(3 * u); this.getRgbBuffer(t, 0, u, a, 0, s, 0); if (d) { h = new Uint8Array(3 * l); let e = 0; for (let t = 0; t < l; ++t) { const r = 3 * o[t]; h[e++] = a[r]; h[e++] = a[r + 1]; h[e++] = a[r + 2] } } else { let t = 0; for (let r = 0; r < l; ++r) { const i = 3 * o[r]; e[t++] = a[i]; e[t++] = a[i + 1]; e[t++] = a[i + 2]; t += c } } } else if (d) { h = new Uint8ClampedArray(3 * l); this.getRgbBuffer(o, 0, l, h, 0, s, 0) } else this.getRgbBuffer(o, 0, r * n, e, 0, s, c); if (h) if (d) !function (e, t, a, r, i, n, s) { s = 1 !== s ? 0 : s; const o = a / i, c = r / n; let l, h = 0; const u = new Uint16Array(i), d = 3 * a; for (let e = 0; e < i; e++)u[e] = 3 * Math.floor(e * o); for (let a = 0; a < n; a++) { const r = Math.floor(a * c) * d; for (let a = 0; a < i; a++) { l = r + u[a]; t[h++] = e[l++]; t[h++] = e[l++]; t[h++] = e[l++]; h += s } } }(h, e, t, a, r, i, c); else { let t = 0, a = 0; for (let i = 0, s = r * n; i < s; i++) { e[t++] = h[a++]; e[t++] = h[a++]; e[t++] = h[a++]; t += c } } } get usesZeroToOneRange() { return (0, r.shadow)(this, "usesZeroToOneRange", !0) } static parse(e, t, a, r) { const i = this.parseToIR(e, t, a, r); return this.fromIR(i) } static fromIR(e) { const t = Array.isArray(e) ? e[0] : e; let a, i, n; switch (t) { case "DeviceGrayCS": return this.singletons.gray; case "DeviceRgbCS": return this.singletons.rgb; case "DeviceCmykCS": return this.singletons.cmyk; case "CalGrayCS": a = e[1]; i = e[2]; n = e[3]; return new d(a, i, n); case "CalRGBCS": a = e[1]; i = e[2]; n = e[3]; const l = e[4]; return new f(a, i, n, l); case "PatternCS": let h = e[1]; h && (h = this.fromIR(h)); return new o(h); case "IndexedCS": const u = e[1], m = e[2], p = e[3]; return new c(this.fromIR(u), m, p); case "AlternateCS": const b = e[1], y = e[2], v = e[3]; return new s(b, this.fromIR(y), v); case "LabCS": a = e[1]; i = e[2]; const w = e[3]; return new g(a, i, w); default: throw new r.FormatError(`Unknown colorspace name: ${t}`) } } static parseToIR(e, t, a = null, n) { e = t.fetchIfRef(e); if ((0, i.isName)(e)) switch (e.name) { case "DeviceGray": case "G": return "DeviceGrayCS"; case "DeviceRGB": case "RGB": return "DeviceRgbCS"; case "DeviceCMYK": case "CMYK": return "DeviceCmykCS"; case "Pattern": return ["PatternCS", null]; default: if ((0, i.isDict)(a)) { const r = a.get("ColorSpace"); if ((0, i.isDict)(r)) { const s = r.get(e.name); if (s) { if ((0, i.isName)(s)) return this.parseToIR(s, t, a, n); e = s; break } } } throw new r.FormatError(`unrecognized colorspace ${e.name}`) }if (Array.isArray(e)) { const s = t.fetchIfRef(e[0]).name; let o, c, l, h, u, d; switch (s) { case "DeviceGray": case "G": return "DeviceGrayCS"; case "DeviceRGB": case "RGB": return "DeviceRgbCS"; case "DeviceCMYK": case "CMYK": return "DeviceCmykCS"; case "CalGray": c = t.fetchIfRef(e[1]); h = c.getArray("WhitePoint"); u = c.getArray("BlackPoint"); d = c.get("Gamma"); return ["CalGrayCS", h, u, d]; case "CalRGB": c = t.fetchIfRef(e[1]); h = c.getArray("WhitePoint"); u = c.getArray("BlackPoint"); d = c.getArray("Gamma"); return ["CalRGBCS", h, u, d, c.getArray("Matrix")]; case "ICCBased": const f = t.fetchIfRef(e[1]).dict; o = f.get("N"); l = f.get("Alternate"); if (l) { const e = this.parseToIR(l, t, a, n); if (this.fromIR(e, n).numComps === o) return e; (0, r.warn)("ICCBased color space: Ignoring incorrect /Alternate entry.") } if (1 === o) return "DeviceGrayCS"; if (3 === o) return "DeviceRgbCS"; if (4 === o) return "DeviceCmykCS"; break; case "Pattern": let g = e[1] || null; g && (g = this.parseToIR(g, t, a, n)); return ["PatternCS", g]; case "Indexed": case "I": const m = this.parseToIR(e[1], t, a, n), p = t.fetchIfRef(e[2]) + 1; let b = t.fetchIfRef(e[3]); (0, i.isStream)(b) && (b = b.getBytes()); return ["IndexedCS", m, p, b]; case "Separation": case "DeviceN": const y = t.fetchIfRef(e[1]); o = Array.isArray(y) ? y.length : 1; l = this.parseToIR(e[2], t, a, n); return ["AlternateCS", o, l, n.create(t.fetchIfRef(e[3]))]; case "Lab": c = t.fetchIfRef(e[1]); h = c.getArray("WhitePoint"); u = c.getArray("BlackPoint"); return ["LabCS", h, u, c.getArray("Range")]; default: throw new r.FormatError(`unimplemented color space object "${s}"`) } } throw new r.FormatError(`unrecognized color space object: "${e}"`) } static isDefaultDecode(e, t) { if (!Array.isArray(e)) return !0; if (2 * t !== e.length) { (0, r.warn)("The decode map is not the correct length"); return !0 } for (let t = 0, a = e.length; t < a; t += 2)if (0 !== e[t] || 1 !== e[t + 1]) return !1; return !0 } static get singletons() { return (0, r.shadow)(this, "singletons", { get gray() { return (0, r.shadow)(this, "gray", new l) }, get rgb() { return (0, r.shadow)(this, "rgb", new h) }, get cmyk() { return (0, r.shadow)(this, "cmyk", new u) } }) } } t.ColorSpace = n; class s extends n { constructor(e, t, a) { super("Alternate", e); this.base = t; this.tintFn = a; this.tmpBuf = new Float32Array(t.numComps) } getRgbItem(e, t, a, r) { const i = this.tmpBuf; this.tintFn(e, t, i, 0); this.base.getRgbItem(i, 0, a, r) } getRgbBuffer(e, t, a, r, i, n, s) { const o = this.tintFn, c = this.base, l = 1 / ((1 << n) - 1), h = c.numComps, u = c.usesZeroToOneRange, d = (c.isPassthrough(8) || !u) && 0 === s; let f = d ? i : 0; const g = d ? r : new Uint8ClampedArray(h * a), m = this.numComps, p = new Float32Array(m), b = new Float32Array(h); let y, v; for (y = 0; y < a; y++) { for (v = 0; v < m; v++)p[v] = e[t++] * l; o(p, 0, b, 0); if (u) for (v = 0; v < h; v++)g[f++] = 255 * b[v]; else { c.getRgbItem(b, 0, g, f); f += h } } d || c.getRgbBuffer(g, 0, a, r, i, 8, s) } getOutputLength(e, t) { return this.base.getOutputLength(e * this.base.numComps / this.numComps, t) } } class o extends n { constructor(e) { super("Pattern", null); this.base = e } isDefaultDecode(e, t) { (0, r.unreachable)("Should not call PatternCS.isDefaultDecode") } } class c extends n { constructor(e, t, a) { super("Indexed", 1); this.base = e; this.highVal = t; const n = e.numComps * t; if ((0, i.isStream)(a)) { this.lookup = new Uint8Array(n); const e = a.getBytes(n); this.lookup.set(e) } else if ((0, r.isString)(a)) { this.lookup = new Uint8Array(n); for (let e = 0; e < n; ++e)this.lookup[e] = a.charCodeAt(e) } else { if (!(a instanceof Uint8Array)) throw new r.FormatError(`Unrecognized lookup table: ${a}`); this.lookup = a } } getRgbItem(e, t, a, r) { const i = this.base.numComps, n = e[t] * i; this.base.getRgbBuffer(this.lookup, n, 1, a, r, 8, 0) } getRgbBuffer(e, t, a, r, i, n, s) { const o = this.base, c = o.numComps, l = o.getOutputLength(c, s), h = this.lookup; for (let n = 0; n < a; ++n) { const a = e[t++] * c; o.getRgbBuffer(h, a, 1, r, i, 8, s); i += l } } getOutputLength(e, t) { return this.base.getOutputLength(e * this.base.numComps, t) } isDefaultDecode(e, t) { if (!Array.isArray(e)) return !0; if (2 !== e.length) { (0, r.warn)("Decode map length is not correct"); return !0 } if (!Number.isInteger(t) || t < 1) { (0, r.warn)("Bits per component is not correct"); return !0 } return 0 === e[0] && e[1] === (1 << t) - 1 } } class l extends n { constructor() { super("DeviceGray", 1) } getRgbItem(e, t, a, r) { const i = 255 * e[t]; a[r] = a[r + 1] = a[r + 2] = i } getRgbBuffer(e, t, a, r, i, n, s) { const o = 255 / ((1 << n) - 1); let c = t, l = i; for (let t = 0; t < a; ++t) { const t = o * e[c++]; r[l++] = t; r[l++] = t; r[l++] = t; l += s } } getOutputLength(e, t) { return e * (3 + t) } } class h extends n { constructor() { super("DeviceRGB", 3) } getRgbItem(e, t, a, r) { a[r] = 255 * e[t]; a[r + 1] = 255 * e[t + 1]; a[r + 2] = 255 * e[t + 2] } getRgbBuffer(e, t, a, r, i, n, s) { if (8 === n && 0 === s) { r.set(e.subarray(t, t + 3 * a), i); return } const o = 255 / ((1 << n) - 1); let c = t, l = i; for (let t = 0; t < a; ++t) { r[l++] = o * e[c++]; r[l++] = o * e[c++]; r[l++] = o * e[c++]; l += s } } getOutputLength(e, t) { return e * (3 + t) / 3 | 0 } isPassthrough(e) { return 8 === e } } const u = function () { function e(e, t, a, r, i) { const n = e[t] * a, s = e[t + 1] * a, o = e[t + 2] * a, c = e[t + 3] * a; r[i] = 255 + n * (-4.387332384609988 * n + 54.48615194189176 * s + 18.82290502165302 * o + 212.25662451639585 * c - 285.2331026137004) + s * (1.7149763477362134 * s - 5.6096736904047315 * o + -17.873870861415444 * c - 5.497006427196366) + o * (-2.5217340131683033 * o - 21.248923337353073 * c + 17.5119270841813) + c * (-21.86122147463605 * c - 189.48180835922747); r[i + 1] = 255 + n * (8.841041422036149 * n + 60.118027045597366 * s + 6.871425592049007 * o + 31.159100130055922 * c - 79.2970844816548) + s * (-15.310361306967817 * s + 17.575251261109482 * o + 131.35250912493976 * c - 190.9453302588951) + o * (4.444339102852739 * o + 9.8632861493405 * c - 24.86741582555878) + c * (-20.737325471181034 * c - 187.80453709719578); r[i + 2] = 255 + n * (.8842522430003296 * n + 8.078677503112928 * s + 30.89978309703729 * o - .23883238689178934 * c - 14.183576799673286) + s * (10.49593273432072 * s + 63.02378494754052 * o + 50.606957656360734 * c - 112.23884253719248) + o * (.03296041114873217 * o + 115.60384449646641 * c - 193.58209356861505) + c * (-22.33816807309886 * c - 180.12613974708367) } return class extends n { constructor() { super("DeviceCMYK", 4) } getRgbItem(t, a, r, i) { e(t, a, 1, r, i) } getRgbBuffer(t, a, r, i, n, s, o) { const c = 1 / ((1 << s) - 1); for (let s = 0; s < r; s++) { e(t, a, c, i, n); a += 4; n += 3 + o } } getOutputLength(e, t) { return e / 4 * (3 + t) | 0 } } }(), d = function () { function e(e, t, a, r, i, n) { const s = (t[a] * n) ** e.G, o = e.YW * s, c = Math.max(295.8 * o ** .3333333333333333 - 40.8, 0); r[i] = c; r[i + 1] = c; r[i + 2] = c } return class extends n { constructor(e, t, a) { super("CalGray", 1); if (!e) throw new r.FormatError("WhitePoint missing - required for color space CalGray"); t = t || [0, 0, 0]; a = a || 1; this.XW = e[0]; this.YW = e[1]; this.ZW = e[2]; this.XB = t[0]; this.YB = t[1]; this.ZB = t[2]; this.G = a; if (this.XW < 0 || this.ZW < 0 || 1 !== this.YW) throw new r.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available"); if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { (0, r.info)(`Invalid BlackPoint for ${this.name}, falling back to default.`); this.XB = this.YB = this.ZB = 0 } 0 === this.XB && 0 === this.YB && 0 === this.ZB || (0, r.warn)(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + `ZB: ${this.ZB}, only default values are supported.`); if (this.G < 1) { (0, r.info)(`Invalid Gamma: ${this.G} for ${this.name}, ` + "falling back to default."); this.G = 1 } } getRgbItem(t, a, r, i) { e(this, t, a, r, i, 1) } getRgbBuffer(t, a, r, i, n, s, o) { const c = 1 / ((1 << s) - 1); for (let s = 0; s < r; ++s) { e(this, t, a, i, n, c); a += 1; n += 3 + o } } getOutputLength(e, t) { return e * (3 + t) } } }(), f = function () { const e = new Float32Array([.8951, .2664, -.1614, -.7502, 1.7135, .0367, .0389, -.0685, 1.0296]), t = new Float32Array([.9869929, -.1470543, .1599627, .4323053, .5183603, .0492912, -.0085287, .0400428, .9684867]), a = new Float32Array([3.2404542, -1.5371385, -.4985314, -.969266, 1.8760108, .041556, .0556434, -.2040259, 1.0572252]), i = new Float32Array([1, 1, 1]), s = new Float32Array(3), o = new Float32Array(3), c = new Float32Array(3); function l(e, t, a) { a[0] = e[0] * t[0] + e[1] * t[1] + e[2] * t[2]; a[1] = e[3] * t[0] + e[4] * t[1] + e[5] * t[2]; a[2] = e[6] * t[0] + e[7] * t[1] + e[8] * t[2] } function h(e) { return u(0, 1, e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055) } function u(e, t, a) { return Math.max(e, Math.min(t, a)) } function d(e) { return e < 0 ? -d(-e) : e > 8 ? ((e + 16) / 116) ** 3 : e * ((24 / 116) ** 3 / 8) } function f(r, n, f, g, m, p) { const b = u(0, 1, n[f] * p), y = u(0, 1, n[f + 1] * p), v = u(0, 1, n[f + 2] * p), w = b ** r.GR, k = y ** r.GG, S = v ** r.GB, C = r.MXA * w + r.MXB * k + r.MXC * S, x = r.MYA * w + r.MYB * k + r.MYC * S, A = r.MZA * w + r.MZB * k + r.MZC * S, I = o; I[0] = C; I[1] = x; I[2] = A; const F = c; !function (a, r, i) { if (1 === a[0] && 1 === a[2]) { i[0] = r[0]; i[1] = r[1]; i[2] = r[2]; return } const n = i; l(e, r, n); const o = s; !function (e, t, a) { a[0] = 1 * t[0] / e[0]; a[1] = 1 * t[1] / e[1]; a[2] = 1 * t[2] / e[2] }(a, n, o); l(t, o, i) }(r.whitePoint, I, F); const T = o; !function (e, t, a) { if (0 === e[0] && 0 === e[1] && 0 === e[2]) { a[0] = t[0]; a[1] = t[1]; a[2] = t[2]; return } const r = d(0), i = (1 - r) / (1 - d(e[0])), n = 1 - i, s = (1 - r) / (1 - d(e[1])), o = 1 - s, c = (1 - r) / (1 - d(e[2])), l = 1 - c; a[0] = t[0] * i + n; a[1] = t[1] * s + o; a[2] = t[2] * c + l }(r.blackPoint, F, T); const E = c; !function (a, r, i) { const n = i; l(e, r, n); const o = s; !function (e, t, a) { a[0] = .95047 * t[0] / e[0]; a[1] = 1 * t[1] / e[1]; a[2] = 1.08883 * t[2] / e[2] }(a, n, o); l(t, o, i) }(i, T, E); const O = o; l(a, E, O); g[m] = 255 * h(O[0]); g[m + 1] = 255 * h(O[1]); g[m + 2] = 255 * h(O[2]) } return class extends n { constructor(e, t, a, i) { super("CalRGB", 3); if (!e) throw new r.FormatError("WhitePoint missing - required for color space CalRGB"); t = t || new Float32Array(3); a = a || new Float32Array([1, 1, 1]); i = i || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]); const n = e[0], s = e[1], o = e[2]; this.whitePoint = e; const c = t[0], l = t[1], h = t[2]; this.blackPoint = t; this.GR = a[0]; this.GG = a[1]; this.GB = a[2]; this.MXA = i[0]; this.MYA = i[1]; this.MZA = i[2]; this.MXB = i[3]; this.MYB = i[4]; this.MZB = i[5]; this.MXC = i[6]; this.MYC = i[7]; this.MZC = i[8]; if (n < 0 || o < 0 || 1 !== s) throw new r.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available"); if (c < 0 || l < 0 || h < 0) { (0, r.info)(`Invalid BlackPoint for ${this.name} [${c}, ${l}, ${h}], ` + "falling back to default."); this.blackPoint = new Float32Array(3) } if (this.GR < 0 || this.GG < 0 || this.GB < 0) { (0, r.info)(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + `${this.name}, falling back to default.`); this.GR = this.GG = this.GB = 1 } } getRgbItem(e, t, a, r) { f(this, e, t, a, r, 1) } getRgbBuffer(e, t, a, r, i, n, s) { const o = 1 / ((1 << n) - 1); for (let n = 0; n < a; ++n) { f(this, e, t, r, i, o); t += 3; i += 3 + s } } getOutputLength(e, t) { return e * (3 + t) / 3 | 0 } } }(), g = function () { function e(e) { let t; t = e >= 6 / 29 ? e * e * e : 108 / 841 * (e - 4 / 29); return t } function t(e, t, a, r) { return a + e * (r - a) / t } function a(a, r, i, n, s, o) { let c = r[i], l = r[i + 1], h = r[i + 2]; if (!1 !== n) { c = t(c, n, 0, 100); l = t(l, n, a.amin, a.amax); h = t(h, n, a.bmin, a.bmax) } l > a.amax ? l = a.amax : l < a.amin && (l = a.amin); h > a.bmax ? h = a.bmax : h < a.bmin && (h = a.bmin); const u = (c + 16) / 116, d = u + l / 500, f = u - h / 200, g = a.XW * e(d), m = a.YW * e(u), p = a.ZW * e(f); let b, y, v; if (a.ZW < 1) { b = 3.1339 * g + -1.617 * m + -.4906 * p; y = -.9785 * g + 1.916 * m + .0333 * p; v = .072 * g + -.229 * m + 1.4057 * p } else { b = 3.2406 * g + -1.5372 * m + -.4986 * p; y = -.9689 * g + 1.8758 * m + .0415 * p; v = .0557 * g + -.204 * m + 1.057 * p } s[o] = 255 * Math.sqrt(b); s[o + 1] = 255 * Math.sqrt(y); s[o + 2] = 255 * Math.sqrt(v) } return class extends n { constructor(e, t, a) { super("Lab", 3); if (!e) throw new r.FormatError("WhitePoint missing - required for color space Lab"); t = t || [0, 0, 0]; a = a || [-100, 100, -100, 100]; this.XW = e[0]; this.YW = e[1]; this.ZW = e[2]; this.amin = a[0]; this.amax = a[1]; this.bmin = a[2]; this.bmax = a[3]; this.XB = t[0]; this.YB = t[1]; this.ZB = t[2]; if (this.XW < 0 || this.ZW < 0 || 1 !== this.YW) throw new r.FormatError("Invalid WhitePoint components, no fallback available"); if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { (0, r.info)("Invalid BlackPoint, falling back to default"); this.XB = this.YB = this.ZB = 0 } if (this.amin > this.amax || this.bmin > this.bmax) { (0, r.info)("Invalid Range, falling back to defaults"); this.amin = -100; this.amax = 100; this.bmin = -100; this.bmax = 100 } } getRgbItem(e, t, r, i) { a(this, e, t, !1, r, i) } getRgbBuffer(e, t, r, i, n, s, o) { const c = (1 << s) - 1; for (let s = 0; s < r; s++) { a(this, e, t, c, i, n); t += 3; n += 3 + o } } getOutputLength(e, t) { return e * (3 + t) / 3 | 0 } isDefaultDecode(e, t) { return !0 } get usesZeroToOneRange() { return (0, r.shadow)(this, "usesZeroToOneRange", !1) } } }() }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.getQuadPoints = h; t.MarkupAnnotation = t.AnnotationFactory = t.AnnotationBorderStyle = t.Annotation = void 0; var r = a(2), i = a(9), n = a(4), s = a(22), o = a(7), c = a(24), l = a(11); t.AnnotationFactory = class { static create(e, t, a, r) { return a.ensure(this, "_create", [e, t, a, r]) } static _create(e, t, a, i) { const s = e.fetchIfRef(t); if (!(0, n.isDict)(s)) return; const c = (0, n.isRef)(t) ? t.toString() : `annot_${i.createObjId()}`; let l = s.get("Subtype"); l = (0, n.isName)(l) ? l.name : null; const h = { xref: e, dict: s, subtype: l, id: c, pdfManager: a }; switch (l) { case "Link": return new v(h); case "Text": return new y(h); case "Widget": let e = (0, o.getInheritableProperty)({ dict: s, key: "FT" }); e = (0, n.isName)(e) ? e.name : null; switch (e) { case "Tx": return new m(h); case "Btn": return new p(h); case "Ch": return new b(h) }(0, r.warn)('Unimplemented widget field type "' + e + '", falling back to base field type.'); return new g(h); case "Popup": return new w(h); case "FreeText": return new k(h); case "Line": return new S(h); case "Square": return new C(h); case "Circle": return new x(h); case "PolyLine": return new A(h); case "Polygon": return new I(h); case "Caret": return new F(h); case "Ink": return new T(h); case "Highlight": return new E(h); case "Underline": return new O(h); case "Squiggly": return new P(h); case "StrikeOut": return new B(h); case "Stamp": return new D(h); case "FileAttachment": return new N(h); default: l ? (0, r.warn)('Unimplemented annotation type "' + l + '", falling back to base annotation.') : (0, r.warn)("Annotation is missing the required /Subtype."); return new u(h) } } }; function h(e, t) { if (!e.has("QuadPoints")) return null; const a = e.getArray("QuadPoints"); if (!Array.isArray(a) || a.length % 8 > 0) return null; const r = []; for (let e = 0, i = a.length / 8; e < i; e++) { r.push([]); for (let i = 8 * e, n = 8 * e + 8; i < n; i += 2) { const n = a[i], s = a[i + 1]; if (n < t[0] || n > t[2] || s < t[1] || s > t[3]) return null; r[e].push({ x: n, y: s }) } } return r } class u { constructor(e) { const t = e.dict; this.setContents(t.get("Contents")); this.setModificationDate(t.get("M")); this.setFlags(t.get("F")); this.setRectangle(t.getArray("Rect")); this.setColor(t.getArray("C")); this.setBorderStyle(t); this.setAppearance(t); this.data = { annotationFlags: this.flags, borderStyle: this.borderStyle, color: this.color, contents: this.contents, hasAppearance: !!this.appearance, id: e.id, modificationDate: this.modificationDate, rect: this.rectangle, subtype: e.subtype } } _hasFlag(e, t) { return !!(e & t) } _isViewable(e) { return !this._hasFlag(e, r.AnnotationFlag.INVISIBLE) && !this._hasFlag(e, r.AnnotationFlag.HIDDEN) && !this._hasFlag(e, r.AnnotationFlag.NOVIEW) } _isPrintable(e) { return this._hasFlag(e, r.AnnotationFlag.PRINT) && !this._hasFlag(e, r.AnnotationFlag.INVISIBLE) && !this._hasFlag(e, r.AnnotationFlag.HIDDEN) } get viewable() { return 0 === this.flags || this._isViewable(this.flags) } get printable() { return 0 !== this.flags && this._isPrintable(this.flags) } setContents(e) { this.contents = (0, r.stringToPDFString)(e || "") } setModificationDate(e) { this.modificationDate = (0, r.isString)(e) ? e : null } setFlags(e) { this.flags = Number.isInteger(e) && e > 0 ? e : 0 } hasFlag(e) { return this._hasFlag(this.flags, e) } setRectangle(e) { Array.isArray(e) && 4 === e.length ? this.rectangle = r.Util.normalizeRect(e) : this.rectangle = [0, 0, 0, 0] } setColor(e) { const t = new Uint8ClampedArray(3); if (Array.isArray(e)) switch (e.length) { case 0: this.color = null; break; case 1: s.ColorSpace.singletons.gray.getRgbItem(e, 0, t, 0); this.color = t; break; case 3: s.ColorSpace.singletons.rgb.getRgbItem(e, 0, t, 0); this.color = t; break; case 4: s.ColorSpace.singletons.cmyk.getRgbItem(e, 0, t, 0); this.color = t; break; default: this.color = t } else this.color = t } setBorderStyle(e) { this.borderStyle = new d; if ((0, n.isDict)(e)) if (e.has("BS")) { const t = e.get("BS"), a = t.get("Type"); if (!a || (0, n.isName)(a, "Border")) { this.borderStyle.setWidth(t.get("W"), this.rectangle); this.borderStyle.setStyle(t.get("S")); this.borderStyle.setDashArray(t.getArray("D")) } } else if (e.has("Border")) { const t = e.getArray("Border"); if (Array.isArray(t) && t.length >= 3) { this.borderStyle.setHorizontalCornerRadius(t[0]); this.borderStyle.setVerticalCornerRadius(t[1]); this.borderStyle.setWidth(t[2], this.rectangle); 4 === t.length && this.borderStyle.setDashArray(t[3]) } } else this.borderStyle.setWidth(0) } setAppearance(e) { this.appearance = null; const t = e.get("AP"); if (!(0, n.isDict)(t)) return; const a = t.get("N"); if ((0, n.isStream)(a)) { this.appearance = a; return } if (!(0, n.isDict)(a)) return; const r = e.get("AS"); (0, n.isName)(r) && a.has(r.name) && (this.appearance = a.get(r.name)) } loadResources(e) { return this.appearance.dict.getAsync("Resources").then(t => { if (!t) return; return new i.ObjectLoader(t, e, t.xref).load().then((function () { return t })) }) } getOperatorList(e, t, a) { if (!this.appearance) return Promise.resolve(new c.OperatorList); const i = this.data, n = this.appearance.dict, s = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]), o = n.getArray("BBox") || [0, 0, 1, 1], l = n.getArray("Matrix") || [1, 0, 0, 1, 0, 0], h = function (e, t, a) { const [i, n, s, o] = r.Util.getAxialAlignedBoundingBox(t, a); if (i === s || n === o) return [1, 0, 0, 1, e[0], e[1]]; const c = (e[2] - e[0]) / (s - i), l = (e[3] - e[1]) / (o - n); return [c, 0, 0, l, e[0] - i * c, e[1] - n * l] }(i.rect, o, l); return s.then(a => { const n = new c.OperatorList; n.addOp(r.OPS.beginAnnotation, [i.rect, h, l]); return e.getOperatorList({ stream: this.appearance, task: t, resources: a, operatorList: n }).then(() => { n.addOp(r.OPS.endAnnotation, []); this.appearance.reset(); return n }) }) } } t.Annotation = u; class d { constructor() { this.width = 1; this.style = r.AnnotationBorderStyleType.SOLID; this.dashArray = [3]; this.horizontalCornerRadius = 0; this.verticalCornerRadius = 0 } setWidth(e, t = [0, 0, 0, 0]) { if ((0, n.isName)(e)) this.width = 0; else if (Number.isInteger(e)) { if (e > 0) { const a = (t[2] - t[0]) / 2, i = (t[3] - t[1]) / 2; if (a > 0 && i > 0 && (e > a || e > i)) { (0, r.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${e}`); e = 1 } } this.width = e } } setStyle(e) { if ((0, n.isName)(e)) switch (e.name) { case "S": this.style = r.AnnotationBorderStyleType.SOLID; break; case "D": this.style = r.AnnotationBorderStyleType.DASHED; break; case "B": this.style = r.AnnotationBorderStyleType.BEVELED; break; case "I": this.style = r.AnnotationBorderStyleType.INSET; break; case "U": this.style = r.AnnotationBorderStyleType.UNDERLINE } } setDashArray(e) { if (Array.isArray(e) && e.length > 0) { let t = !0, a = !0; for (const r of e) { if (!(+r >= 0)) { t = !1; break } r > 0 && (a = !1) } t && !a ? this.dashArray = e : this.width = 0 } else e && (this.width = 0) } setHorizontalCornerRadius(e) { Number.isInteger(e) && (this.horizontalCornerRadius = e) } setVerticalCornerRadius(e) { Number.isInteger(e) && (this.verticalCornerRadius = e) } } t.AnnotationBorderStyle = d; class f extends u { constructor(e) { super(e); const t = e.dict; if (t.has("IRT")) { const e = t.getRaw("IRT"); this.data.inReplyTo = (0, n.isRef)(e) ? e.toString() : null; const a = t.get("RT"); this.data.replyType = (0, n.isName)(a) ? a.name : r.AnnotationReplyType.REPLY } if (this.data.replyType === r.AnnotationReplyType.GROUP) { const e = t.get("IRT"); this.data.title = (0, r.stringToPDFString)(e.get("T") || ""); this.setContents(e.get("Contents")); this.data.contents = this.contents; if (e.has("CreationDate")) { this.setCreationDate(e.get("CreationDate")); this.data.creationDate = this.creationDate } else this.data.creationDate = null; if (e.has("M")) { this.setModificationDate(e.get("M")); this.data.modificationDate = this.modificationDate } else this.data.modificationDate = null; this.data.hasPopup = e.has("Popup"); if (e.has("C")) { this.setColor(e.getArray("C")); this.data.color = this.color } else this.data.color = null } else { this.data.title = (0, r.stringToPDFString)(t.get("T") || ""); this.setCreationDate(t.get("CreationDate")); this.data.creationDate = this.creationDate; this.data.hasPopup = t.has("Popup"); t.has("C") || (this.data.color = null) } } setCreationDate(e) { this.creationDate = (0, r.isString)(e) ? e : null } } t.MarkupAnnotation = f; class g extends u { constructor(e) { super(e); const t = e.dict, a = this.data; a.annotationType = r.AnnotationType.WIDGET; a.fieldName = this._constructFieldName(t); a.fieldValue = (0, o.getInheritableProperty)({ dict: t, key: "V", getArray: !0 }); a.alternativeText = (0, r.stringToPDFString)(t.get("TU") || ""); a.defaultAppearance = (0, o.getInheritableProperty)({ dict: t, key: "DA" }) || ""; const i = (0, o.getInheritableProperty)({ dict: t, key: "FT" }); a.fieldType = (0, n.isName)(i) ? i.name : null; this.fieldResources = (0, o.getInheritableProperty)({ dict: t, key: "DR" }) || n.Dict.empty; a.fieldFlags = (0, o.getInheritableProperty)({ dict: t, key: "Ff" }); (!Number.isInteger(a.fieldFlags) || a.fieldFlags < 0) && (a.fieldFlags = 0); a.readOnly = this.hasFieldFlag(r.AnnotationFieldFlag.READONLY); if ("Sig" === a.fieldType) { a.fieldValue = null; this.setFlags(r.AnnotationFlag.HIDDEN) } } _constructFieldName(e) { if (!e.has("T") && !e.has("Parent")) { (0, r.warn)("Unknown field name, falling back to empty field name."); return "" } if (!e.has("Parent")) return (0, r.stringToPDFString)(e.get("T")); const t = []; e.has("T") && t.unshift((0, r.stringToPDFString)(e.get("T"))); let a = e; for (; a.has("Parent");) { a = a.get("Parent"); if (!(0, n.isDict)(a)) break; a.has("T") && t.unshift((0, r.stringToPDFString)(a.get("T"))) } return t.join(".") } hasFieldFlag(e) { return !!(this.data.fieldFlags & e) } getOperatorList(e, t, a) { return a ? Promise.resolve(new c.OperatorList) : super.getOperatorList(e, t, a) } } class m extends g { constructor(e) { super(e); const t = e.dict; this.data.fieldValue = (0, r.stringToPDFString)(this.data.fieldValue || ""); let a = (0, o.getInheritableProperty)({ dict: t, key: "Q" }); (!Number.isInteger(a) || a < 0 || a > 2) && (a = null); this.data.textAlignment = a; let i = (0, o.getInheritableProperty)({ dict: t, key: "MaxLen" }); (!Number.isInteger(i) || i < 0) && (i = null); this.data.maxLen = i; this.data.multiLine = this.hasFieldFlag(r.AnnotationFieldFlag.MULTILINE); this.data.comb = this.hasFieldFlag(r.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(r.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(r.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(r.AnnotationFieldFlag.FILESELECT) && null !== this.data.maxLen } getOperatorList(e, t, a) { if (a || this.appearance) return super.getOperatorList(e, t, a); const i = new c.OperatorList; if (!this.data.defaultAppearance) return Promise.resolve(i); const n = new l.Stream((0, r.stringToBytes)(this.data.defaultAppearance)); return e.getOperatorList({ stream: n, task: t, resources: this.fieldResources, operatorList: i }).then((function () { return i })) } } class p extends g { constructor(e) { super(e); this.data.checkBox = !this.hasFieldFlag(r.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(r.AnnotationFieldFlag.PUSHBUTTON); this.data.radioButton = this.hasFieldFlag(r.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(r.AnnotationFieldFlag.PUSHBUTTON); this.data.pushButton = this.hasFieldFlag(r.AnnotationFieldFlag.PUSHBUTTON); this.data.checkBox ? this._processCheckBox(e) : this.data.radioButton ? this._processRadioButton(e) : this.data.pushButton ? this._processPushButton(e) : (0, r.warn)("Invalid field flags for button widget annotation") } _processCheckBox(e) { (0, n.isName)(this.data.fieldValue) && (this.data.fieldValue = this.data.fieldValue.name); const t = e.dict.get("AP"); if (!(0, n.isDict)(t)) return; const a = t.get("D"); if (!(0, n.isDict)(a)) return; const r = a.getKeys(); 2 === r.length && (this.data.exportValue = "Off" === r[0] ? r[1] : r[0]) } _processRadioButton(e) { this.data.fieldValue = this.data.buttonValue = null; const t = e.dict.get("Parent"); if ((0, n.isDict)(t) && t.has("V")) { const e = t.get("V"); (0, n.isName)(e) && (this.data.fieldValue = e.name) } const a = e.dict.get("AP"); if (!(0, n.isDict)(a)) return; const r = a.get("N"); if ((0, n.isDict)(r)) for (const e of r.getKeys()) if ("Off" !== e) { this.data.buttonValue = e; break } } _processPushButton(e) { e.dict.has("A") ? i.Catalog.parseDestDictionary({ destDict: e.dict, resultObj: this.data, docBaseUrl: e.pdfManager.docBaseUrl }) : (0, r.warn)("Push buttons without action dictionaries are not supported") } } class b extends g { constructor(e) { super(e); this.data.options = []; const t = (0, o.getInheritableProperty)({ dict: e.dict, key: "Opt" }); if (Array.isArray(t)) { const a = e.xref; for (let e = 0, i = t.length; e < i; e++) { const i = a.fetchIfRef(t[e]), n = Array.isArray(i); this.data.options[e] = { exportValue: n ? a.fetchIfRef(i[0]) : i, displayValue: (0, r.stringToPDFString)(n ? a.fetchIfRef(i[1]) : i) } } } Array.isArray(this.data.fieldValue) || (this.data.fieldValue = [this.data.fieldValue]); this.data.combo = this.hasFieldFlag(r.AnnotationFieldFlag.COMBO); this.data.multiSelect = this.hasFieldFlag(r.AnnotationFieldFlag.MULTISELECT) } } class y extends f { constructor(e) { super(e); const t = e.dict; this.data.annotationType = r.AnnotationType.TEXT; if (this.data.hasAppearance) this.data.name = "NoIcon"; else { this.data.rect[1] = this.data.rect[3] - 22; this.data.rect[2] = this.data.rect[0] + 22; this.data.name = t.has("Name") ? t.get("Name").name : "Note" } if (t.has("State")) { this.data.state = t.get("State") || null; this.data.stateModel = t.get("StateModel") || null } else { this.data.state = null; this.data.stateModel = null } } } class v extends u { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.LINK; const t = h(e.dict, this.rectangle); t && (this.data.quadPoints = t); i.Catalog.parseDestDictionary({ destDict: e.dict, resultObj: this.data, docBaseUrl: e.pdfManager.docBaseUrl }) } } class w extends u { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.POPUP; let t = e.dict.get("Parent"); if (!t) { (0, r.warn)("Popup annotation has a missing or invalid parent annotation."); return } const a = t.get("Subtype"); this.data.parentType = (0, n.isName)(a) ? a.name : null; const i = e.dict.getRaw("Parent"); this.data.parentId = (0, n.isRef)(i) ? i.toString() : null; const s = t.get("RT"); (0, n.isName)(s, r.AnnotationReplyType.GROUP) && (t = t.get("IRT")); if (t.has("M")) { this.setModificationDate(t.get("M")); this.data.modificationDate = this.modificationDate } else this.data.modificationDate = null; if (t.has("C")) { this.setColor(t.getArray("C")); this.data.color = this.color } else this.data.color = null; if (!this.viewable) { const e = t.get("F"); this._isViewable(e) && this.setFlags(e) } this.data.title = (0, r.stringToPDFString)(t.get("T") || ""); this.data.contents = (0, r.stringToPDFString)(t.get("Contents") || "") } } class k extends f { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.FREETEXT } } class S extends f { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.LINE; this.data.lineCoordinates = r.Util.normalizeRect(e.dict.getArray("L")) } } class C extends f { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.SQUARE } } class x extends f { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.CIRCLE } } class A extends f { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.POLYLINE; const t = e.dict.getArray("Vertices"); this.data.vertices = []; for (let e = 0, a = t.length; e < a; e += 2)this.data.vertices.push({ x: t[e], y: t[e + 1] }) } } class I extends A { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.POLYGON } } class F extends f { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.CARET } } class T extends f { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.INK; const t = e.xref, a = e.dict.getArray("InkList"); this.data.inkLists = []; for (let e = 0, r = a.length; e < r; ++e) { this.data.inkLists.push([]); for (let r = 0, i = a[e].length; r < i; r += 2)this.data.inkLists[e].push({ x: t.fetchIfRef(a[e][r]), y: t.fetchIfRef(a[e][r + 1]) }) } } } class E extends f { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.HIGHLIGHT; const t = h(e.dict, this.rectangle); t && (this.data.quadPoints = t) } } class O extends f { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.UNDERLINE; const t = h(e.dict, this.rectangle); t && (this.data.quadPoints = t) } } class P extends f { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.SQUIGGLY; const t = h(e.dict, this.rectangle); t && (this.data.quadPoints = t) } } class B extends f { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.STRIKEOUT; const t = h(e.dict, this.rectangle); t && (this.data.quadPoints = t) } } class D extends f { constructor(e) { super(e); this.data.annotationType = r.AnnotationType.STAMP } } class N extends f { constructor(e) { super(e); const t = new i.FileSpec(e.dict.get("FS"), e.xref); this.data.annotationType = r.AnnotationType.FILEATTACHMENT; this.data.file = t.serializable } } }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.OperatorList = void 0; var r = a(2), i = function () { function e(e, t, a, r, i) { for (var n = e, s = 0, o = t.length - 1; s < o; s++) { var c = t[s]; n = n[c] || (n[c] = []) } n[t[t.length - 1]] = { checkFn: a, iterateFn: r, processFn: i } } var t = []; e(t, [r.OPS.save, r.OPS.transform, r.OPS.paintInlineImageXObject, r.OPS.restore], null, (function (e, t) { var a = e.fnArray, i = (t - (e.iCurr - 3)) % 4; switch (i) { case 0: return a[t] === r.OPS.save; case 1: return a[t] === r.OPS.transform; case 2: return a[t] === r.OPS.paintInlineImageXObject; case 3: return a[t] === r.OPS.restore }throw new Error(`iterateInlineImageGroup - invalid pos: ${i}`) }), (function (e, t) { var a = e.fnArray, i = e.argsArray, n = e.iCurr, s = n - 3, o = n - 2, c = n - 1, l = Math.min(Math.floor((t - s) / 4), 200); if (l < 10) return t - (t - s) % 4; var h, u = 0, d = [], f = 0, g = 1, m = 1; for (h = 0; h < l; h++) { var p = i[o + (h << 2)], b = i[c + (h << 2)][0]; if (g + b.width > 1e3) { u = Math.max(u, g); m += f + 2; g = 0; f = 0 } d.push({ transform: p, x: g, y: m, w: b.width, h: b.height }); g += b.width + 2; f = Math.max(f, b.height) } var y = Math.max(u, g) + 1, v = m + f + 1, w = new Uint8ClampedArray(y * v * 4), k = y << 2; for (h = 0; h < l; h++) { var S = i[c + (h << 2)][0].data, C = d[h].w << 2, x = 0, A = d[h].x + d[h].y * y << 2; w.set(S.subarray(0, C), A - k); for (var I = 0, F = d[h].h; I < F; I++) { w.set(S.subarray(x, x + C), A); x += C; A += k } w.set(S.subarray(x - C, x), A); for (; A >= 0;) { S[A - 4] = S[A]; S[A - 3] = S[A + 1]; S[A - 2] = S[A + 2]; S[A - 1] = S[A + 3]; S[A + C] = S[A + C - 4]; S[A + C + 1] = S[A + C - 3]; S[A + C + 2] = S[A + C - 2]; S[A + C + 3] = S[A + C - 1]; A -= k } } a.splice(s, 4 * l, r.OPS.paintInlineImageXObjectGroup); i.splice(s, 4 * l, [{ width: y, height: v, kind: r.ImageKind.RGBA_32BPP, data: w }, d]); return s + 1 })); e(t, [r.OPS.save, r.OPS.transform, r.OPS.paintImageMaskXObject, r.OPS.restore], null, (function (e, t) { var a = e.fnArray, i = (t - (e.iCurr - 3)) % 4; switch (i) { case 0: return a[t] === r.OPS.save; case 1: return a[t] === r.OPS.transform; case 2: return a[t] === r.OPS.paintImageMaskXObject; case 3: return a[t] === r.OPS.restore }throw new Error(`iterateImageMaskGroup - invalid pos: ${i}`) }), (function (e, t) { var a, i = e.fnArray, n = e.argsArray, s = e.iCurr, o = s - 3, c = s - 2, l = s - 1, h = Math.floor((t - o) / 4); if ((h = function (e, t, a, i) { for (var n = e + 2, s = 0; s < t; s++) { var o = i[n + 4 * s], c = 1 === o.length && o[0]; if (!c || 1 !== c.width || 1 !== c.height || c.data.length && (1 !== c.data.length || 0 !== c.data[0])) break; a[n + 4 * s] = r.OPS.paintSolidColorImageMask } return t - s }(o, h, i, n)) < 10) return t - (t - o) % 4; var u, d, f = !1, g = n[l][0]; if (0 === n[c][1] && 0 === n[c][2]) { f = !0; var m = n[c][0], p = n[c][3]; u = c + 4; var b = l + 4; for (a = 1; a < h; a++, u += 4, b += 4) { d = n[u]; if (n[b][0] !== g || d[0] !== m || 0 !== d[1] || 0 !== d[2] || d[3] !== p) { a < 10 ? f = !1 : h = a; break } } } if (f) { h = Math.min(h, 1e3); var y = new Float32Array(2 * h); u = c; for (a = 0; a < h; a++, u += 4) { d = n[u]; y[a << 1] = d[4]; y[1 + (a << 1)] = d[5] } i.splice(o, 4 * h, r.OPS.paintImageMaskXObjectRepeat); n.splice(o, 4 * h, [g, m, p, y]) } else { h = Math.min(h, 100); var v = []; for (a = 0; a < h; a++) { d = n[c + (a << 2)]; var w = n[l + (a << 2)][0]; v.push({ data: w.data, width: w.width, height: w.height, transform: d }) } i.splice(o, 4 * h, r.OPS.paintImageMaskXObjectGroup); n.splice(o, 4 * h, [v]) } return o + 1 })); e(t, [r.OPS.save, r.OPS.transform, r.OPS.paintImageXObject, r.OPS.restore], (function (e) { var t = e.argsArray, a = e.iCurr - 2; return 0 === t[a][1] && 0 === t[a][2] }), (function (e, t) { var a = e.fnArray, i = e.argsArray, n = (t - (e.iCurr - 3)) % 4; switch (n) { case 0: return a[t] === r.OPS.save; case 1: if (a[t] !== r.OPS.transform) return !1; var s = e.iCurr - 2, o = i[s][0], c = i[s][3]; return i[t][0] === o && 0 === i[t][1] && 0 === i[t][2] && i[t][3] === c; case 2: if (a[t] !== r.OPS.paintImageXObject) return !1; var l = i[e.iCurr - 1][0]; return i[t][0] === l; case 3: return a[t] === r.OPS.restore }throw new Error(`iterateImageGroup - invalid pos: ${n}`) }), (function (e, t) { var a = e.fnArray, i = e.argsArray, n = e.iCurr, s = n - 3, o = n - 2, c = i[n - 1][0], l = i[o][0], h = i[o][3], u = Math.min(Math.floor((t - s) / 4), 1e3); if (u < 3) return t - (t - s) % 4; for (var d = new Float32Array(2 * u), f = o, g = 0; g < u; g++, f += 4) { var m = i[f]; d[g << 1] = m[4]; d[1 + (g << 1)] = m[5] } var p = [c, l, h, d]; a.splice(s, 4 * u, r.OPS.paintImageXObjectRepeat); i.splice(s, 4 * u, p); return s + 1 })); e(t, [r.OPS.beginText, r.OPS.setFont, r.OPS.setTextMatrix, r.OPS.showText, r.OPS.endText], null, (function (e, t) { var a = e.fnArray, i = e.argsArray, n = (t - (e.iCurr - 4)) % 5; switch (n) { case 0: return a[t] === r.OPS.beginText; case 1: return a[t] === r.OPS.setFont; case 2: return a[t] === r.OPS.setTextMatrix; case 3: if (a[t] !== r.OPS.showText) return !1; var s = e.iCurr - 3, o = i[s][0], c = i[s][1]; return i[t][0] === o && i[t][1] === c; case 4: return a[t] === r.OPS.endText }throw new Error(`iterateShowTextGroup - invalid pos: ${n}`) }), (function (e, t) { var a = e.fnArray, r = e.argsArray, i = e.iCurr, n = i - 4, s = i - 3, o = i - 2, c = i - 1, l = i, h = r[s][0], u = r[s][1], d = Math.min(Math.floor((t - n) / 5), 1e3); if (d < 3) return t - (t - n) % 5; var f = n; if (n >= 4 && a[n - 4] === a[s] && a[n - 3] === a[o] && a[n - 2] === a[c] && a[n - 1] === a[l] && r[n - 4][0] === h && r[n - 4][1] === u) { d++; f -= 5 } for (var g = f + 4, m = 1; m < d; m++) { a.splice(g, 3); r.splice(g, 3); g += 2 } return g + 1 })); function a(e) { this.queue = e; this.state = null; this.context = { iCurr: 0, fnArray: e.fnArray, argsArray: e.argsArray }; this.match = null; this.lastProcessed = 0 } a.prototype = { _optimize() { const e = this.queue.fnArray; let a = this.lastProcessed, r = e.length, i = this.state, n = this.match; if (!i && !n && a + 1 === r && !t[e[a]]) { this.lastProcessed = r; return } const s = this.context; for (; a < r;) { if (n) { if ((0, n.iterateFn)(s, a)) { a++; continue } a = (0, n.processFn)(s, a + 1); r = e.length; n = null; i = null; if (a >= r) break } i = (i || t)[e[a]]; if (i && !Array.isArray(i)) { s.iCurr = a; a++; if (!i.checkFn || (0, i.checkFn)(s)) { n = i; i = null } else i = null } else a++ } this.state = i; this.match = n; this.lastProcessed = a }, push(e, t) { this.queue.fnArray.push(e); this.queue.argsArray.push(t); this._optimize() }, flush() { for (; this.match;) { const e = this.queue.fnArray.length; this.lastProcessed = (0, this.match.processFn)(this.context, e); this.match = null; this.state = null; this._optimize() } }, reset() { this.state = null; this.match = null; this.lastProcessed = 0 } }; return a }(), n = function () { function e(e) { this.queue = e } e.prototype = { push(e, t) { this.queue.fnArray.push(e); this.queue.argsArray.push(t) }, flush() { }, reset() { } }; return e }(), s = function () { function e(e, t, a) { this._streamSink = t; this.fnArray = []; this.argsArray = []; this.optimizer = t && "oplist" !== e ? new i(this) : new n(this); this.dependencies = Object.create(null); this._totalLength = 0; this.pageIndex = a; this.intent = e; this.weight = 0; this._resolved = t ? null : Promise.resolve() } e.prototype = { get length() { return this.argsArray.length }, get ready() { return this._resolved || this._streamSink.ready }, get totalLength() { return this._totalLength + this.length }, addOp(e, t) { this.optimizer.push(e, t); this.weight++; this._streamSink && (this.weight >= 1e3 || this.weight >= 995 && (e === r.OPS.restore || e === r.OPS.endText)) && this.flush() }, addDependency(e) { if (!(e in this.dependencies)) { this.dependencies[e] = !0; this.addOp(r.OPS.dependency, [e]) } }, addDependencies(e) { for (var t in e) this.addDependency(t) }, addOpList(e) { Object.assign(this.dependencies, e.dependencies); for (var t = 0, a = e.length; t < a; t++)this.addOp(e.fnArray[t], e.argsArray[t]) }, getIR() { return { fnArray: this.fnArray, argsArray: this.argsArray, length: this.length } }, get _transfers() { const e = [], { fnArray: t, argsArray: a, length: i } = this; for (let n = 0; n < i; n++)switch (t[n]) { case r.OPS.paintInlineImageXObject: case r.OPS.paintInlineImageXObjectGroup: case r.OPS.paintImageMaskXObject: const t = a[n][0]; t.cached || e.push(t.data.buffer) }return e }, flush(e = !1) { this.optimizer.flush(); const t = this.length; this._totalLength += t; this._streamSink.enqueue({ fnArray: this.fnArray, argsArray: this.argsArray, lastChunk: e, length: t }, 1, this._transfers); this.dependencies = Object.create(null); this.fnArray.length = 0; this.argsArray.length = 0; this.weight = 0; this.optimizer.reset() } }; return e }(); t.OperatorList = s }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.PartialEvaluator = void 0; var r = a(2), i = a(26), n = a(4), s = a(27), o = a(30), c = a(7), l = a(33), h = a(32), u = a(36), d = a(10), f = a(37), g = a(22), m = a(11), p = a(31), b = a(38), y = a(39), v = a(17), w = a(41), k = a(42), S = a(24), C = a(43), x = function () { const e = { forceDataSchema: !1, maxImageSize: -1, disableFontFace: !1, nativeImageDecoderSupport: r.NativeImageDecoding.DECODE, ignoreErrors: !1, isEvalSupported: !0 }; function t({ xref: t, handler: a, pageIndex: i, idFactory: n, fontCache: s, builtInCMapCache: o, options: c = null, pdfFunctionFactory: l }) { this.xref = t; this.handler = a; this.pageIndex = i; this.idFactory = n; this.fontCache = s; this.builtInCMapCache = o; this.options = c || e; this.pdfFunctionFactory = l; this.parsingType3Font = !1; this.fetchBuiltInCMap = async e => { if (this.builtInCMapCache.has(e)) return this.builtInCMapCache.get(e); const t = this.handler.sendWithStream("FetchBuiltInCMap", { name: e }).getReader(), a = await new Promise((function (e, a) { !function r() { t.read().then((function ({ value: t, done: a }) { if (!a) { e(t); r() } }), a) }() })); a.compressionType !== r.CMapCompressionType.NONE && this.builtInCMapCache.set(e, a); return a } } function a() { this.reset() } a.prototype = { check: function () { if (++this.checked < 100) return !1; this.checked = 0; return this.endTime <= Date.now() }, reset: function () { this.endTime = Date.now() + 20; this.checked = 0 } }; function d(e, t = !1) { if (Array.isArray(e)) { for (let t = 0, a = e.length; t < a; t++) { const a = d(e[t], !0); if (a) return a } (0, r.warn)(`Unsupported blend mode Array: ${e}`); return "source-over" } if (!(0, n.isName)(e)) return t ? null : "source-over"; switch (e.name) { case "Normal": case "Compatible": return "source-over"; case "Multiply": return "multiply"; case "Screen": return "screen"; case "Overlay": return "overlay"; case "Darken": return "darken"; case "Lighten": return "lighten"; case "ColorDodge": return "color-dodge"; case "ColorBurn": return "color-burn"; case "HardLight": return "hard-light"; case "SoftLight": return "soft-light"; case "Difference": return "difference"; case "Exclusion": return "exclusion"; case "Hue": return "hue"; case "Saturation": return "saturation"; case "Color": return "color"; case "Luminosity": return "luminosity" }if (t) return null; (0, r.warn)(`Unsupported blend mode: ${e.name}`); return "source-over" } var x = Promise.resolve(); t.prototype = { clone(t = e) { var a = Object.create(this); a.options = t; return a }, hasBlendModes: function (e) { if (!(e instanceof n.Dict)) return !1; var t = Object.create(null); e.objId && (t[e.objId] = !0); for (var a = [e], i = this.xref; a.length;) { var s = a.shift(), o = s.get("ExtGState"); if (o instanceof n.Dict) { var l = o.getKeys(); for (let e = 0, a = l.length; e < a; e++) { const a = l[e]; let s = o.getRaw(a); if (s instanceof n.Ref) { if (t[s.toString()]) continue; try { s = i.fetch(s) } catch (e) { if (e instanceof c.MissingDataException) throw e; if (this.options.ignoreErrors) { s instanceof n.Ref && (t[s.toString()] = !0); this.handler.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.unknown }); (0, r.warn)(`hasBlendModes - ignoring ExtGState: "${e}".`); continue } throw e } } if (!(s instanceof n.Dict)) continue; s.objId && (t[s.objId] = !0); const h = s.get("BM"); if (h instanceof n.Name) { if ("Normal" !== h.name) return !0 } else if (void 0 !== h && Array.isArray(h)) for (let e = 0, t = h.length; e < t; e++)if (h[e] instanceof n.Name && "Normal" !== h[e].name) return !0 } } var h = s.get("XObject"); if (h instanceof n.Dict) { var u = h.getKeys(); for (let e = 0, s = u.length; e < s; e++) { const s = u[e]; var d = h.getRaw(s); if (d instanceof n.Ref) { if (t[d.toString()]) continue; try { d = i.fetch(d) } catch (e) { if (e instanceof c.MissingDataException) throw e; if (this.options.ignoreErrors) { d instanceof n.Ref && (t[d.toString()] = !0); this.handler.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.unknown }); (0, r.warn)(`hasBlendModes - ignoring XObject: "${e}".`); continue } throw e } } if ((0, n.isStream)(d)) { if (d.dict.objId) { if (t[d.dict.objId]) continue; t[d.dict.objId] = !0 } var f = d.dict.get("Resources"); if (f instanceof n.Dict && (!f.objId || !t[f.objId])) { a.push(f); f.objId && (t[f.objId] = !0) } } } } } return !1 }, async buildFormXObject(e, t, a, i, s, o) { var c = t.dict, l = c.getArray("Matrix"), h = c.getArray("BBox"); h = Array.isArray(h) && 4 === h.length ? r.Util.normalizeRect(h) : null; var u = c.get("Group"); if (u) { var d = { matrix: l, bbox: h, smask: a, isolated: !1, knockout: !1 }, f = u.get("S"), m = null; if ((0, n.isName)(f, "Transparency")) { d.isolated = u.get("I") || !1; d.knockout = u.get("K") || !1; u.has("CS") && (m = await this.parseColorSpace({ cs: u.get("CS"), resources: e })) } if (a && a.backdrop) { m = m || g.ColorSpace.singletons.rgb; a.backdrop = m.getRgb(a.backdrop, 0) } i.addOp(r.OPS.beginGroup, [d]) } i.addOp(r.OPS.paintFormXObjectBegin, [l, h]); return this.getOperatorList({ stream: t, task: s, resources: c.get("Resources") || e, operatorList: i, initialState: o }).then((function () { i.addOp(r.OPS.paintFormXObjectEnd, []); u && i.addOp(r.OPS.endGroup, [d]) })) }, async buildPaintImageXObject({ resources: e, image: t, isInline: a = !1, operatorList: i, cacheKey: n, imageCache: s, forceDisableNativeImageDecoder: o = !1 }) { var c = t.dict, l = c.get("Width", "W"), h = c.get("Height", "H"); if (!(l && (0, r.isNum)(l) && h && (0, r.isNum)(h))) { (0, r.warn)("Image dimensions are missing, or not numbers."); return } var u, d, f = this.options.maxImageSize; if (-1 !== f && l * h > f) { (0, r.warn)("Image exceeded maximum allowed size and was removed."); return } if (c.get("ImageMask", "IM") || !1) { var g = c.get("Width", "W"), p = c.get("Height", "H"), b = g + 7 >> 3, y = t.getBytes(b * p, !0), w = c.getArray("Decode", "D"); (u = C.PDFImage.createMask({ imgArray: y, width: g, height: p, imageIsFromDecodeStream: t instanceof m.DecodeStream, inverseDecode: !!w && w[0] > 0 })).cached = !!n; d = [u]; i.addOp(r.OPS.paintImageMaskXObject, d); n && (s[n] = { fn: r.OPS.paintImageMaskXObject, args: d }); return } var S = c.get("SMask", "SM") || !1, x = c.get("Mask") || !1; if (a && !S && !x && !(t instanceof v.JpegStream) && l + h < 200) { u = new C.PDFImage({ xref: this.xref, res: e, image: t, isInline: a, pdfFunctionFactory: this.pdfFunctionFactory }).createImageData(!0); i.addOp(r.OPS.paintInlineImageXObject, [u]); return } const A = o ? r.NativeImageDecoding.NONE : this.options.nativeImageDecoderSupport; let I = `img_${this.idFactory.createObjId()}`; if (this.parsingType3Font) { (0, r.assert)(A === r.NativeImageDecoding.NONE, "Type3 image resources should be completely decoded in the worker."); I = `${this.idFactory.getDocId()}_type3res_${I}` } if (A !== r.NativeImageDecoding.NONE && !S && !x && t instanceof v.JpegStream && k.NativeImageDecoder.isSupported(t, this.xref, e, this.pdfFunctionFactory) && t.maybeValidDimensions) return this.handler.sendWithPromise("obj", [I, this.pageIndex, "JpegStream", t.getIR(this.options.forceDataSchema)]).then((function () { i.addDependency(I); d = [I, l, h]; i.addOp(r.OPS.paintJpegXObject, d); n && (s[n] = { fn: r.OPS.paintJpegXObject, args: d }) }), o => { (0, r.warn)("Native JPEG decoding failed -- trying to recover: " + (o && o.message)); return this.buildPaintImageXObject({ resources: e, image: t, isInline: a, operatorList: i, cacheKey: n, imageCache: s, forceDisableNativeImageDecoder: !0 }) }); var F = null; A === r.NativeImageDecoding.DECODE && (t instanceof v.JpegStream || x instanceof v.JpegStream || S instanceof v.JpegStream) && (F = new k.NativeImageDecoder({ xref: this.xref, resources: e, handler: this.handler, forceDataSchema: this.options.forceDataSchema, pdfFunctionFactory: this.pdfFunctionFactory })); i.addDependency(I); d = [I, l, h]; const T = C.PDFImage.buildImage({ handler: this.handler, xref: this.xref, res: e, image: t, isInline: a, nativeDecoder: F, pdfFunctionFactory: this.pdfFunctionFactory }).then(e => { var t = e.createImageData(!1); if (this.parsingType3Font) return this.handler.sendWithPromise("commonobj", [I, "FontType3Res", t], [t.data.buffer]); this.handler.send("obj", [I, this.pageIndex, "Image", t], [t.data.buffer]) }).catch(e => { (0, r.warn)("Unable to decode image: " + e); if (this.parsingType3Font) return this.handler.sendWithPromise("commonobj", [I, "FontType3Res", null]); this.handler.send("obj", [I, this.pageIndex, "Image", null]) }); this.parsingType3Font && await T; i.addOp(r.OPS.paintImageXObject, d); n && (s[n] = { fn: r.OPS.paintImageXObject, args: d }) }, handleSMask: function (e, t, a, r, i) { var n = e.get("G"), s = { subtype: e.get("S").name, backdrop: e.get("BC") }, o = e.get("TR"); if ((0, y.isPDFFunction)(o)) { const e = this.pdfFunctionFactory.create(o); for (var c = new Uint8Array(256), l = new Float32Array(1), h = 0; h < 256; h++) { l[0] = h / 255; e(l, 0, l, 0); c[h] = 255 * l[0] | 0 } s.transferMap = c } return this.buildFormXObject(t, n, s, a, r, i.state.clone()) }, handleTilingType(e, t, a, i, s, o, c) { const l = new S.OperatorList, h = [s.get("Resources"), a], d = n.Dict.merge(this.xref, h); return this.getOperatorList({ stream: i, task: c, resources: d, operatorList: l }).then((function () { return (0, u.getTilingPatternIR)({ fnArray: l.fnArray, argsArray: l.argsArray }, s, t) })).then((function (t) { o.addDependencies(l.dependencies); o.addOp(e, t) }), e => { if (!(e instanceof r.AbortException)) { if (!this.options.ignoreErrors) throw e; this.handler.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.unknown }); (0, r.warn)(`handleTilingType - ignoring pattern: "${e}".`) } }) }, handleSetFont: function (e, t, a, i, n, o) { var c; t && (c = (t = t.slice())[0].name); return this.loadFont(c, a, e).then(t => t.font.isType3Font ? t.loadType3Data(this, e, i, n).then((function () { return t })).catch(e => { this.handler.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.font }); return new A("g_font_error", new s.ErrorFont("Type3 font load error: " + e), t.font) }) : t).then(e => { o.font = e.font; e.send(this.handler); return e.loadedName }) }, handleText(e, a) { const i = a.font, n = i.charsToGlyphs(e); if (i.data) { (!!(a.textRenderingMode & r.TextRenderingMode.ADD_TO_PATH_FLAG) || "Pattern" === a.fillColorSpace.name || i.disableFontFace || this.options.disableFontFace) && t.buildFontPaths(i, n, this.handler) } return n }, ensureStateFont(e) { if (e.font) return; const t = new r.FormatError("Missing setFont (Tf) operator before text rendering operator."); if (!this.options.ignoreErrors) throw t; this.handler.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.font }); (0, r.warn)(`ensureStateFont: "${t}".`) }, setGState: function (e, t, a, i, s) { for (var o = [], c = t.getKeys(), l = Promise.resolve(), h = 0, u = c.length; h < u; h++) { const u = c[h], f = t.get(u); switch (u) { case "Type": break; case "LW": case "LC": case "LJ": case "ML": case "D": case "RI": case "FL": case "CA": case "ca": o.push([u, f]); break; case "Font": l = l.then(() => this.handleSetFont(e, null, f[0], a, i, s.state).then((function (e) { a.addDependency(e); o.push([u, [e, f[1]]]) }))); break; case "BM": o.push([u, d(f)]); break; case "SMask": if ((0, n.isName)(f, "None")) { o.push([u, !1]); break } if ((0, n.isDict)(f)) { l = l.then(() => this.handleSMask(f, e, a, i, s)); o.push([u, !0]) } else (0, r.warn)("Unsupported SMask type"); break; case "OP": case "op": case "OPM": case "BG": case "BG2": case "UCR": case "UCR2": case "TR": case "TR2": case "HT": case "SM": case "SA": case "AIS": case "TK": (0, r.info)("graphic state operator " + u); break; default: (0, r.info)("Unknown graphic state operator " + u) } } return l.then((function () { o.length > 0 && a.addOp(r.OPS.setGState, [o]) })) }, loadFont: function (e, a, i) { function o() { return Promise.resolve(new A("g_font_error", new s.ErrorFont("Font " + e + " is not available"), a)) } var c, l = this.xref; if (a) { if (!(0, n.isRef)(a)) throw new r.FormatError('The "font" object should be a reference.'); c = a } else { var h = i.get("Font"); h && (c = h.getRaw(e)) } if (!c) { const i = `Font "${e || a && a.toString()}" is not available`; if (!this.options.ignoreErrors && !this.parsingType3Font) { (0, r.warn)(`${i}.`); return o() } this.handler.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.font }); (0, r.warn)(`${i} -- attempting to fallback to a default font.`); c = t.getFallbackFontDict() } if (this.fontCache.has(c)) return this.fontCache.get(c); a = l.fetchIfRef(c); if (!(0, n.isDict)(a)) return o(); if (a.translated) return a.translated; var u = (0, r.createPromiseCapability)(), d = this.preEvaluateFont(a); const { descriptor: f, hash: g } = d; var m, p, b = (0, n.isRef)(c); b && (m = c.toString()); if (g && (0, n.isDict)(f)) { f.fontAliases || (f.fontAliases = Object.create(null)); var y = f.fontAliases; if (y[g]) { var v = y[g].aliasRef; if (b && v && this.fontCache.has(v)) { this.fontCache.putAlias(c, v); return this.fontCache.get(c) } } else y[g] = { fontID: s.Font.getFontID() }; b && (y[g].aliasRef = c); m = y[g].fontID } if (b) this.fontCache.put(c, u.promise); else { m || (m = this.idFactory.createObjId()); this.fontCache.put(`id_${m}`, u.promise) } (0, r.assert)(m, 'The "fontID" must be defined.'); a.loadedName = `${this.idFactory.getDocId()}_f${m}`; a.translated = u.promise; try { p = this.translateFont(d) } catch (e) { p = Promise.reject(e) } p.then((function (e) { if (void 0 !== e.fontType) { l.stats.fontTypes[e.fontType] = !0 } u.resolve(new A(a.loadedName, e, a)) })).catch(e => { this.handler.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.font }); try { var t = f && f.get("FontFile3"), i = t && t.get("Subtype"), n = (0, s.getFontType)(d.type, i && i.name); l.stats.fontTypes[n] = !0 } catch (e) { } u.resolve(new A(a.loadedName, new s.ErrorFont(e instanceof Error ? e.message : e), a)) }); return u.promise }, buildPath(e, t, a, i = !1) { var n = e.length - 1; a || (a = []); if (n < 0 || e.fnArray[n] !== r.OPS.constructPath) { if (i) { (0, r.warn)(`Encountered path operator "${t}" inside of a text object.`); e.addOp(r.OPS.save, null) } e.addOp(r.OPS.constructPath, [[t], a]); i && e.addOp(r.OPS.restore, null) } else { var s = e.argsArray[n]; s[0].push(t); Array.prototype.push.apply(s[1], a) } }, parseColorSpace({ cs: e, resources: t }) { return new Promise(a => { a(g.ColorSpace.parse(e, this.xref, t, this.pdfFunctionFactory)) }).catch(e => { if (e instanceof r.AbortException) return null; if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.unknown }); (0, r.warn)(`parseColorSpace - ignoring ColorSpace: "${e}".`); return null } throw e }) }, async handleColorN(e, t, a, i, s, o, c) { var l, h = a[a.length - 1]; if ((0, n.isName)(h) && (l = s.get(h.name))) { var d = (0, n.isStream)(l) ? l.dict : l, f = d.get("PatternType"); if (1 === f) { var g = i.base ? i.base.getRgb(a, 0) : null; return this.handleTilingType(t, g, o, l, d, e, c) } if (2 === f) { var m = d.get("Shading"), p = d.getArray("Matrix"); l = u.Pattern.parseShading(m, p, this.xref, o, this.handler, this.pdfFunctionFactory); e.addOp(t, l.getIR()); return } throw new r.FormatError(`Unknown PatternType: ${f}`) } throw new r.FormatError(`Unknown PatternName: ${h}`) }, getOperatorList({ stream: e, task: t, resources: i, operatorList: s, initialState: o = null }) { i = i || n.Dict.empty; o = o || new T; if (!s) throw new Error('getOperatorList: missing "operatorList" parameter'); var c = this, l = this.xref; let h = !1; var d = Object.create(null), f = i.get("XObject") || n.Dict.empty, m = i.get("Pattern") || n.Dict.empty, p = new I(o), b = new E(e, l, p), y = new a; function v(e) { for (var t = 0, a = b.savedStatesDepth; t < a; t++)s.addOp(r.OPS.restore, []) } return new Promise((function e(a, o) { const w = function (t) { Promise.all([t, s.ready]).then((function () { try { e(a, o) } catch (e) { o(e) } }), o) }; t.ensureNotTerminated(); y.reset(); for (var k, S, C, A, I = {}; !(k = y.check());) { I.args = null; if (!b.read(I)) break; var F = I.args, T = I.fn; switch (0 | T) { case r.OPS.paintXObject: var E = F[0].name; if (E && void 0 !== d[E]) { s.addOp(d[E].fn, d[E].args); F = null; continue } w(new Promise((function (e, a) { if (!E) throw new r.FormatError("XObject must be referred to by name."); const o = f.get(E); if (!o) { s.addOp(T, F); e(); return } if (!(0, n.isStream)(o)) throw new r.FormatError("XObject should be a stream"); const l = o.dict.get("Subtype"); if (!(0, n.isName)(l)) throw new r.FormatError("XObject should have a Name subtype"); if ("Form" !== l.name) if ("Image" !== l.name) { if ("PS" !== l.name) throw new r.FormatError(`Unhandled XObject subtype ${l.name}`); (0, r.info)("Ignored XObject subtype PS"); e() } else c.buildPaintImageXObject({ resources: i, image: o, operatorList: s, cacheKey: E, imageCache: d }).then(e, a); else { p.save(); c.buildFormXObject(i, o, null, s, t, p.state.clone()).then((function () { p.restore(); e() }), a) } })).catch((function (e) { if (!(e instanceof r.AbortException)) { if (!c.options.ignoreErrors) throw e; c.handler.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.unknown }); (0, r.warn)(`getOperatorList - ignoring XObject: "${e}".`) } }))); return; case r.OPS.setFont: var O = F[1]; w(c.handleSetFont(i, F, null, s, t, p.state).then((function (e) { s.addDependency(e); s.addOp(r.OPS.setFont, [e, O]) }))); return; case r.OPS.beginText: h = !0; break; case r.OPS.endText: h = !1; break; case r.OPS.endInlineImage: var P = F[0].cacheKey; if (P) { var B = d[P]; if (void 0 !== B) { s.addOp(B.fn, B.args); F = null; continue } } w(c.buildPaintImageXObject({ resources: i, image: F[0], isInline: !0, operatorList: s, cacheKey: P, imageCache: d })); return; case r.OPS.showText: if (!p.state.font) { c.ensureStateFont(p.state); continue } F[0] = c.handleText(F[0], p.state); break; case r.OPS.showSpacedText: if (!p.state.font) { c.ensureStateFont(p.state); continue } var D = F[0], N = [], M = D.length, L = p.state; for (S = 0; S < M; ++S) { var R = D[S]; (0, r.isString)(R) ? Array.prototype.push.apply(N, c.handleText(R, L)) : (0, r.isNum)(R) && N.push(R) } F[0] = N; T = r.OPS.showText; break; case r.OPS.nextLineShowText: if (!p.state.font) { c.ensureStateFont(p.state); continue } s.addOp(r.OPS.nextLine); F[0] = c.handleText(F[0], p.state); T = r.OPS.showText; break; case r.OPS.nextLineSetSpacingShowText: if (!p.state.font) { c.ensureStateFont(p.state); continue } s.addOp(r.OPS.nextLine); s.addOp(r.OPS.setWordSpacing, [F.shift()]); s.addOp(r.OPS.setCharSpacing, [F.shift()]); F[0] = c.handleText(F[0], p.state); T = r.OPS.showText; break; case r.OPS.setTextRenderingMode: p.state.textRenderingMode = F[0]; break; case r.OPS.setFillColorSpace: w(c.parseColorSpace({ cs: F[0], resources: i }).then((function (e) { e && (p.state.fillColorSpace = e) }))); return; case r.OPS.setStrokeColorSpace: w(c.parseColorSpace({ cs: F[0], resources: i }).then((function (e) { e && (p.state.strokeColorSpace = e) }))); return; case r.OPS.setFillColor: A = p.state.fillColorSpace; F = A.getRgb(F, 0); T = r.OPS.setFillRGBColor; break; case r.OPS.setStrokeColor: A = p.state.strokeColorSpace; F = A.getRgb(F, 0); T = r.OPS.setStrokeRGBColor; break; case r.OPS.setFillGray: p.state.fillColorSpace = g.ColorSpace.singletons.gray; F = g.ColorSpace.singletons.gray.getRgb(F, 0); T = r.OPS.setFillRGBColor; break; case r.OPS.setStrokeGray: p.state.strokeColorSpace = g.ColorSpace.singletons.gray; F = g.ColorSpace.singletons.gray.getRgb(F, 0); T = r.OPS.setStrokeRGBColor; break; case r.OPS.setFillCMYKColor: p.state.fillColorSpace = g.ColorSpace.singletons.cmyk; F = g.ColorSpace.singletons.cmyk.getRgb(F, 0); T = r.OPS.setFillRGBColor; break; case r.OPS.setStrokeCMYKColor: p.state.strokeColorSpace = g.ColorSpace.singletons.cmyk; F = g.ColorSpace.singletons.cmyk.getRgb(F, 0); T = r.OPS.setStrokeRGBColor; break; case r.OPS.setFillRGBColor: p.state.fillColorSpace = g.ColorSpace.singletons.rgb; F = g.ColorSpace.singletons.rgb.getRgb(F, 0); break; case r.OPS.setStrokeRGBColor: p.state.strokeColorSpace = g.ColorSpace.singletons.rgb; F = g.ColorSpace.singletons.rgb.getRgb(F, 0); break; case r.OPS.setFillColorN: if ("Pattern" === (A = p.state.fillColorSpace).name) { w(c.handleColorN(s, r.OPS.setFillColorN, F, A, m, i, t)); return } F = A.getRgb(F, 0); T = r.OPS.setFillRGBColor; break; case r.OPS.setStrokeColorN: if ("Pattern" === (A = p.state.strokeColorSpace).name) { w(c.handleColorN(s, r.OPS.setStrokeColorN, F, A, m, i, t)); return } F = A.getRgb(F, 0); T = r.OPS.setStrokeRGBColor; break; case r.OPS.shadingFill: var U = i.get("Shading"); if (!U) throw new r.FormatError("No shading resource found"); var q = U.get(F[0].name); if (!q) throw new r.FormatError("No shading object found"); var j = u.Pattern.parseShading(q, null, l, i, c.handler, c.pdfFunctionFactory).getIR(); F = [j]; T = r.OPS.shadingFill; break; case r.OPS.setGState: var _ = F[0], z = i.get("ExtGState"); if (!(0, n.isDict)(z) || !z.has(_.name)) break; var H = z.get(_.name); w(c.setGState(i, H, s, t, p)); return; case r.OPS.moveTo: case r.OPS.lineTo: case r.OPS.curveTo: case r.OPS.curveTo2: case r.OPS.curveTo3: case r.OPS.closePath: case r.OPS.rectangle: c.buildPath(s, T, F, h); continue; case r.OPS.markPoint: case r.OPS.markPointProps: case r.OPS.beginMarkedContent: case r.OPS.beginMarkedContentProps: case r.OPS.endMarkedContent: case r.OPS.beginCompat: case r.OPS.endCompat: continue; default: if (null !== F) { for (S = 0, C = F.length; S < C && !(F[S] instanceof n.Dict); S++); if (S < C) { (0, r.warn)("getOperatorList - ignoring operator: " + T); continue } } }s.addOp(T, F) } if (k) w(x); else { v(); a() } })).catch(e => { if (!(e instanceof r.AbortException)) { if (!this.options.ignoreErrors) throw e; this.handler.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.unknown }); (0, r.warn)(`getOperatorList - ignoring errors during "${t.name}" ` + `task: "${e}".`); v() } }) }, getTextContent({ stream: e, task: t, resources: i, stateManager: s = null, normalizeWhitespace: o = !1, combineTextItems: c = !1, sink: h, seenStyles: u = Object.create(null) }) { i = i || n.Dict.empty; s = s || new I(new F); var d, g = /\s/g, m = { items: [], styles: Object.create(null) }, p = { initialized: !1, str: [], width: 0, height: 0, vertical: !1, lastAdvanceWidth: 0, lastAdvanceHeight: 0, textAdvanceScale: 0, spaceWidth: 0, fakeSpaceMin: 1 / 0, fakeMultiSpaceMin: 1 / 0, fakeMultiSpaceMax: -0, textRunBreakAllowed: !1, transform: null, fontName: null }, b = this, y = this.xref, v = null, w = Object.create(null), k = new E(e, y, s); function S() { if (p.initialized) return p; var e = d.font; if (!(e.loadedName in u)) { u[e.loadedName] = !0; m.styles[e.loadedName] = { fontFamily: e.fallbackName, ascent: e.ascent, descent: e.descent, vertical: !!e.vertical } } p.fontName = e.loadedName; var t = [d.fontSize * d.textHScale, 0, 0, d.fontSize, 0, d.textRise]; if (e.isType3Font && d.fontSize <= 1 && !(0, r.isArrayEqual)(d.fontMatrix, r.FONT_IDENTITY_MATRIX)) { const a = e.bbox[3] - e.bbox[1]; a > 0 && (t[3] *= a * d.fontMatrix[3]) } var a = r.Util.transform(d.ctm, r.Util.transform(d.textMatrix, t)); p.transform = a; if (e.vertical) { p.width = Math.sqrt(a[0] * a[0] + a[1] * a[1]); p.height = 0; p.vertical = !0 } else { p.width = 0; p.height = Math.sqrt(a[2] * a[2] + a[3] * a[3]); p.vertical = !1 } var i = d.textLineMatrix[0], n = d.textLineMatrix[1], s = Math.sqrt(i * i + n * n); i = d.ctm[0]; n = d.ctm[1]; var o = Math.sqrt(i * i + n * n); p.textAdvanceScale = o * s; p.lastAdvanceWidth = 0; p.lastAdvanceHeight = 0; var c = e.spaceWidth / 1e3 * d.fontSize; if (c) { p.spaceWidth = c; p.fakeSpaceMin = .3 * c; p.fakeMultiSpaceMin = 1.5 * c; p.fakeMultiSpaceMax = 4 * c; p.textRunBreakAllowed = !e.isMonospace } else { p.spaceWidth = 0; p.fakeSpaceMin = 1 / 0; p.fakeMultiSpaceMin = 1 / 0; p.fakeMultiSpaceMax = 0; p.textRunBreakAllowed = !1 } p.initialized = !0; return p } function C(e) { for (var t, a = 0, r = e.length; a < r && (t = e.charCodeAt(a)) >= 32 && t <= 127;)a++; return a < r ? e.replace(g, " ") : e } function A(e, t) { return b.loadFont(e, t, i).then((function (e) { d.font = e.font; d.fontMatrix = e.font.fontMatrix || r.FONT_IDENTITY_MATRIX })) } function T(e) { for (var t = d.font, a = S(), r = 0, i = 0, n = t.charsToGlyphs(e), s = 0; s < n.length; s++) { var o = n[s], c = null; c = t.vertical && o.vmetric ? o.vmetric[0] : o.width; var h = o.unicode, u = (0, l.getNormalizedUnicodes)(); void 0 !== u[h] && (h = u[h]); h = (0, l.reverseIfRtl)(h); var f = d.charSpacing; if (o.isSpace) { var g = d.wordSpacing; f += g; g > 0 && O(g, a.str) } var m = 0, p = 0; if (t.vertical) { i += p = c * d.fontMatrix[0] * d.fontSize + f } else { r += m = (c * d.fontMatrix[0] * d.fontSize + f) * d.textHScale } d.translateTextMatrix(m, p); a.str.push(h) } if (t.vertical) { a.lastAdvanceHeight = i; a.height += Math.abs(i) } else { a.lastAdvanceWidth = r; a.width += r } return a } function O(e, t) { if (!(e < p.fakeSpaceMin)) if (e < p.fakeMultiSpaceMin) t.push(" "); else for (var a = Math.round(e / p.spaceWidth); a-- > 0;)t.push(" ") } function P() { if (p.initialized) { p.vertical ? p.height *= p.textAdvanceScale : p.width *= p.textAdvanceScale; m.items.push((t = (e = p).str.join(""), a = (0, f.bidi)(t, -1, e.vertical), { str: o ? C(a.str) : a.str, dir: a.dir, width: e.width, height: e.height, transform: e.transform, fontName: e.fontName })); var e, t, a; p.initialized = !1; p.str.length = 0 } } function B() { const e = m.items.length; if (e > 0) { h.enqueue(m, e); m.items = []; m.styles = Object.create(null) } } var D = new a; return new Promise((function e(a, l) { const f = function (t) { B(); Promise.all([t, h.ready]).then((function () { try { e(a, l) } catch (e) { l(e) } }), l) }; t.ensureNotTerminated(); D.reset(); for (var g, y = {}, C = []; !(g = D.check());) { C.length = 0; y.args = C; if (!k.read(y)) break; d = s.state; var F, E = y.fn; C = y.args; switch (0 | E) { case r.OPS.setFont: var N = C[0].name, M = C[1]; if (d.font && N === d.fontName && M === d.fontSize) break; P(); d.fontName = N; d.fontSize = M; f(A(N, null)); return; case r.OPS.setTextRise: P(); d.textRise = C[0]; break; case r.OPS.setHScale: P(); d.textHScale = C[0] / 100; break; case r.OPS.setLeading: P(); d.leading = C[0]; break; case r.OPS.moveText: var L = !!d.font && 0 === (d.font.vertical ? C[0] : C[1]); F = C[0] - C[1]; if (c && L && p.initialized && F > 0 && F <= p.fakeMultiSpaceMax) { d.translateTextLineMatrix(C[0], C[1]); p.width += C[0] - p.lastAdvanceWidth; p.height += C[1] - p.lastAdvanceHeight; O(C[0] - p.lastAdvanceWidth - (C[1] - p.lastAdvanceHeight), p.str); break } P(); d.translateTextLineMatrix(C[0], C[1]); d.textMatrix = d.textLineMatrix.slice(); break; case r.OPS.setLeadingMoveText: P(); d.leading = -C[1]; d.translateTextLineMatrix(C[0], C[1]); d.textMatrix = d.textLineMatrix.slice(); break; case r.OPS.nextLine: P(); d.carriageReturn(); break; case r.OPS.setTextMatrix: F = d.calcTextLineMatrixAdvance(C[0], C[1], C[2], C[3], C[4], C[5]); if (c && null !== F && p.initialized && F.value > 0 && F.value <= p.fakeMultiSpaceMax) { d.translateTextLineMatrix(F.width, F.height); p.width += F.width - p.lastAdvanceWidth; p.height += F.height - p.lastAdvanceHeight; O(F.width - p.lastAdvanceWidth - (F.height - p.lastAdvanceHeight), p.str); break } P(); d.setTextMatrix(C[0], C[1], C[2], C[3], C[4], C[5]); d.setTextLineMatrix(C[0], C[1], C[2], C[3], C[4], C[5]); break; case r.OPS.setCharSpacing: d.charSpacing = C[0]; break; case r.OPS.setWordSpacing: d.wordSpacing = C[0]; break; case r.OPS.beginText: P(); d.textMatrix = r.IDENTITY_MATRIX.slice(); d.textLineMatrix = r.IDENTITY_MATRIX.slice(); break; case r.OPS.showSpacedText: if (!s.state.font) { b.ensureStateFont(s.state); continue } for (var R, U = C[0], q = 0, j = U.length; q < j; q++)if ("string" == typeof U[q]) T(U[q]); else if ((0, r.isNum)(U[q])) { S(); F = U[q] * d.fontSize / 1e3; var _ = !1; if (d.font.vertical) { R = F; d.translateTextMatrix(0, R); (_ = p.textRunBreakAllowed && F > p.fakeMultiSpaceMax) || (p.height += R) } else { R = (F = -F) * d.textHScale; d.translateTextMatrix(R, 0); (_ = p.textRunBreakAllowed && F > p.fakeMultiSpaceMax) || (p.width += R) } _ ? P() : F > 0 && O(F, p.str) } break; case r.OPS.showText: if (!s.state.font) { b.ensureStateFont(s.state); continue } T(C[0]); break; case r.OPS.nextLineShowText: if (!s.state.font) { b.ensureStateFont(s.state); continue } P(); d.carriageReturn(); T(C[0]); break; case r.OPS.nextLineSetSpacingShowText: if (!s.state.font) { b.ensureStateFont(s.state); continue } P(); d.wordSpacing = C[0]; d.charSpacing = C[1]; d.carriageReturn(); T(C[2]); break; case r.OPS.paintXObject: P(); v || (v = i.get("XObject") || n.Dict.empty); var z = C[0].name; if (z && void 0 !== w[z]) break; f(new Promise((function (e, a) { if (!z) throw new r.FormatError("XObject must be referred to by name."); const l = v.get(z); if (!l) { e(); return } if (!(0, n.isStream)(l)) throw new r.FormatError("XObject should be a stream"); const d = l.dict.get("Subtype"); if (!(0, n.isName)(d)) throw new r.FormatError("XObject should have a Name subtype"); if ("Form" !== d.name) { w[z] = !0; e(); return } const f = s.state.clone(), g = new I(f), m = l.dict.getArray("Matrix"); Array.isArray(m) && 6 === m.length && g.transform(m); B(); const p = { enqueueInvoked: !1, enqueue(e, t) { this.enqueueInvoked = !0; h.enqueue(e, t) }, get desiredSize() { return h.desiredSize }, get ready() { return h.ready } }; b.getTextContent({ stream: l, task: t, resources: l.dict.get("Resources") || i, stateManager: g, normalizeWhitespace: o, combineTextItems: c, sink: p, seenStyles: u }).then((function () { p.enqueueInvoked || (w[z] = !0); e() }), a) })).catch((function (e) { if (!(e instanceof r.AbortException)) { if (!b.options.ignoreErrors) throw e; (0, r.warn)(`getTextContent - ignoring XObject: "${e}".`) } }))); return; case r.OPS.setGState: P(); var H = C[0], G = i.get("ExtGState"); if (!(0, n.isDict)(G) || !(0, n.isName)(H)) break; var W = G.get(H.name); if (!(0, n.isDict)(W)) break; var X = W.get("Font"); if (X) { d.fontName = null; d.fontSize = X[1]; f(A(null, X[0])); return } }if (m.items.length >= h.desiredSize) { g = !0; break } } if (g) f(x); else { P(); B(); a() } })).catch(e => { if (!(e instanceof r.AbortException)) { if (!this.options.ignoreErrors) throw e; (0, r.warn)(`getTextContent - ignoring errors during "${t.name}" ` + `task: "${e}".`); P(); B() } }) }, extractDataStructures: function (e, t, a) { const i = this.xref; let c; var l = e.get("ToUnicode") || t.get("ToUnicode"), h = l ? this.readToUnicode(l) : Promise.resolve(void 0); if (a.composite) { var u = e.get("CIDSystemInfo"); (0, n.isDict)(u) && (a.cidSystemInfo = { registry: (0, r.stringToPDFString)(u.get("Registry")), ordering: (0, r.stringToPDFString)(u.get("Ordering")), supplement: u.get("Supplement") }); var d = e.get("CIDToGIDMap"); (0, n.isStream)(d) && (c = d.getBytes()) } var f, g = [], m = null; if (e.has("Encoding")) { f = e.get("Encoding"); if ((0, n.isDict)(f)) { m = f.get("BaseEncoding"); m = (0, n.isName)(m) ? m.name : null; if (f.has("Differences")) for (var p = f.get("Differences"), b = 0, y = 0, v = p.length; y < v; y++) { var w = i.fetchIfRef(p[y]); if ((0, r.isNum)(w)) b = w; else { if (!(0, n.isName)(w)) throw new r.FormatError(`Invalid entry in 'Differences' array: ${w}`); g[b++] = w.name } } } else { if (!(0, n.isName)(f)) throw new r.FormatError("Encoding is not a Name nor a Dict"); m = f.name } "MacRomanEncoding" !== m && "MacExpertEncoding" !== m && "WinAnsiEncoding" !== m && (m = null) } if (m) a.defaultEncoding = (0, o.getEncoding)(m).slice(); else { var k = !!(a.flags & s.FontFlags.Symbolic), S = !!(a.flags & s.FontFlags.Nonsymbolic); f = o.StandardEncoding; "TrueType" !== a.type || S || (f = o.WinAnsiEncoding); if (k) { f = o.MacRomanEncoding; a.file || (/Symbol/i.test(a.name) ? f = o.SymbolSetEncoding : /Dingbats|Wingdings/i.test(a.name) && (f = o.ZapfDingbatsEncoding)) } a.defaultEncoding = f } a.differences = g; a.baseEncodingName = m; a.hasEncoding = !!m || g.length > 0; a.dict = e; return h.then(e => { a.toUnicode = e; return this.buildToUnicode(a) }).then(e => { a.toUnicode = e; c && (a.cidToGidMap = this.readCidToGidMap(c, e)); return a }) }, _buildSimpleFontToUnicode(e, t = !1) { (0, r.assert)(!e.composite, "Must be a simple font."); const a = [], i = e.defaultEncoding.slice(), n = e.baseEncodingName, c = e.differences; for (const e in c) { const t = c[e]; ".notdef" !== t && (i[e] = t) } const h = (0, p.getGlyphsUnicode)(); for (const r in i) { let s = i[r]; if ("" !== s) if (void 0 !== h[s]) a[r] = String.fromCharCode(h[s]); else { let i = 0; switch (s[0]) { case "G": 3 === s.length && (i = parseInt(s.substring(1), 16)); break; case "g": 5 === s.length && (i = parseInt(s.substring(1), 16)); break; case "C": case "c": if (s.length >= 3 && s.length <= 4) { const a = s.substring(1); if (t) { i = parseInt(a, 16); break } i = +a; if (Number.isNaN(i) && Number.isInteger(parseInt(a, 16))) return this._buildSimpleFontToUnicode(e, !0) } break; default: const a = (0, l.getUnicodeForGlyph)(s, h); -1 !== a && (i = a) }if (i > 0 && Number.isInteger(i)) { if (n && i === +r) { const e = (0, o.getEncoding)(n); if (e && (s = e[r])) { a[r] = String.fromCharCode(h[s]); continue } } a[r] = String.fromCodePoint(i) } } } return new s.ToUnicodeMap(a) }, buildToUnicode(e) { e.hasIncludedToUnicodeMap = !!e.toUnicode && e.toUnicode.length > 0; if (e.hasIncludedToUnicodeMap) { !e.composite && e.hasEncoding && (e.fallbackToUnicode = this._buildSimpleFontToUnicode(e)); return Promise.resolve(e.toUnicode) } if (!e.composite) return Promise.resolve(this._buildSimpleFontToUnicode(e)); if (e.composite && (e.cMap.builtInCMap && !(e.cMap instanceof i.IdentityCMap) || "Adobe" === e.cidSystemInfo.registry && ("GB1" === e.cidSystemInfo.ordering || "CNS1" === e.cidSystemInfo.ordering || "Japan1" === e.cidSystemInfo.ordering || "Korea1" === e.cidSystemInfo.ordering))) { const t = e.cidSystemInfo.registry, a = e.cidSystemInfo.ordering, o = n.Name.get(t + "-" + a + "-UCS2"); return i.CMapFactory.create({ encoding: o, fetchBuiltInCMap: this.fetchBuiltInCMap, useCMap: null }).then((function (t) { const a = e.cMap, i = []; a.forEach((function (e, a) { if (a > 65535) throw new r.FormatError("Max size of CID is 65,535"); const n = t.lookup(a); n && (i[e] = String.fromCharCode((n.charCodeAt(0) << 8) + n.charCodeAt(1))) })); return new s.ToUnicodeMap(i) })) } return Promise.resolve(new s.IdentityToUnicodeMap(e.firstChar, e.lastChar)) }, readToUnicode: function (e) { var t = e; return (0, n.isName)(t) ? i.CMapFactory.create({ encoding: t, fetchBuiltInCMap: this.fetchBuiltInCMap, useCMap: null }).then((function (e) { return e instanceof i.IdentityCMap ? new s.IdentityToUnicodeMap(0, 65535) : new s.ToUnicodeMap(e.getMap()) })) : (0, n.isStream)(t) ? i.CMapFactory.create({ encoding: t, fetchBuiltInCMap: this.fetchBuiltInCMap, useCMap: null }).then((function (e) { if (e instanceof i.IdentityCMap) return new s.IdentityToUnicodeMap(0, 65535); var t = new Array(e.length); e.forEach((function (e, a) { for (var r = [], i = 0; i < a.length; i += 2) { var n = a.charCodeAt(i) << 8 | a.charCodeAt(i + 1); if (55296 == (63488 & n)) { i += 2; var s = a.charCodeAt(i) << 8 | a.charCodeAt(i + 1); r.push(((1023 & n) << 10) + (1023 & s) + 65536) } else r.push(n) } t[e] = String.fromCodePoint.apply(String, r) })); return new s.ToUnicodeMap(t) }), e => { if (e instanceof r.AbortException) return null; if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.font }); (0, r.warn)(`readToUnicode - ignoring ToUnicode data: "${e}".`); return null } throw e }) : Promise.resolve(null) }, readCidToGidMap(e, t) { for (var a = [], r = 0, i = e.length; r < i; r++) { var n = e[r++] << 8 | e[r]; const i = r >> 1; (0 !== n || t.has(i)) && (a[i] = n) } return a }, extractWidths: function (e, t, a) { var r, i, o, c, l, h, u, d, f = this.xref, g = [], m = 0, p = []; if (a.composite) { m = e.has("DW") ? e.get("DW") : 1e3; if (d = e.get("W")) for (i = 0, o = d.length; i < o; i++) { h = f.fetchIfRef(d[i++]); u = f.fetchIfRef(d[i]); if (Array.isArray(u)) for (c = 0, l = u.length; c < l; c++)g[h++] = f.fetchIfRef(u[c]); else { var b = f.fetchIfRef(d[++i]); for (c = h; c <= u; c++)g[c] = b } } if (a.vertical) { var y = e.getArray("DW2") || [880, -1e3]; r = [y[1], .5 * m, y[0]]; if (y = e.get("W2")) for (i = 0, o = y.length; i < o; i++) { h = f.fetchIfRef(y[i++]); u = f.fetchIfRef(y[i]); if (Array.isArray(u)) for (c = 0, l = u.length; c < l; c++)p[h++] = [f.fetchIfRef(u[c++]), f.fetchIfRef(u[c++]), f.fetchIfRef(u[c])]; else { var v = [f.fetchIfRef(y[++i]), f.fetchIfRef(y[++i]), f.fetchIfRef(y[++i])]; for (c = h; c <= u; c++)p[c] = v } } } } else { var w = a.firstChar; if (d = e.get("Widths")) { c = w; for (i = 0, o = d.length; i < o; i++)g[c++] = f.fetchIfRef(d[i]); m = parseFloat(t.get("MissingWidth")) || 0 } else { var k = e.get("BaseFont"); if ((0, n.isName)(k)) { var S = this.getBaseFontMetrics(k.name); g = this.buildCharCodeToWidth(S.widths, a); m = S.defaultWidth } } } var C = !0, x = m; for (var A in g) { var I = g[A]; if (I) if (x) { if (x !== I) { C = !1; break } } else x = I } C && (a.flags |= s.FontFlags.FixedPitch); a.defaultWidth = m; a.widths = g; a.defaultVMetrics = r; a.vmetrics = p }, isSerifFont: function (e) { var t = e.split("-")[0]; return t in (0, h.getSerifFonts)() || -1 !== t.search(/serif/gi) }, getBaseFontMetrics: function (e) { var t = 0, a = [], i = !1, n = (0, h.getStdFontMap)()[e] || e, s = (0, b.getMetrics)(); n in s || (n = this.isSerifFont(e) ? "Times-Roman" : "Helvetica"); var o = s[n]; if ((0, r.isNum)(o)) { t = o; i = !0 } else a = o(); return { defaultWidth: t, monospace: i, widths: a } }, buildCharCodeToWidth: function (e, t) { for (var a = Object.create(null), r = t.differences, i = t.defaultEncoding, n = 0; n < 256; n++)n in r && e[r[n]] ? a[n] = e[r[n]] : n in i && e[i[n]] && (a[n] = e[i[n]]); return a }, preEvaluateFont: function (e) { var t = e, a = e.get("Subtype"); if (!(0, n.isName)(a)) throw new r.FormatError("invalid font Subtype"); var i, s = !1; if ("Type0" === a.name) { var o = e.get("DescendantFonts"); if (!o) throw new r.FormatError("Descendant fonts are not specified"); a = (e = Array.isArray(o) ? this.xref.fetchIfRef(o[0]) : o).get("Subtype"); if (!(0, n.isName)(a)) throw new r.FormatError("invalid font Subtype"); s = !0 } var c = e.get("FontDescriptor"); if (c) { var l = new w.MurmurHash3_64, h = t.getRaw("Encoding"); if ((0, n.isName)(h)) l.update(h.name); else if ((0, n.isRef)(h)) l.update(h.toString()); else if ((0, n.isDict)(h)) for (var u = h.getKeys(), d = 0, f = u.length; d < f; d++) { var g = h.getRaw(u[d]); if ((0, n.isName)(g)) l.update(g.name); else if ((0, n.isRef)(g)) l.update(g.toString()); else if (Array.isArray(g)) { for (var m = g.length, p = new Array(m), b = 0; b < m; b++) { var y = g[b]; (0, n.isName)(y) ? p[b] = y.name : ((0, r.isNum)(y) || (0, n.isRef)(y)) && (p[b] = y.toString()) } l.update(p.join()) } } const a = e.get("FirstChar") || 0, o = e.get("LastChar") || (s ? 65535 : 255); l.update(`${a}-${o}`); var v = e.get("ToUnicode") || t.get("ToUnicode"); if ((0, n.isStream)(v)) { var k = v.str || v; i = k.buffer ? new Uint8Array(k.buffer.buffer, 0, k.bufferLength) : new Uint8Array(k.bytes.buffer, k.start, k.end - k.start); l.update(i) } else (0, n.isName)(v) && l.update(v.name); var S = e.get("Widths") || t.get("Widths"); if (S) { i = new Uint8Array(new Uint32Array(S).buffer); l.update(i) } } return { descriptor: c, dict: e, baseDict: t, composite: s, type: a.name, hash: l ? l.hexdigest() : "" } }, translateFont: function (e) { var t, a = e.baseDict, o = e.dict, c = e.composite, l = e.descriptor, u = e.type, d = c ? 65535 : 255; const f = o.get("FirstChar") || 0, g = o.get("LastChar") || d; if (!l) { if ("Type3" !== u) { var m = o.get("BaseFont"); if (!(0, n.isName)(m)) throw new r.FormatError("Base font is not specified"); m = m.name.replace(/[,_]/g, "-"); var p = this.getBaseFontMetrics(m), b = m.split("-")[0], y = (this.isSerifFont(b) ? s.FontFlags.Serif : 0) | (p.monospace ? s.FontFlags.FixedPitch : 0) | ((0, h.getSymbolsFonts)()[b] ? s.FontFlags.Symbolic : s.FontFlags.Nonsymbolic); t = { type: u, name: m, widths: p.widths, defaultWidth: p.defaultWidth, flags: y, firstChar: f, lastChar: g }; const e = o.get("Widths"); return this.extractDataStructures(o, o, t).then(t => { if (e) { const a = []; let r = f; for (let t = 0, i = e.length; t < i; t++)a[r++] = this.xref.fetchIfRef(e[t]); t.widths = a } else t.widths = this.buildCharCodeToWidth(p.widths, t); return new s.Font(m, null, t) }) } (l = new n.Dict(null)).set("FontName", n.Name.get(u)); l.set("FontBBox", o.getArray("FontBBox") || [0, 0, 0, 0]) } var v = l.get("FontName"), w = o.get("BaseFont"); (0, r.isString)(v) && (v = n.Name.get(v)); (0, r.isString)(w) && (w = n.Name.get(w)); if ("Type3" !== u) { var k = v && v.name, S = w && w.name; if (k !== S) { (0, r.info)(`The FontDescriptor's FontName is "${k}" but ` + `should be the same as the Font's BaseFont "${S}".`); k && S && S.startsWith(k) && (v = w) } } v = v || w; if (!(0, n.isName)(v)) throw new r.FormatError("invalid font name"); var C, x = l.get("FontFile", "FontFile2", "FontFile3"); if (x && x.dict) { var A = x.dict.get("Subtype"); A && (A = A.name); var I = x.dict.get("Length1"), F = x.dict.get("Length2"), T = x.dict.get("Length3") } t = { type: u, name: v.name, subtype: A, file: x, length1: I, length2: F, length3: T, loadedName: a.loadedName, composite: c, wideChars: c, fixedPitch: !1, fontMatrix: o.getArray("FontMatrix") || r.FONT_IDENTITY_MATRIX, firstChar: f || 0, lastChar: g || d, bbox: l.getArray("FontBBox"), ascent: l.get("Ascent"), descent: l.get("Descent"), xHeight: l.get("XHeight"), capHeight: l.get("CapHeight"), flags: l.get("Flags"), italicAngle: l.get("ItalicAngle"), isType3Font: !1 }; if (c) { var E = a.get("Encoding"); (0, n.isName)(E) && (t.cidEncoding = E.name); C = i.CMapFactory.create({ encoding: E, fetchBuiltInCMap: this.fetchBuiltInCMap, useCMap: null }).then((function (e) { t.cMap = e; t.vertical = t.cMap.vertical })) } else C = Promise.resolve(void 0); return C.then(() => this.extractDataStructures(o, a, t)).then(e => { this.extractWidths(o, l, e); "Type3" === u && (e.isType3Font = !0); return new s.Font(v.name, x, e) }) } }; t.buildFontPaths = function (e, t, a) { function r(t) { e.renderer.hasBuiltPath(t) || a.send("commonobj", [`${e.loadedName}_path_${t}`, "FontPath", e.renderer.getPathJs(t)]) } for (const e of t) { r(e.fontChar); const t = e.accent; t && t.fontChar && r(t.fontChar) } }; t.getFallbackFontDict = function () { if (this._fallbackFontDict) return this._fallbackFontDict; const e = new n.Dict; e.set("BaseFont", n.Name.get("PDFJS-FallbackFont")); e.set("Type", n.Name.get("FallbackType")); e.set("Subtype", n.Name.get("FallbackType")); e.set("Encoding", n.Name.get("WinAnsiEncoding")); return this._fallbackFontDict = e }; return t }(); t.PartialEvaluator = x; var A = function () { function e(e, t, a) { this.loadedName = e; this.font = t; this.dict = a; this.type3Loaded = null; this.sent = !1 } e.prototype = { send(e) { if (!this.sent) { this.sent = !0; e.send("commonobj", [this.loadedName, "Font", this.font.exportData()]) } }, fallback(e) { if (!this.font.data) return; this.font.disableFontFace = !0; const t = this.font.glyphCacheValues; x.buildFontPaths(this.font, t, e) }, loadType3Data(e, t, a, i) { if (!this.font.isType3Font) throw new Error("Must be a Type3 font."); if (this.type3Loaded) return this.type3Loaded; var n = Object.create(e.options); n.ignoreErrors = !1; n.nativeImageDecoderSupport = r.NativeImageDecoding.NONE; var s = e.clone(n); s.parsingType3Font = !0; for (var o = this.font, c = Promise.resolve(), l = this.dict.get("CharProcs"), h = this.dict.get("Resources") || t, u = l.getKeys(), d = Object.create(null), f = 0, g = u.length; f < g; ++f) { const e = u[f]; c = c.then((function () { var t = l.get(e), n = new S.OperatorList; return s.getOperatorList({ stream: t, task: i, resources: h, operatorList: n }).then((function () { d[e] = n.getIR(); a.addDependencies(n.dependencies) })).catch((function (t) { (0, r.warn)(`Type3 font resource "${e}" is not available.`); var a = new S.OperatorList; d[e] = a.getIR() })) })) } this.type3Loaded = c.then((function () { o.charProcOperatorList = d })); return this.type3Loaded } }; return e }(), I = function () { function e(e) { this.state = e; this.stateStack = [] } e.prototype = { save() { var e = this.state; this.stateStack.push(this.state); this.state = e.clone() }, restore() { var e = this.stateStack.pop(); e && (this.state = e) }, transform(e) { this.state.ctm = r.Util.transform(this.state.ctm, e) } }; return e }(), F = function () { function e() { this.ctm = new Float32Array(r.IDENTITY_MATRIX); this.fontName = null; this.fontSize = 0; this.font = null; this.fontMatrix = r.FONT_IDENTITY_MATRIX; this.textMatrix = r.IDENTITY_MATRIX.slice(); this.textLineMatrix = r.IDENTITY_MATRIX.slice(); this.charSpacing = 0; this.wordSpacing = 0; this.leading = 0; this.textHScale = 1; this.textRise = 0 } e.prototype = { setTextMatrix: function (e, t, a, r, i, n) { var s = this.textMatrix; s[0] = e; s[1] = t; s[2] = a; s[3] = r; s[4] = i; s[5] = n }, setTextLineMatrix: function (e, t, a, r, i, n) { var s = this.textLineMatrix; s[0] = e; s[1] = t; s[2] = a; s[3] = r; s[4] = i; s[5] = n }, translateTextMatrix: function (e, t) { var a = this.textMatrix; a[4] = a[0] * e + a[2] * t + a[4]; a[5] = a[1] * e + a[3] * t + a[5] }, translateTextLineMatrix: function (e, t) { var a = this.textLineMatrix; a[4] = a[0] * e + a[2] * t + a[4]; a[5] = a[1] * e + a[3] * t + a[5] }, calcTextLineMatrixAdvance: function (e, t, a, r, i, n) { var s = this.font; if (!s) return null; var o = this.textLineMatrix; if (e !== o[0] || t !== o[1] || a !== o[2] || r !== o[3]) return null; var c = i - o[4], l = n - o[5]; if (s.vertical && 0 !== c || !s.vertical && 0 !== l) return null; var h, u, d = e * r - t * a; if (s.vertical) { h = -l * a / d; u = l * e / d } else { h = c * r / d; u = -c * t / d } return { width: h, height: u, value: s.vertical ? u : h } }, calcRenderMatrix: function (e) { var t = [this.fontSize * this.textHScale, 0, 0, this.fontSize, 0, this.textRise]; return r.Util.transform(e, r.Util.transform(this.textMatrix, t)) }, carriageReturn: function () { this.translateTextLineMatrix(0, -this.leading); this.textMatrix = this.textLineMatrix.slice() }, clone: function () { var e = Object.create(this); e.textMatrix = this.textMatrix.slice(); e.textLineMatrix = this.textLineMatrix.slice(); e.fontMatrix = this.fontMatrix.slice(); return e } }; return e }(), T = function () { function e() { this.ctm = new Float32Array(r.IDENTITY_MATRIX); this.font = null; this.textRenderingMode = r.TextRenderingMode.FILL; this.fillColorSpace = g.ColorSpace.singletons.gray; this.strokeColorSpace = g.ColorSpace.singletons.gray } e.prototype = { clone: function () { return Object.create(this) } }; return e }(), E = function () { var e = (0, c.getLookupTableFactory)((function (e) { e.w = { id: r.OPS.setLineWidth, numArgs: 1, variableArgs: !1 }; e.J = { id: r.OPS.setLineCap, numArgs: 1, variableArgs: !1 }; e.j = { id: r.OPS.setLineJoin, numArgs: 1, variableArgs: !1 }; e.M = { id: r.OPS.setMiterLimit, numArgs: 1, variableArgs: !1 }; e.d = { id: r.OPS.setDash, numArgs: 2, variableArgs: !1 }; e.ri = { id: r.OPS.setRenderingIntent, numArgs: 1, variableArgs: !1 }; e.i = { id: r.OPS.setFlatness, numArgs: 1, variableArgs: !1 }; e.gs = { id: r.OPS.setGState, numArgs: 1, variableArgs: !1 }; e.q = { id: r.OPS.save, numArgs: 0, variableArgs: !1 }; e.Q = { id: r.OPS.restore, numArgs: 0, variableArgs: !1 }; e.cm = { id: r.OPS.transform, numArgs: 6, variableArgs: !1 }; e.m = { id: r.OPS.moveTo, numArgs: 2, variableArgs: !1 }; e.l = { id: r.OPS.lineTo, numArgs: 2, variableArgs: !1 }; e.c = { id: r.OPS.curveTo, numArgs: 6, variableArgs: !1 }; e.v = { id: r.OPS.curveTo2, numArgs: 4, variableArgs: !1 }; e.y = { id: r.OPS.curveTo3, numArgs: 4, variableArgs: !1 }; e.h = { id: r.OPS.closePath, numArgs: 0, variableArgs: !1 }; e.re = { id: r.OPS.rectangle, numArgs: 4, variableArgs: !1 }; e.S = { id: r.OPS.stroke, numArgs: 0, variableArgs: !1 }; e.s = { id: r.OPS.closeStroke, numArgs: 0, variableArgs: !1 }; e.f = { id: r.OPS.fill, numArgs: 0, variableArgs: !1 }; e.F = { id: r.OPS.fill, numArgs: 0, variableArgs: !1 }; e["f*"] = { id: r.OPS.eoFill, numArgs: 0, variableArgs: !1 }; e.B = { id: r.OPS.fillStroke, numArgs: 0, variableArgs: !1 }; e["B*"] = { id: r.OPS.eoFillStroke, numArgs: 0, variableArgs: !1 }; e.b = { id: r.OPS.closeFillStroke, numArgs: 0, variableArgs: !1 }; e["b*"] = { id: r.OPS.closeEOFillStroke, numArgs: 0, variableArgs: !1 }; e.n = { id: r.OPS.endPath, numArgs: 0, variableArgs: !1 }; e.W = { id: r.OPS.clip, numArgs: 0, variableArgs: !1 }; e["W*"] = { id: r.OPS.eoClip, numArgs: 0, variableArgs: !1 }; e.BT = { id: r.OPS.beginText, numArgs: 0, variableArgs: !1 }; e.ET = { id: r.OPS.endText, numArgs: 0, variableArgs: !1 }; e.Tc = { id: r.OPS.setCharSpacing, numArgs: 1, variableArgs: !1 }; e.Tw = { id: r.OPS.setWordSpacing, numArgs: 1, variableArgs: !1 }; e.Tz = { id: r.OPS.setHScale, numArgs: 1, variableArgs: !1 }; e.TL = { id: r.OPS.setLeading, numArgs: 1, variableArgs: !1 }; e.Tf = { id: r.OPS.setFont, numArgs: 2, variableArgs: !1 }; e.Tr = { id: r.OPS.setTextRenderingMode, numArgs: 1, variableArgs: !1 }; e.Ts = { id: r.OPS.setTextRise, numArgs: 1, variableArgs: !1 }; e.Td = { id: r.OPS.moveText, numArgs: 2, variableArgs: !1 }; e.TD = { id: r.OPS.setLeadingMoveText, numArgs: 2, variableArgs: !1 }; e.Tm = { id: r.OPS.setTextMatrix, numArgs: 6, variableArgs: !1 }; e["T*"] = { id: r.OPS.nextLine, numArgs: 0, variableArgs: !1 }; e.Tj = { id: r.OPS.showText, numArgs: 1, variableArgs: !1 }; e.TJ = { id: r.OPS.showSpacedText, numArgs: 1, variableArgs: !1 }; e["'"] = { id: r.OPS.nextLineShowText, numArgs: 1, variableArgs: !1 }; e['"'] = { id: r.OPS.nextLineSetSpacingShowText, numArgs: 3, variableArgs: !1 }; e.d0 = { id: r.OPS.setCharWidth, numArgs: 2, variableArgs: !1 }; e.d1 = { id: r.OPS.setCharWidthAndBounds, numArgs: 6, variableArgs: !1 }; e.CS = { id: r.OPS.setStrokeColorSpace, numArgs: 1, variableArgs: !1 }; e.cs = { id: r.OPS.setFillColorSpace, numArgs: 1, variableArgs: !1 }; e.SC = { id: r.OPS.setStrokeColor, numArgs: 4, variableArgs: !0 }; e.SCN = { id: r.OPS.setStrokeColorN, numArgs: 33, variableArgs: !0 }; e.sc = { id: r.OPS.setFillColor, numArgs: 4, variableArgs: !0 }; e.scn = { id: r.OPS.setFillColorN, numArgs: 33, variableArgs: !0 }; e.G = { id: r.OPS.setStrokeGray, numArgs: 1, variableArgs: !1 }; e.g = { id: r.OPS.setFillGray, numArgs: 1, variableArgs: !1 }; e.RG = { id: r.OPS.setStrokeRGBColor, numArgs: 3, variableArgs: !1 }; e.rg = { id: r.OPS.setFillRGBColor, numArgs: 3, variableArgs: !1 }; e.K = { id: r.OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: !1 }; e.k = { id: r.OPS.setFillCMYKColor, numArgs: 4, variableArgs: !1 }; e.sh = { id: r.OPS.shadingFill, numArgs: 1, variableArgs: !1 }; e.BI = { id: r.OPS.beginInlineImage, numArgs: 0, variableArgs: !1 }; e.ID = { id: r.OPS.beginImageData, numArgs: 0, variableArgs: !1 }; e.EI = { id: r.OPS.endInlineImage, numArgs: 1, variableArgs: !1 }; e.Do = { id: r.OPS.paintXObject, numArgs: 1, variableArgs: !1 }; e.MP = { id: r.OPS.markPoint, numArgs: 1, variableArgs: !1 }; e.DP = { id: r.OPS.markPointProps, numArgs: 2, variableArgs: !1 }; e.BMC = { id: r.OPS.beginMarkedContent, numArgs: 1, variableArgs: !1 }; e.BDC = { id: r.OPS.beginMarkedContentProps, numArgs: 2, variableArgs: !1 }; e.EMC = { id: r.OPS.endMarkedContent, numArgs: 0, variableArgs: !1 }; e.BX = { id: r.OPS.beginCompat, numArgs: 0, variableArgs: !1 }; e.EX = { id: r.OPS.endCompat, numArgs: 0, variableArgs: !1 }; e.BM = null; e.BD = null; e.true = null; e.fa = null; e.fal = null; e.fals = null; e.false = null; e.nu = null; e.nul = null; e.null = null })); function t(t, a, r) { this.opMap = e(); this.parser = new d.Parser({ lexer: new d.Lexer(t, this.opMap), xref: a }); this.stateManager = r; this.nonProcessedArgs = []; this._numInvalidPathOPS = 0 } t.prototype = { get savedStatesDepth() { return this.stateManager.stateStack.length }, read: function (e) { for (var t = e.args; ;) { var a = this.parser.getObj(); if (a instanceof n.Cmd) { var i = a.cmd, s = this.opMap[i]; if (!s) { (0, r.warn)(`Unknown command "${i}".`); continue } var o = s.id, c = s.numArgs, l = null !== t ? t.length : 0; if (s.variableArgs) l > c && (0, r.info)(`Command ${i}: expected [0, ${c}] args, ` + `but received ${l} args.`); else { if (l !== c) { for (var h = this.nonProcessedArgs; l > c;) { h.push(t.shift()); l-- } for (; l < c && 0 !== h.length;) { null === t && (t = []); t.unshift(h.pop()); l++ } } if (l < c) { const e = `command ${i}: expected ${c} args, ` + `but received ${l} args.`; if (o >= r.OPS.moveTo && o <= r.OPS.endPath && ++this._numInvalidPathOPS > 20) throw new r.FormatError(`Invalid ${e}`); (0, r.warn)(`Skipping ${e}`); null !== t && (t.length = 0); continue } } this.preprocessCommand(o, t); e.fn = o; e.args = t; return !0 } if (a === n.EOF) return !1; if (null !== a) { null === t && (t = []); t.push(a); if (t.length > 33) throw new r.FormatError("Too many arguments") } } }, preprocessCommand: function (e, t) { switch (0 | e) { case r.OPS.save: this.stateManager.save(); break; case r.OPS.restore: this.stateManager.restore(); break; case r.OPS.transform: this.stateManager.transform(t) } } }; return t }() }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.CMapFactory = t.IdentityCMap = t.CMap = void 0; var r = a(2), i = a(4), n = a(10), s = a(7), o = a(11), c = ["Adobe-GB1-UCS2", "Adobe-CNS1-UCS2", "Adobe-Japan1-UCS2", "Adobe-Korea1-UCS2", "78-EUC-H", "78-EUC-V", "78-H", "78-RKSJ-H", "78-RKSJ-V", "78-V", "78ms-RKSJ-H", "78ms-RKSJ-V", "83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V", "90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-RKSJ-H", "Add-RKSJ-V", "Add-V", "Adobe-CNS1-0", "Adobe-CNS1-1", "Adobe-CNS1-2", "Adobe-CNS1-3", "Adobe-CNS1-4", "Adobe-CNS1-5", "Adobe-CNS1-6", "Adobe-GB1-0", "Adobe-GB1-1", "Adobe-GB1-2", "Adobe-GB1-3", "Adobe-GB1-4", "Adobe-GB1-5", "Adobe-Japan1-0", "Adobe-Japan1-1", "Adobe-Japan1-2", "Adobe-Japan1-3", "Adobe-Japan1-4", "Adobe-Japan1-5", "Adobe-Japan1-6", "Adobe-Korea1-0", "Adobe-Korea1-1", "Adobe-Korea1-2", "B5-H", "B5-V", "B5pc-H", "B5pc-V", "CNS-EUC-H", "CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "ETHK-B5-H", "ETHK-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "EUC-H", "EUC-V", "Ext-H", "Ext-RKSJ-H", "Ext-RKSJ-V", "Ext-V", "GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBK-EUC-H", "GBK-EUC-V", "GBK2K-H", "GBK2K-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBT-EUC-H", "GBT-EUC-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V", "GBpc-EUC-H", "GBpc-EUC-V", "H", "HKdla-B5-H", "HKdla-B5-V", "HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H", "HKm471-B5-V", "HKscs-B5-H", "HKscs-B5-V", "Hankaku", "Hiragana", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-Johab-H", "KSC-Johab-V", "KSC-V", "KSCms-UHC-H", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCms-UHC-V", "KSCpc-EUC-H", "KSCpc-EUC-V", "Katakana", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "Roman", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "UniCNS-UTF8-H", "UniCNS-UTF8-V", "UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H", "UniGB-UTF32-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniJIS-UCS2-H", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UCS2-V", "UniJIS-UTF16-H", "UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS2004-UTF16-H", "UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJISPro-UCS2-HW-V", "UniJISPro-UCS2-V", "UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V", "UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H", "UniKS-UTF32-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "V", "WP-Symbol"]; class l { constructor(e = !1) { this.codespaceRanges = [[], [], [], []]; this.numCodespaceRanges = 0; this._map = []; this.name = ""; this.vertical = !1; this.useCMap = null; this.builtInCMap = e } addCodespaceRange(e, t, a) { this.codespaceRanges[e - 1].push(t, a); this.numCodespaceRanges++ } mapCidRange(e, t, a) { for (; e <= t;)this._map[e++] = a++ } mapBfRange(e, t, a) { for (var r = a.length - 1; e <= t;) { this._map[e++] = a; a = a.substring(0, r) + String.fromCharCode(a.charCodeAt(r) + 1) } } mapBfRangeToArray(e, t, a) { const r = a.length; let i = 0; for (; e <= t && i < r;) { this._map[e] = a[i++]; ++e } } mapOne(e, t) { this._map[e] = t } lookup(e) { return this._map[e] } contains(e) { return void 0 !== this._map[e] } forEach(e) { const t = this._map, a = t.length; if (a <= 65536) for (let r = 0; r < a; r++)void 0 !== t[r] && e(r, t[r]); else for (const a in t) e(a, t[a]) } charCodeOf(e) { const t = this._map; if (t.length <= 65536) return t.indexOf(e); for (const a in t) if (t[a] === e) return 0 | a; return -1 } getMap() { return this._map } readCharCode(e, t, a) { let r = 0; const i = this.codespaceRanges; for (let n = 0, s = i.length; n < s; n++) { r = (r << 8 | e.charCodeAt(t + n)) >>> 0; const s = i[n]; for (let e = 0, t = s.length; e < t;) { const t = s[e++], i = s[e++]; if (r >= t && r <= i) { a.charcode = r; a.length = n + 1; return } } } a.charcode = 0; a.length = 1 } get length() { return this._map.length } get isIdentityCMap() { if ("Identity-H" !== this.name && "Identity-V" !== this.name) return !1; if (65536 !== this._map.length) return !1; for (let e = 0; e < 65536; e++)if (this._map[e] !== e) return !1; return !0 } } t.CMap = l; class h extends l { constructor(e, t) { super(); this.vertical = e; this.addCodespaceRange(t, 0, 65535) } mapCidRange(e, t, a) { (0, r.unreachable)("should not call mapCidRange") } mapBfRange(e, t, a) { (0, r.unreachable)("should not call mapBfRange") } mapBfRangeToArray(e, t, a) { (0, r.unreachable)("should not call mapBfRangeToArray") } mapOne(e, t) { (0, r.unreachable)("should not call mapCidOne") } lookup(e) { return Number.isInteger(e) && e <= 65535 ? e : void 0 } contains(e) { return Number.isInteger(e) && e <= 65535 } forEach(e) { for (let t = 0; t <= 65535; t++)e(t, t) } charCodeOf(e) { return Number.isInteger(e) && e <= 65535 ? e : -1 } getMap() { const e = new Array(65536); for (let t = 0; t <= 65535; t++)e[t] = t; return e } get length() { return 65536 } get isIdentityCMap() { (0, r.unreachable)("should not access .isIdentityCMap") } } t.IdentityCMap = h; var u = function () { function e(e, t) { for (var a = 0, r = 0; r <= t; r++)a = a << 8 | e[r]; return a >>> 0 } function t(e, t) { return 1 === t ? String.fromCharCode(e[0], e[1]) : 3 === t ? String.fromCharCode(e[0], e[1], e[2], e[3]) : String.fromCharCode.apply(null, e.subarray(0, t + 1)) } function a(e, t, a) { for (var r = 0, i = a; i >= 0; i--) { r += e[i] + t[i]; e[i] = 255 & r; r >>= 8 } } function i(e, t) { for (var a = 1, r = t; r >= 0 && a > 0; r--) { a += e[r]; e[r] = 255 & a; a >>= 8 } } function n(e) { this.buffer = e; this.pos = 0; this.end = e.length; this.tmpBuf = new Uint8Array(19) } n.prototype = { readByte() { return this.pos >= this.end ? -1 : this.buffer[this.pos++] }, readNumber() { var e, t = 0; do { var a = this.readByte(); if (a < 0) throw new r.FormatError("unexpected EOF in bcmap"); e = !(128 & a); t = t << 7 | 127 & a } while (!e); return t }, readSigned() { var e = this.readNumber(); return 1 & e ? ~(e >>> 1) : e >>> 1 }, readHex(e, t) { e.set(this.buffer.subarray(this.pos, this.pos + t + 1)); this.pos += t + 1 }, readHexNumber(e, t) { var a, i = this.tmpBuf, n = 0; do { var s = this.readByte(); if (s < 0) throw new r.FormatError("unexpected EOF in bcmap"); a = !(128 & s); i[n++] = 127 & s } while (!a); for (var o = t, c = 0, l = 0; o >= 0;) { for (; l < 8 && i.length > 0;) { c = i[--n] << l | c; l += 7 } e[o] = 255 & c; o--; c >>= 8; l -= 8 } }, readHexSigned(e, t) { this.readHexNumber(e, t); for (var a = 1 & e[t] ? 255 : 0, r = 0, i = 0; i <= t; i++) { r = (1 & r) << 8 | e[i]; e[i] = r >> 1 ^ a } }, readString() { for (var e = this.readNumber(), t = "", a = 0; a < e; a++)t += String.fromCharCode(this.readNumber()); return t } }; function s() { } s.prototype = { process: function (r, s, o) { return new Promise((function (c, l) { var h = new n(r), u = h.readByte(); s.vertical = !!(1 & u); for (var d, f, g = null, m = new Uint8Array(16), p = new Uint8Array(16), b = new Uint8Array(16), y = new Uint8Array(16), v = new Uint8Array(16); (f = h.readByte()) >= 0;) { var w = f >> 5; if (7 !== w) { var k = !!(16 & f), S = 15 & f; if (S + 1 > 16) throw new Error("processBinaryCMap: Invalid dataSize."); var C, x = h.readNumber(); switch (w) { case 0: h.readHex(m, S); h.readHexNumber(p, S); a(p, m, S); s.addCodespaceRange(S + 1, e(m, S), e(p, S)); for (C = 1; C < x; C++) { i(p, S); h.readHexNumber(m, S); a(m, p, S); h.readHexNumber(p, S); a(p, m, S); s.addCodespaceRange(S + 1, e(m, S), e(p, S)) } break; case 1: h.readHex(m, S); h.readHexNumber(p, S); a(p, m, S); h.readNumber(); for (C = 1; C < x; C++) { i(p, S); h.readHexNumber(m, S); a(m, p, S); h.readHexNumber(p, S); a(p, m, S); h.readNumber() } break; case 2: h.readHex(b, S); d = h.readNumber(); s.mapOne(e(b, S), d); for (C = 1; C < x; C++) { i(b, S); if (!k) { h.readHexNumber(v, S); a(b, v, S) } d = h.readSigned() + (d + 1); s.mapOne(e(b, S), d) } break; case 3: h.readHex(m, S); h.readHexNumber(p, S); a(p, m, S); d = h.readNumber(); s.mapCidRange(e(m, S), e(p, S), d); for (C = 1; C < x; C++) { i(p, S); if (k) m.set(p); else { h.readHexNumber(m, S); a(m, p, S) } h.readHexNumber(p, S); a(p, m, S); d = h.readNumber(); s.mapCidRange(e(m, S), e(p, S), d) } break; case 4: h.readHex(b, 1); h.readHex(y, S); s.mapOne(e(b, 1), t(y, S)); for (C = 1; C < x; C++) { i(b, 1); if (!k) { h.readHexNumber(v, 1); a(b, v, 1) } i(y, S); h.readHexSigned(v, S); a(y, v, S); s.mapOne(e(b, 1), t(y, S)) } break; case 5: h.readHex(m, 1); h.readHexNumber(p, 1); a(p, m, 1); h.readHex(y, S); s.mapBfRange(e(m, 1), e(p, 1), t(y, S)); for (C = 1; C < x; C++) { i(p, 1); if (k) m.set(p); else { h.readHexNumber(m, 1); a(m, p, 1) } h.readHexNumber(p, 1); a(p, m, 1); h.readHex(y, S); s.mapBfRange(e(m, 1), e(p, 1), t(y, S)) } break; default: l(new Error("processBinaryCMap: Unknown type: " + w)); return } } else switch (31 & f) { case 0: h.readString(); break; case 1: g = h.readString() } } c(g ? o(g) : s) })) } }; return s }(), d = function () { function e(e) { for (var t = 0, a = 0; a < e.length; a++)t = t << 8 | e.charCodeAt(a); return t >>> 0 } function t(e) { if (!(0, r.isString)(e)) throw new r.FormatError("Malformed CMap: expected string.") } function a(e) { if (!Number.isInteger(e)) throw new r.FormatError("Malformed CMap: expected int.") } function d(a, r) { for (; ;) { var n = r.getObj(); if ((0, i.isEOF)(n)) break; if ((0, i.isCmd)(n, "endbfchar")) return; t(n); var s = e(n); t(n = r.getObj()); var o = n; a.mapOne(s, o) } } function f(a, n) { for (; ;) { var s = n.getObj(); if ((0, i.isEOF)(s)) break; if ((0, i.isCmd)(s, "endbfrange")) return; t(s); var o = e(s); t(s = n.getObj()); var c = e(s); s = n.getObj(); if (Number.isInteger(s) || (0, r.isString)(s)) { var l = Number.isInteger(s) ? String.fromCharCode(s) : s; a.mapBfRange(o, c, l) } else { if (!(0, i.isCmd)(s, "[")) break; s = n.getObj(); for (var h = []; !(0, i.isCmd)(s, "]") && !(0, i.isEOF)(s);) { h.push(s); s = n.getObj() } a.mapBfRangeToArray(o, c, h) } } throw new r.FormatError("Invalid bf range.") } function g(r, n) { for (; ;) { var s = n.getObj(); if ((0, i.isEOF)(s)) break; if ((0, i.isCmd)(s, "endcidchar")) return; t(s); var o = e(s); a(s = n.getObj()); var c = s; r.mapOne(o, c) } } function m(r, n) { for (; ;) { var s = n.getObj(); if ((0, i.isEOF)(s)) break; if ((0, i.isCmd)(s, "endcidrange")) return; t(s); var o = e(s); t(s = n.getObj()); var c = e(s); a(s = n.getObj()); var l = s; r.mapCidRange(o, c, l) } } function p(t, a) { for (; ;) { var n = a.getObj(); if ((0, i.isEOF)(n)) break; if ((0, i.isCmd)(n, "endcodespacerange")) return; if (!(0, r.isString)(n)) break; var s = e(n); n = a.getObj(); if (!(0, r.isString)(n)) break; var o = e(n); t.addCodespaceRange(n.length, s, o) } throw new r.FormatError("Invalid codespace range.") } function b(e, t) { var a = t.getObj(); Number.isInteger(a) && (e.vertical = !!a) } function y(e, t) { var a = t.getObj(); (0, i.isName)(a) && (0, r.isString)(a.name) && (e.name = a.name) } function v(e, t, a, n) { var o, c; e: for (; ;)try { var l = t.getObj(); if ((0, i.isEOF)(l)) break; if ((0, i.isName)(l)) { "WMode" === l.name ? b(e, t) : "CMapName" === l.name && y(e, t); o = l } else if ((0, i.isCmd)(l)) switch (l.cmd) { case "endcmap": break e; case "usecmap": (0, i.isName)(o) && (c = o.name); break; case "begincodespacerange": p(e, t); break; case "beginbfchar": d(e, t); break; case "begincidchar": g(e, t); break; case "beginbfrange": f(e, t); break; case "begincidrange": m(e, t) } } catch (e) { if (e instanceof s.MissingDataException) throw e; (0, r.warn)("Invalid cMap data: " + e); continue } !n && c && (n = c); return n ? w(e, a, n) : Promise.resolve(e) } function w(e, t, a) { return k(a, t).then((function (t) { e.useCMap = t; if (0 === e.numCodespaceRanges) { for (var a = e.useCMap.codespaceRanges, r = 0; r < a.length; r++)e.codespaceRanges[r] = a[r].slice(); e.numCodespaceRanges = e.useCMap.numCodespaceRanges } e.useCMap.forEach((function (t, a) { e.contains(t) || e.mapOne(t, e.useCMap.lookup(t)) })); return e })) } function k(e, t) { return "Identity-H" === e ? Promise.resolve(new h(!1, 2)) : "Identity-V" === e ? Promise.resolve(new h(!0, 2)) : c.includes(e) ? t ? t(e).then((function (e) { var a = e.cMapData, i = e.compressionType, s = new l(!0); if (i === r.CMapCompressionType.BINARY) return (new u).process(a, s, (function (e) { return w(s, t, e) })); if (i === r.CMapCompressionType.NONE) { var c = new n.Lexer(new o.Stream(a)); return v(s, c, t, null) } return Promise.reject(new Error("TODO: Only BINARY/NONE CMap compression is currently supported.")) })) : Promise.reject(new Error("Built-in CMap parameters are not provided.")) : Promise.reject(new Error("Unknown CMap name: " + e)) } return { async create(e) { var t = e.encoding, a = e.fetchBuiltInCMap, r = e.useCMap; if ((0, i.isName)(t)) return k(t.name, a); if ((0, i.isStream)(t)) { return v(new l, new n.Lexer(t), a, r).then((function (e) { return e.isIdentityCMap ? k(e.name, a) : e })) } throw new Error("Encoding required.") } } }(); t.CMapFactory = d }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.getFontType = y; t.IdentityToUnicodeMap = t.ToUnicodeMap = t.FontFlags = t.Font = t.ErrorFont = t.SEAC_ANALYSIS_ENABLED = void 0; var r = a(2), i = a(28), n = a(31), s = a(30), o = a(32), c = a(33), l = a(7), h = a(34), u = a(26), d = a(11), f = a(35); const g = [[57344, 63743], [1048576, 1114109]]; t.SEAC_ANALYSIS_ENABLED = !0; var m = { FixedPitch: 1, Serif: 2, Symbolic: 4, Script: 8, Nonsymbolic: 32, Italic: 64, AllCap: 65536, SmallCap: 131072, ForceBold: 262144 }; t.FontFlags = m; var p = [".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"]; function b(e) { if (e.fontMatrix && e.fontMatrix[0] !== r.FONT_IDENTITY_MATRIX[0]) { var t = .001 / e.fontMatrix[0], a = e.widths; for (var i in a) a[i] *= t; e.defaultWidth *= t } } function y(e, t) { switch (e) { case "Type1": return "Type1C" === t ? r.FontType.TYPE1C : r.FontType.TYPE1; case "CIDFontType0": return "CIDFontType0C" === t ? r.FontType.CIDFONTTYPE0C : r.FontType.CIDFONTTYPE0; case "OpenType": return r.FontType.OPENTYPE; case "TrueType": return r.FontType.TRUETYPE; case "CIDFontType2": return r.FontType.CIDFONTTYPE2; case "MMType1": return r.FontType.MMTYPE1; case "Type0": return r.FontType.TYPE0; default: return r.FontType.UNKNOWN } } function v(e, t) { if (void 0 !== t[e]) return e; var a = (0, c.getUnicodeForGlyph)(e, t); if (-1 !== a) for (var i in t) if (t[i] === a) return i; (0, r.info)("Unable to recover a standard glyph name for: " + e); return e } var w = function () { function e(e, t, a, r, i, n, s, o) { this.fontChar = e; this.unicode = t; this.accent = a; this.width = r; this.vmetric = i; this.operatorListId = n; this.isSpace = s; this.isInFont = o } e.prototype.matchesForCache = function (e, t, a, r, i, n, s, o) { return this.fontChar === e && this.unicode === t && this.accent === a && this.width === r && this.vmetric === i && this.operatorListId === n && this.isSpace === s && this.isInFont === o }; return e }(), k = function () { function e(e = []) { this._map = e } e.prototype = { get length() { return this._map.length }, forEach(e) { for (var t in this._map) e(t, this._map[t].charCodeAt(0)) }, has(e) { return void 0 !== this._map[e] }, get(e) { return this._map[e] }, charCodeOf(e) { const t = this._map; if (t.length <= 65536) return t.indexOf(e); for (const a in t) if (t[a] === e) return 0 | a; return -1 }, amend(e) { for (var t in e) this._map[t] = e[t] } }; return e }(); t.ToUnicodeMap = k; var S = function () { function e(e, t) { this.firstChar = e; this.lastChar = t } e.prototype = { get length() { return this.lastChar + 1 - this.firstChar }, forEach(e) { for (var t = this.firstChar, a = this.lastChar; t <= a; t++)e(t, t) }, has(e) { return this.firstChar <= e && e <= this.lastChar }, get(e) { if (this.firstChar <= e && e <= this.lastChar) return String.fromCharCode(e) }, charCodeOf(e) { return Number.isInteger(e) && e >= this.firstChar && e <= this.lastChar ? e : -1 }, amend(e) { (0, r.unreachable)("Should not call amend()") } }; return e }(); t.IdentityToUnicodeMap = S; var C = function () { function e(e, t, a) { e[t] = a >> 8 & 255; e[t + 1] = 255 & a } function t(e, t, a) { e[t] = a >> 24 & 255; e[t + 1] = a >> 16 & 255; e[t + 2] = a >> 8 & 255; e[t + 3] = 255 & a } function a(e, t, a) { var r, i; if (a instanceof Uint8Array) e.set(a, t); else if ("string" == typeof a) for (r = 0, i = a.length; r < i; r++)e[t++] = 255 & a.charCodeAt(r); else for (r = 0, i = a.length; r < i; r++)e[t++] = 255 & a[r] } function i(e) { this.sfnt = e; this.tables = Object.create(null) } i.getSearchParams = function (e, t) { for (var a = 1, r = 0; (a ^ e) > a;) { a <<= 1; r++ } var i = a * t; return { range: i, entry: r, rangeShift: t * e - i } }; i.prototype = { toArray: function () { var n = this.sfnt, s = this.tables, o = Object.keys(s); o.sort(); var c, h, u, d, f, g = o.length, m = 12 + 16 * g, p = [m]; for (c = 0; c < g; c++) { m += ((d = s[o[c]]).length + 3 & -4) >>> 0; p.push(m) } var b = new Uint8Array(m); for (c = 0; c < g; c++) { d = s[o[c]]; a(b, p[c], d) } "true" === n && (n = (0, r.string32)(65536)); b[0] = 255 & n.charCodeAt(0); b[1] = 255 & n.charCodeAt(1); b[2] = 255 & n.charCodeAt(2); b[3] = 255 & n.charCodeAt(3); e(b, 4, g); var y = i.getSearchParams(g, 16); e(b, 6, y.range); e(b, 8, y.entry); e(b, 10, y.rangeShift); m = 12; for (c = 0; c < g; c++) { f = o[c]; b[m] = 255 & f.charCodeAt(0); b[m + 1] = 255 & f.charCodeAt(1); b[m + 2] = 255 & f.charCodeAt(2); b[m + 3] = 255 & f.charCodeAt(3); var v = 0; for (h = p[c], u = p[c + 1]; h < u; h += 4) { v = v + (0, l.readUint32)(b, h) >>> 0 } t(b, m + 4, v); t(b, m + 8, p[c]); t(b, m + 12, s[f].length); m += 16 } return b }, addTable: function (e, t) { if (e in this.tables) throw new Error("Table " + e + " already exists"); this.tables[e] = t } }; return i }(), x = function () { function e(e, t, a) { var i; this.name = e; this.loadedName = a.loadedName; this.isType3Font = a.isType3Font; this.sizes = []; this.missingFile = !1; this.glyphCache = Object.create(null); this.isSerifFont = !!(a.flags & m.Serif); this.isSymbolicFont = !!(a.flags & m.Symbolic); this.isMonospace = !!(a.flags & m.FixedPitch); var n = a.type, s = a.subtype; this.type = n; this.subtype = s; let o = "sans-serif"; this.isMonospace ? o = "monospace" : this.isSerifFont && (o = "serif"); this.fallbackName = o; this.differences = a.differences; this.widths = a.widths; this.defaultWidth = a.defaultWidth; this.composite = a.composite; this.wideChars = a.wideChars; this.cMap = a.cMap; this.ascent = a.ascent / 1e3; this.descent = a.descent / 1e3; this.fontMatrix = a.fontMatrix; this.bbox = a.bbox; this.defaultEncoding = a.defaultEncoding; this.toUnicode = a.toUnicode; this.fallbackToUnicode = a.fallbackToUnicode || new k; this.toFontChar = []; if ("Type3" !== a.type) { this.cidEncoding = a.cidEncoding; this.vertical = a.vertical; if (this.vertical) { this.vmetrics = a.vmetrics; this.defaultVMetrics = a.defaultVMetrics } if (t && !t.isEmpty) { [n, s] = function (e, { type: t, subtype: a, composite: i }) { let n, s; if (function (e) { var t = e.peekBytes(4); return 65536 === (0, l.readUint32)(t, 0) || "true" === (0, r.bytesToString)(t) }(e) || I(e)) n = i ? "CIDFontType2" : "TrueType"; else if (function (e) { var t = e.peekBytes(4); return "OTTO" === (0, r.bytesToString)(t) }(e)) n = i ? "CIDFontType2" : "OpenType"; else if (function (e) { var t = e.peekBytes(2); if (37 === t[0] && 33 === t[1]) return !0; if (128 === t[0] && 1 === t[1]) return !0; return !1 }(e)) n = i ? "CIDFontType0" : "MMType1" === t ? "MMType1" : "Type1"; else if (function (e) { const t = e.peekBytes(4); if (t[0] >= 1 && t[3] >= 1 && t[3] <= 4) return !0; return !1 }(e)) if (i) { n = "CIDFontType0"; s = "CIDFontType0C" } else { n = "MMType1" === t ? "MMType1" : "Type1"; s = "Type1C" } else { (0, r.warn)("getFontFileType: Unable to detect correct font file Type/Subtype."); n = t; s = a } return [n, s] }(t, a); n === this.type && s === this.subtype || (0, r.info)("Inconsistent font file Type/SubType, expected: " + `${this.type}/${this.subtype} but found: ${n}/${s}.`); try { var c; switch (n) { case "MMType1": (0, r.info)("MMType1 font (" + e + "), falling back to Type1."); case "Type1": case "CIDFontType0": this.mimetype = "font/opentype"; var h = "Type1C" === s || "CIDFontType0C" === s ? new T(t, a) : new F(e, t, a); b(a); c = this.convert(e, h, a); break; case "OpenType": case "TrueType": case "CIDFontType2": this.mimetype = "font/opentype"; c = this.checkAndRepair(e, t, a); if (this.isOpenType) { b(a); n = "OpenType" } break; default: throw new r.FormatError(`Font ${n} is not supported`) } } catch (e) { (0, r.warn)(e); this.fallbackToSystemFont(); return } this.data = c; this.fontType = y(n, s); this.fontMatrix = a.fontMatrix; this.widths = a.widths; this.defaultWidth = a.defaultWidth; this.toUnicode = a.toUnicode; this.encoding = a.baseEncoding; this.seacMap = a.seacMap } else { t && (0, r.warn)('Font file is empty in "' + e + '" (' + this.loadedName + ")"); this.fallbackToSystemFont() } } else { for (i = 0; i < 256; i++)this.toFontChar[i] = this.differences[i] || a.defaultEncoding[i]; this.fontType = r.FontType.TYPE3 } } e.getFontID = (t = 1, function () { return String(t++) }); var t; function a(e, t) { return (e << 8) + t } function f(e, t) { var a = (e << 8) + t; return 32768 & a ? a - 65536 : a } function x(e) { return String.fromCharCode(e >> 8 & 255, 255 & e) } function A(e) { e > 32767 ? e = 32767 : e < -32768 && (e = -32768); return String.fromCharCode(e >> 8 & 255, 255 & e) } function I(e) { const t = e.peekBytes(4); return "ttcf" === (0, r.bytesToString)(t) } function E(e, t, a) { for (var r, i = [], n = 0, s = e.length; n < s; n++)-1 !== (r = (0, c.getUnicodeForGlyph)(e[n], t)) && (i[n] = r); for (var o in a) -1 !== (r = (0, c.getUnicodeForGlyph)(a[o], t)) && (i[+o] = r); return i } function O(e, t, a) { var i = Object.create(null), n = [], s = 0, o = g[s][0], c = g[s][1]; for (var l in e) { var h = e[l |= 0]; if (t(h)) { if (o > c) { if (++s >= g.length) { (0, r.warn)("Ran out of space in font private use area."); break } o = g[s][0]; c = g[s][1] } var u = o++; 0 === h && (h = a); i[u] = h; n[l] = u } } return { toFontChar: n, charCodeToGlyphId: i, nextAvailableFontCharCode: o } } function P(e, t) { var a, i, n, s, o = function (e, t) { var a = []; for (var r in e) e[r] >= t || a.push({ fontCharCode: 0 | r, glyphId: e[r] }); 0 === a.length && a.push({ fontCharCode: 0, glyphId: 0 }); a.sort((function (e, t) { return e.fontCharCode - t.fontCharCode })); for (var i = [], n = a.length, s = 0; s < n;) { var o = a[s].fontCharCode, c = [a[s].glyphId]; ++s; for (var l = o; s < n && l + 1 === a[s].fontCharCode;) { c.push(a[s].glyphId); ++s; if (65535 === ++l) break } i.push([o, l, c]) } return i }(e, t), c = o[o.length - 1][1] > 65535 ? 2 : 1, l = "\0\0" + x(c) + "\0\0" + (0, r.string32)(4 + 8 * c); for (a = o.length - 1; a >= 0 && !(o[a][0] <= 65535); --a); var h = a + 1; o[a][0] < 65535 && 65535 === o[a][1] && (o[a][1] = 65534); var u, d, f, g, m = o[a][1] < 65535 ? 1 : 0, p = h + m, b = C.getSearchParams(p, 2), y = "", v = "", w = "", k = "", S = "", A = 0; for (a = 0, i = h; a < i; a++) { d = (u = o[a])[0]; f = u[1]; y += x(d); v += x(f); var I = !0; for (n = 1, s = (g = u[2]).length; n < s; ++n)if (g[n] !== g[n - 1] + 1) { I = !1; break } if (I) { w += x(g[0] - d & 65535); k += x(0) } else { var F = 2 * (p - a) + 2 * A; A += f - d + 1; w += x(0); k += x(F); for (n = 0, s = g.length; n < s; ++n)S += x(g[n]) } } if (m > 0) { v += "ÿÿ"; y += "ÿÿ"; w += "\0"; k += "\0\0" } var T = "\0\0" + x(2 * p) + x(b.range) + x(b.entry) + x(b.rangeShift) + v + "\0\0" + y + w + k + S, E = "", O = ""; if (c > 1) { l += "\0\0\n" + (0, r.string32)(4 + 8 * c + 4 + T.length); E = ""; for (a = 0, i = o.length; a < i; a++) { d = (u = o[a])[0]; var P = (g = u[2])[0]; for (n = 1, s = g.length; n < s; ++n)if (g[n] !== g[n - 1] + 1) { f = u[0] + n - 1; E += (0, r.string32)(d) + (0, r.string32)(f) + (0, r.string32)(P); d = f + 1; P = g[n] } E += (0, r.string32)(d) + (0, r.string32)(u[1]) + (0, r.string32)(P) } O = "\0\f\0\0" + (0, r.string32)(E.length + 16) + "\0\0\0\0" + (0, r.string32)(E.length / 12) } return l + "\0" + x(T.length + 4) + T + O + E } function B(e, t, a) { a = a || { unitsPerEm: 0, yMax: 0, yMin: 0, ascent: 0, descent: 0 }; var i = 0, n = 0, s = 0, o = 0, l = null, h = 0; if (t) { for (var u in t) { (l > (u |= 0) || !l) && (l = u); h < u && (h = u); var d = (0, c.getUnicodeRangeFor)(u); if (d < 32) i |= 1 << d; else if (d < 64) n |= 1 << d - 32; else if (d < 96) s |= 1 << d - 64; else { if (!(d < 123)) throw new r.FormatError("Unicode ranges Bits > 123 are reserved for internal usage"); o |= 1 << d - 96 } } h > 65535 && (h = 65535) } else { l = 0; h = 255 } var f = e.bbox || [0, 0, 0, 0], g = a.unitsPerEm || 1 / (e.fontMatrix || r.FONT_IDENTITY_MATRIX)[0], m = e.ascentScaled ? 1 : g / 1e3, p = a.ascent || Math.round(m * (e.ascent || f[3])), b = a.descent || Math.round(m * (e.descent || f[1])); b > 0 && e.descent > 0 && f[1] < 0 && (b = -b); var y = a.yMax || p, v = -a.yMin || -b; return "\0$ô\0\0\0»\0\0\0»\0\0ß\x001\0\0\0\0" + String.fromCharCode(e.fixedPitch ? 9 : 0) + "\0\0\0\0\0\0" + (0, r.string32)(i) + (0, r.string32)(n) + (0, r.string32)(s) + (0, r.string32)(o) + "*21*" + x(e.italicAngle ? 1 : 0) + x(l || e.firstChar) + x(h || e.lastChar) + x(p) + x(b) + "\0d" + x(y) + x(v) + "\0\0\0\0\0\0\0\0" + x(e.xHeight) + x(e.capHeight) + x(0) + x(l || e.firstChar) + "\0" } function D(e) { var t = Math.floor(65536 * e.italicAngle); return "\0\0\0" + (0, r.string32)(t) + "\0\0\0\0" + (0, r.string32)(e.fixedPitch) + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" } function N(e, t) { t || (t = [[], []]); var a, r, i, n, s, o = [t[0][0] || "Original licence", t[0][1] || e, t[0][2] || "Unknown", t[0][3] || "uniqueID", t[0][4] || e, t[0][5] || "Version 0.11", t[0][6] || "", t[0][7] || "Unknown", t[0][8] || "Unknown", t[0][9] || "Unknown"], c = []; for (a = 0, r = o.length; a < r; a++) { var l = []; for (i = 0, n = (s = t[1][a] || o[a]).length; i < n; i++)l.push(x(s.charCodeAt(i))); c.push(l.join("")) } var h = [o, c], u = ["\0", "\0"], d = ["\0\0", "\0"], f = ["\0\0", "\t"], g = o.length * u.length, m = "\0\0" + x(g) + x(12 * g + 6), p = 0; for (a = 0, r = u.length; a < r; a++) { var b = h[a]; for (i = 0, n = b.length; i < n; i++) { s = b[i]; m += u[a] + d[a] + f[a] + x(i) + x(s.length) + x(p); p += s.length } } return m += o.join("") + c.join("") } e.prototype = { name: null, font: null, mimetype: null, encoding: null, disableFontFace: !1, get renderer() { var e = h.FontRendererFactory.create(this, !0); return (0, r.shadow)(this, "renderer", e) }, exportData: function () { var e = {}; for (var t in this) this.hasOwnProperty(t) && (e[t] = this[t]); return e }, fallbackToSystemFont: function () { this.missingFile = !0; var e, t, a = this.name, i = this.type, l = this.subtype; let h = a.replace(/[,_]/g, "-").replace(/\s/g, ""); var u = (0, o.getStdFontMap)(), d = (0, o.getNonStdFontMap)(), f = !!u[h] || !(!d[h] || !u[d[h]]); h = u[h] || d[h] || h; this.bold = -1 !== h.search(/bold/gi); this.italic = -1 !== h.search(/oblique/gi) || -1 !== h.search(/italic/gi); this.black = -1 !== a.search(/Black/g); this.remeasure = Object.keys(this.widths).length > 0; if (f && "CIDFontType2" === i && this.cidEncoding.startsWith("Identity-")) { const t = (0, o.getGlyphMapForStandardFonts)(), r = []; for (e in t) r[+e] = t[e]; if (/Arial-?Black/i.test(a)) { var g = (0, o.getSupplementalGlyphMapForArialBlack)(); for (e in g) r[+e] = g[e] } else if (/Calibri/i.test(a)) { const t = (0, o.getSupplementalGlyphMapForCalibri)(); for (e in t) r[+e] = t[e] } this.toUnicode instanceof S || this.toUnicode.forEach((function (e, t) { r[+e] = t })); this.toFontChar = r; this.toUnicode = new k(r) } else if (/Symbol/i.test(h)) this.toFontChar = E(s.SymbolSetEncoding, (0, n.getGlyphsUnicode)(), this.differences); else if (/Dingbats/i.test(h)) { /Wingdings/i.test(a) && (0, r.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats."); this.toFontChar = E(s.ZapfDingbatsEncoding, (0, n.getDingbatsGlyphsUnicode)(), this.differences) } else if (f) this.toFontChar = E(this.defaultEncoding, (0, n.getGlyphsUnicode)(), this.differences); else { const r = (0, n.getGlyphsUnicode)(), i = []; this.toUnicode.forEach((e, a) => { if (!this.composite) { var n = this.differences[e] || this.defaultEncoding[e]; -1 !== (t = (0, c.getUnicodeForGlyph)(n, r)) && (a = t) } i[+e] = a }); if (this.composite && this.toUnicode instanceof S && /Verdana/i.test(a)) { const t = (0, o.getGlyphMapForStandardFonts)(); for (e in t) i[+e] = t[e] } this.toFontChar = i } this.loadedName = h.split("-")[0]; this.fontType = y(i, l) }, checkAndRepair: function (e, t, o) { const c = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", "fpgm", "prep", "cvt ", "CFF "]; function l(e, a) { const r = Object.create(null); r["OS/2"] = null; r.cmap = null; r.head = null; r.hhea = null; r.hmtx = null; r.maxp = null; r.name = null; r.post = null; for (let e = 0; e < a; e++) { const e = h(t); c.includes(e.tag) && (0 !== e.length && (r[e.tag] = e)) } return r } function h(e) { var t = (0, r.bytesToString)(e.getBytes(4)), a = e.getInt32() >>> 0, i = e.getInt32() >>> 0, n = e.getInt32() >>> 0, s = e.pos; e.pos = e.start ? e.start : 0; e.skip(i); var o = e.getBytes(n); e.pos = s; if ("head" === t) { o[8] = o[9] = o[10] = o[11] = 0; o[17] |= 32 } return { tag: t, checksum: a, length: n, offset: i, data: o } } function g(e) { return { version: (0, r.bytesToString)(e.getBytes(4)), numTables: e.getUint16(), searchRange: e.getUint16(), entrySelector: e.getUint16(), rangeShift: e.getUint16() } } function m(e, t, a, r, i, n) { var s = { length: 0, sizeOfInstructions: 0 }; if (a - t <= 12) return s; var o = e.subarray(t, a), c = f(o[0], o[1]); if (c < 0) { !function (e, t, a) { e[t + 1] = a; e[t] = a >>> 8 }(o, 0, c = -1); r.set(o, i); s.length = o.length; return s } var l, h = 10, u = 0; for (l = 0; l < c; l++) { u = (o[h] << 8 | o[h + 1]) + 1; h += 2 } var d = h, g = o[h] << 8 | o[h + 1]; s.sizeOfInstructions = g; var m = h += 2 + g, p = 0; for (l = 0; l < u; l++) { var b = o[h++]; 192 & b && (o[h - 1] = 63 & b); let e = 2; 2 & b ? e = 1 : 16 & b && (e = 0); let t = 2; 4 & b ? t = 1 : 32 & b && (t = 0); const a = e + t; p += a; if (8 & b) { var y = o[h++]; l += y; p += y * a } } if (0 === p) return s; var v = h + p; if (v > o.length) return s; if (!n && g > 0) { r.set(o.subarray(0, d), i); r.set([0, 0], i + d); r.set(o.subarray(m, v), i + d + 2); v -= g; o.length - v > 3 && (v = v + 3 & -4); s.length = v; return s } if (o.length - v > 3) { v = v + 3 & -4; r.set(o.subarray(0, v), i); s.length = v; return s } r.set(o, i); s.length = o.length; return s } function y(e) { var a = (t.start ? t.start : 0) + e.offset; t.pos = a; var i = [[], []], n = e.length, s = a + n; if (0 !== t.getUint16() || n < 6) return i; var o, c, l = t.getUint16(), h = t.getUint16(), u = []; for (o = 0; o < l && t.pos + 12 <= s; o++) { var d = { platform: t.getUint16(), encoding: t.getUint16(), language: t.getUint16(), name: t.getUint16(), length: t.getUint16(), offset: t.getUint16() }; (1 === d.platform && 0 === d.encoding && 0 === d.language || 3 === d.platform && 1 === d.encoding && 1033 === d.language) && u.push(d) } for (o = 0, c = u.length; o < c; o++) { var f = u[o]; if (!(f.length <= 0)) { var g = a + h + f.offset; if (!(g + f.length > s)) { t.pos = g; var m = f.name; if (f.encoding) { for (var p = "", b = 0, y = f.length; b < y; b += 2)p += String.fromCharCode(t.getUint16()); i[1][m] = p } else i[0][m] = (0, r.bytesToString)(t.getBytes(f.length)) } } } return i } var w = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2]; function k(e, t) { for (var a, i, n, s, o, c = e.data, l = 0, h = 0, u = 0, d = [], f = [], g = [], m = t.tooComplexToFollowFunctions, p = !1, b = 0, y = 0, v = c.length; l < v;) { var k = c[l++]; if (64 === k) { i = c[l++]; if (p || y) l += i; else for (a = 0; a < i; a++)d.push(c[l++]) } else if (65 === k) { i = c[l++]; if (p || y) l += 2 * i; else for (a = 0; a < i; a++) { n = c[l++]; d.push(n << 8 | c[l++]) } } else if (176 == (248 & k)) { i = k - 176 + 1; if (p || y) l += i; else for (a = 0; a < i; a++)d.push(c[l++]) } else if (184 == (248 & k)) { i = k - 184 + 1; if (p || y) l += 2 * i; else for (a = 0; a < i; a++) { n = c[l++]; d.push(n << 8 | c[l++]) } } else if (43 !== k || m) if (44 !== k || m) { if (45 === k) if (p) { p = !1; h = l } else { if (!(o = f.pop())) { (0, r.warn)("TT: ENDF bad stack"); t.hintsValid = !1; return } s = g.pop(); c = o.data; l = o.i; t.functionsStackDeltas[s] = d.length - o.stackTop } else if (137 === k) { if (p || y) { (0, r.warn)("TT: nested IDEFs not allowed"); m = !0 } p = !0; u = l } else if (88 === k) ++b; else if (27 === k) y = b; else if (89 === k) { y === b && (y = 0); --b } else if (28 === k && !p && !y) { var S = d[d.length - 1]; S > 0 && (l += S - 1) } } else { if (p || y) { (0, r.warn)("TT: nested FDEFs not allowed"); m = !0 } p = !0; u = l; s = d.pop(); t.functionsDefined[s] = { data: c, i: l } } else if (!p && !y) { s = d[d.length - 1]; if (isNaN(s)) (0, r.info)("TT: CALL empty stack (or invalid entry)."); else { t.functionsUsed[s] = !0; if (s in t.functionsStackDeltas) { const e = d.length + t.functionsStackDeltas[s]; if (e < 0) { (0, r.warn)("TT: CALL invalid functions stack delta."); t.hintsValid = !1; return } d.length = e } else if (s in t.functionsDefined && !g.includes(s)) { f.push({ data: c, i: l, stackTop: d.length - 1 }); g.push(s); if (!(o = t.functionsDefined[s])) { (0, r.warn)("TT: CALL non-existent function"); t.hintsValid = !1; return } c = o.data; l = o.i } } } if (!p && !y) { let e = 0; k <= 142 ? e = w[k] : k >= 192 && k <= 223 ? e = -1 : k >= 224 && (e = -2); if (k >= 113 && k <= 117) { i = d.pop(); isNaN(i) || (e = 2 * -i) } for (; e < 0 && d.length > 0;) { d.pop(); e++ } for (; e > 0;) { d.push(NaN); e-- } } } t.tooComplexToFollowFunctions = m; var C = [c]; l > c.length && C.push(new Uint8Array(l - c.length)); if (u > h) { (0, r.warn)("TT: complementing a missing function tail"); C.push(new Uint8Array([34, 45])) } !function (e, t) { if (t.length > 1) { var a, r, i = 0; for (a = 0, r = t.length; a < r; a++)i += t[a].length; i = i + 3 & -4; var n = new Uint8Array(i), s = 0; for (a = 0, r = t.length; a < r; a++) { n.set(t[a], s); s += t[a].length } e.data = n; e.length = i } }(e, C) } let S, x, A, F; if (I(t = new d.Stream(new Uint8Array(t.getBytes())))) { const e = function (e, t) { const { numFonts: a, offsetTable: i } = function (e) { const t = (0, r.bytesToString)(e.getBytes(4)); (0, r.assert)("ttcf" === t, "Must be a TrueType Collection font."); const a = e.getUint16(), i = e.getUint16(), n = e.getInt32() >>> 0, s = []; for (let t = 0; t < n; t++)s.push(e.getInt32() >>> 0); const o = { ttcTag: t, majorVersion: a, minorVersion: i, numFonts: n, offsetTable: s }; switch (a) { case 1: return o; case 2: o.dsigTag = e.getInt32() >>> 0; o.dsigLength = e.getInt32() >>> 0; o.dsigOffset = e.getInt32() >>> 0; return o }throw new r.FormatError(`Invalid TrueType Collection majorVersion: ${a}.`) }(e); for (let n = 0; n < a; n++) { e.pos = (e.start || 0) + i[n]; const a = g(e), s = l(0, a.numTables); if (!s.name) throw new r.FormatError('TrueType Collection font must contain a "name" table.'); const o = y(s.name); for (let e = 0, r = o.length; e < r; e++)for (let r = 0, i = o[e].length; r < i; r++) { const i = o[e][r]; if (i && i.replace(/\s/g, "") === t) return { header: a, tables: s } } } throw new r.FormatError(`TrueType Collection does not contain "${t}" font.`) }(t, this.name); S = e.header; x = e.tables } else { S = g(t); x = l(0, S.numTables) } var E = !x["CFF "]; if (E) { if (!x.loca) throw new r.FormatError('Required "loca" table is not found'); if (!x.glyf) { (0, r.warn)('Required "glyf" table is not found -- trying to recover.'); x.glyf = { tag: "glyf", data: new Uint8Array(0) } } this.isOpenType = !1 } else { const t = o.composite && ((o.cidToGidMap || []).length > 0 || !(o.cMap instanceof u.IdentityCMap)); if ("OTTO" === S.version && !t || !x.head || !x.hhea || !x.maxp || !x.post) { F = new d.Stream(x["CFF "].data); A = new T(F, o); b(o); return this.convert(e, A, o) } delete x.glyf; delete x.loca; delete x.fpgm; delete x.prep; delete x["cvt "]; this.isOpenType = !0 } if (!x.maxp) throw new r.FormatError('Required "maxp" table is not found'); t.pos = (t.start || 0) + x.maxp.offset; var M = t.getInt32(); const L = t.getUint16(); let R = L + 1, U = !0; if (R > 65535) { U = !1; R = L; (0, r.warn)("Not enough space in glyfs to duplicate first glyph.") } var q = 0, j = 0; if (M >= 65536 && x.maxp.length >= 22) { t.pos += 8; if (t.getUint16() > 2) { x.maxp.data[14] = 0; x.maxp.data[15] = 2 } t.pos += 4; q = t.getUint16(); t.pos += 4; j = t.getUint16() } x.maxp.data[4] = R >> 8; x.maxp.data[5] = 255 & R; var _ = function (e, t, a, i) { var n = { functionsDefined: [], functionsUsed: [], functionsStackDeltas: [], tooComplexToFollowFunctions: !1, hintsValid: !0 }; e && k(e, n); t && k(t, n); e && function (e, t) { if (!e.tooComplexToFollowFunctions) if (e.functionsDefined.length > t) { (0, r.warn)("TT: more functions defined than expected"); e.hintsValid = !1 } else for (var a = 0, i = e.functionsUsed.length; a < i; a++) { if (a > t) { (0, r.warn)("TT: invalid function id: " + a); e.hintsValid = !1; return } if (e.functionsUsed[a] && !e.functionsDefined[a]) { (0, r.warn)("TT: undefined function: " + a); e.hintsValid = !1; return } } }(n, i); if (a && 1 & a.length) { var s = new Uint8Array(a.length + 1); s.set(a.data); a.data = s } return n.hintsValid }(x.fpgm, x.prep, x["cvt "], q); if (!_) { delete x.fpgm; delete x.prep; delete x["cvt "] } !function (e, t, a, i, n) { if (t) { e.pos = (e.start ? e.start : 0) + t.offset; e.pos += 4; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 8; e.pos += 2; var s = e.getUint16(); if (s > i) { (0, r.info)("The numOfMetrics (" + s + ") should not be greater than the numGlyphs (" + i + ")"); s = i; t.data[34] = (65280 & s) >> 8; t.data[35] = 255 & s } var o = i - s - (a.length - 4 * s >> 1); if (o > 0) { var c = new Uint8Array(a.length + 2 * o); c.set(a.data); if (n) { c[a.length] = a.data[2]; c[a.length + 1] = a.data[3] } a.data = c } } else a && (a.data = null) }(t, x.hhea, x.hmtx, R, U); if (!x.head) throw new r.FormatError('Required "head" table is not found'); !function (e, t, i) { var n, s, o, c, l = e.data, h = (n = l[0], s = l[1], o = l[2], c = l[3], (n << 24) + (s << 16) + (o << 8) + c); if (h >> 16 != 1) { (0, r.info)("Attempting to fix invalid version in head table: " + h); l[0] = 0; l[1] = 1; l[2] = 0; l[3] = 0 } var u = a(l[50], l[51]); if (u < 0 || u > 1) { (0, r.info)("Attempting to fix invalid indexToLocFormat in head table: " + u); var d = t + 1; if (i === d << 1) { l[50] = 0; l[51] = 0 } else { if (i !== d << 2) throw new r.FormatError("Could not fix indexToLocFormat: " + u); l[50] = 0; l[51] = 1 } } }(x.head, L, E ? x.loca.length : 0); var z = Object.create(null); if (E) { var H = a(x.head.data[50], x.head.data[51]), G = function (e, t, a, r, i, n, s) { var o, c, l; if (r) { o = 4; c = function (e, t) { return e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3] }; l = function (e, t, a) { e[t] = a >>> 24 & 255; e[t + 1] = a >> 16 & 255; e[t + 2] = a >> 8 & 255; e[t + 3] = 255 & a } } else { o = 2; c = function (e, t) { return e[t] << 9 | e[t + 1] << 1 }; l = function (e, t, a) { e[t] = a >> 9 & 255; e[t + 1] = a >> 1 & 255 } } var h = n ? a + 1 : a, u = o * (1 + h), d = new Uint8Array(u); d.set(e.data.subarray(0, u)); e.data = d; var f, g, p = t.data, b = p.length, y = new Uint8Array(b), v = c(d, 0), w = 0, k = Object.create(null); l(d, 0, w); for (f = 0, g = o; f < a; f++, g += o) { var S = c(d, g); 0 === S && (S = v); S > b && (b + 3 & -4) === S && (S = b); S > b && (v = S); var C = m(p, v, S, y, w, i), x = C.length; 0 === x && (k[f] = !0); C.sizeOfInstructions > s && (s = C.sizeOfInstructions); l(d, g, w += x); v = S } if (0 === w) { var A = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]); for (f = 0, g = o; f < h; f++, g += o)l(d, g, A.length); t.data = A } else if (n) { var I = c(d, o); if (y.length > I + w) t.data = y.subarray(0, I + w); else { t.data = new Uint8Array(I + w); t.data.set(y.subarray(0, w)) } t.data.set(y.subarray(0, I), w); l(e.data, d.length - o, w + I) } else t.data = y.subarray(0, w); return { missingGlyphs: k, maxSizeOfInstructions: s } }(x.loca, x.glyf, L, H, _, U, j); z = G.missingGlyphs; if (M >= 65536 && x.maxp.length >= 22) { x.maxp.data[26] = G.maxSizeOfInstructions >> 8; x.maxp.data[27] = 255 & G.maxSizeOfInstructions } } if (!x.hhea) throw new r.FormatError('Required "hhea" table is not found'); if (0 === x.hhea.data[10] && 0 === x.hhea.data[11]) { x.hhea.data[10] = 255; x.hhea.data[11] = 255 } var W = { unitsPerEm: a(x.head.data[18], x.head.data[19]), yMax: a(x.head.data[42], x.head.data[43]), yMin: f(x.head.data[38], x.head.data[39]), ascent: a(x.hhea.data[4], x.hhea.data[5]), descent: f(x.hhea.data[6], x.hhea.data[7]) }; this.ascent = W.ascent / W.unitsPerEm; this.descent = W.descent / W.unitsPerEm; x.post && function (e, a, i) { var n = (t.start ? t.start : 0) + e.offset; t.pos = n; var s, o = n + e.length, c = t.getInt32(); t.getBytes(28); var l, h = !0; switch (c) { case 65536: s = p; break; case 131072: var u = t.getUint16(); if (u !== i) { h = !1; break } var d = []; for (l = 0; l < u; ++l) { var f = t.getUint16(); if (f >= 32768) { h = !1; break } d.push(f) } if (!h) break; for (var g = [], m = []; t.pos < o;) { var b = t.getByte(); m.length = b; for (l = 0; l < b; ++l)m[l] = String.fromCharCode(t.getByte()); g.push(m.join("")) } s = []; for (l = 0; l < u; ++l) { var y = d[l]; y < 258 ? s.push(p[y]) : s.push(g[y - 258]) } break; case 196608: break; default: (0, r.warn)("Unknown/unsupported post table version " + c); h = !1; a.defaultEncoding && (s = a.defaultEncoding) }a.glyphNames = s }(x.post, o, L); x.post = { tag: "post", data: D(o) }; var X, V = []; function K(e) { return !z[e] } if (o.composite) { var Y = o.cidToGidMap || [], $ = 0 === Y.length; o.cMap.forEach((function (e, t) { if (t > 65535) throw new r.FormatError("Max size of CID is 65,535"); var a = -1; $ ? a = t : void 0 !== Y[t] && (a = Y[t]); a >= 0 && a < L && K(a) && (V[e] = a) })) } else { var J = function (e, t, a, i) { if (!e) { (0, r.warn)("No cmap table available."); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: !1 } } var n, s = (t.start ? t.start : 0) + e.offset; t.pos = s; t.getUint16(); for (var o, c = t.getUint16(), l = !1, h = 0; h < c; h++) { var u = t.getUint16(), d = t.getUint16(), f = t.getInt32() >>> 0, g = !1; if (!o || o.platformId !== u || o.encodingId !== d) { if (0 === u && 0 === d) g = !0; else if (1 === u && 0 === d) g = !0; else if (3 !== u || 1 !== d || !i && o) { if (a && 3 === u && 0 === d) { g = !0; l = !0 } } else { g = !0; a || (l = !0) } g && (o = { platformId: u, encodingId: d, offset: f }); if (l) break } } o && (t.pos = s + o.offset); if (!o || -1 === t.peekByte()) { (0, r.warn)("Could not find a preferred cmap table."); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: !1 } } var m = t.getUint16(); t.getUint16(); t.getUint16(); var p, b, y = !1, v = []; if (0 === m) { for (p = 0; p < 256; p++) { var w = t.getByte(); w && v.push({ charCode: p, glyphId: w }) } y = !0 } else if (4 === m) { var k = t.getUint16() >> 1; t.getBytes(6); var S, C = []; for (S = 0; S < k; S++)C.push({ end: t.getUint16() }); t.getUint16(); for (S = 0; S < k; S++)C[S].start = t.getUint16(); for (S = 0; S < k; S++)C[S].delta = t.getUint16(); var x = 0; for (S = 0; S < k; S++) { n = C[S]; var A = t.getUint16(); if (A) { var I = (A >> 1) - (k - S); n.offsetIndex = I; x = Math.max(x, I + n.end - n.start + 1) } else n.offsetIndex = -1 } var F = []; for (p = 0; p < x; p++)F.push(t.getUint16()); for (S = 0; S < k; S++) { s = (n = C[S]).start; var T = n.end, E = n.delta; I = n.offsetIndex; for (p = s; p <= T; p++)if (65535 !== p) { b = (b = I < 0 ? p : F[I + p - s]) + E & 65535; v.push({ charCode: p, glyphId: b }) } } } else { if (6 !== m) { (0, r.warn)("cmap table has unsupported format: " + m); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: !1 } } var O = t.getUint16(), P = t.getUint16(); for (p = 0; p < P; p++) { b = t.getUint16(); var B = O + p; v.push({ charCode: B, glyphId: b }) } } v.sort((function (e, t) { return e.charCode - t.charCode })); for (h = 1; h < v.length; h++)if (v[h - 1].charCode === v[h].charCode) { v.splice(h, 1); h-- } return { platformId: o.platformId, encodingId: o.encodingId, mappings: v, hasShortCmap: y } }(x.cmap, t, this.isSymbolicFont, o.hasEncoding), Z = J.platformId, Q = J.encodingId, ee = J.mappings, te = ee.length; if (o.hasEncoding && (3 === Z && 1 === Q || 1 === Z && 0 === Q) || -1 === Z && -1 === Q && (0, s.getEncoding)(o.baseEncodingName)) { var ae = []; "MacRomanEncoding" !== o.baseEncodingName && "WinAnsiEncoding" !== o.baseEncodingName || (ae = (0, s.getEncoding)(o.baseEncodingName)); var re = (0, n.getGlyphsUnicode)(); for (X = 0; X < 256; X++) { var ie, ne; if (ie = this.differences && X in this.differences ? this.differences[X] : X in ae && "" !== ae[X] ? ae[X] : s.StandardEncoding[X]) { ne = v(ie, re); var se; 3 === Z && 1 === Q ? se = re[ne] : 1 === Z && 0 === Q && (se = s.MacRomanEncoding.indexOf(ne)); var oe = !1; for (let e = 0; e < te; ++e)if (ee[e].charCode === se) { V[X] = ee[e].glyphId; oe = !0; break } if (!oe && o.glyphNames) { var ce = o.glyphNames.indexOf(ie); -1 === ce && ne !== ie && (ce = o.glyphNames.indexOf(ne)); ce > 0 && K(ce) && (V[X] = ce) } } } } else if (0 === Z && 0 === Q) for (let e = 0; e < te; ++e)V[ee[e].charCode] = ee[e].glyphId; else for (let e = 0; e < te; ++e) { X = ee[e].charCode; 3 === Z && X >= 61440 && X <= 61695 && (X &= 255); V[X] = ee[e].glyphId } } 0 === V.length && (V[0] = 0); let le = R - 1; U || (le = 0); var he = O(V, K, le); this.toFontChar = he.toFontChar; x.cmap = { tag: "cmap", data: P(he.charCodeToGlyphId, R) }; x["OS/2"] && function (e) { var t = new d.Stream(e.data), a = t.getUint16(); t.getBytes(60); var r = t.getUint16(); if (a < 4 && 768 & r) return !1; if (t.getUint16() > t.getUint16()) return !1; t.getBytes(6); if (0 === t.getUint16()) return !1; e.data[8] = e.data[9] = 0; return !0 }(x["OS/2"]) || (x["OS/2"] = { tag: "OS/2", data: B(o, he.charCodeToGlyphId, W) }); if (!E) try { F = new d.Stream(x["CFF "].data); A = new i.CFFParser(F, o, !0).parse(); A.duplicateFirstGlyph(); var ue = new i.CFFCompiler(A); x["CFF "].data = ue.compile() } catch (e) { (0, r.warn)("Failed to compile font " + o.loadedName) } if (x.name) { var de = y(x.name); x.name.data = N(e, de) } else x.name = { tag: "name", data: N(this.name) }; var fe = new C(S.version); for (var ge in x) fe.addTable(ge, x[ge].data); return fe.toArray() }, convert: function (e, t, a) { a.fixedPitch = !1; a.builtInEncoding && function (e, t) { if (!e.hasIncludedToUnicodeMap && !(e.hasEncoding || t === e.defaultEncoding || e.toUnicode instanceof S)) { var a = [], r = (0, n.getGlyphsUnicode)(); for (var i in t) { var s = t[i], o = (0, c.getUnicodeForGlyph)(s, r); -1 !== o && (a[i] = String.fromCharCode(o)) } e.toUnicode.amend(a) } }(a, a.builtInEncoding); let i = 1; t instanceof T && (i = t.numGlyphs - 1); var o = t.getGlyphMapping(a), l = O(o, t.hasGlyphId.bind(t), i); this.toFontChar = l.toFontChar; var h = t.numGlyphs; function u(e, t) { var a = null; for (var r in e) if (t === e[r]) { a || (a = []); a.push(0 | r) } return a } function d(e, t) { for (var a in e) if (t === e[a]) return 0 | a; l.charCodeToGlyphId[l.nextAvailableFontCharCode] = t; return l.nextAvailableFontCharCode++ } var f = t.seacs; if (f && f.length) { var g = a.fontMatrix || r.FONT_IDENTITY_MATRIX, m = t.getCharset(), p = Object.create(null); for (var b in f) { var y = f[b |= 0], v = s.StandardEncoding[y[2]], w = s.StandardEncoding[y[3]], k = m.indexOf(v), I = m.indexOf(w); if (!(k < 0 || I < 0)) { var F = { x: y[0] * g[0] + y[1] * g[2] + g[4], y: y[0] * g[1] + y[1] * g[3] + g[5] }, E = u(o, b); if (E) for (var M = 0, L = E.length; M < L; M++) { var R = E[M], U = l.charCodeToGlyphId, q = d(U, k), j = d(U, I); p[R] = { baseFontCharCode: q, accentFontCharCode: j, accentOffset: F } } } } a.seacMap = p } var _ = 1 / (a.fontMatrix || r.FONT_IDENTITY_MATRIX)[0], z = new C("OTTO"); z.addTable("CFF ", t.data); z.addTable("OS/2", B(a, l.charCodeToGlyphId)); z.addTable("cmap", P(l.charCodeToGlyphId, h)); z.addTable("head", "\0\0\0\0\0\0\0\0\0\0_<õ\0\0" + A(_) + "\0\0\0\0\v~'\0\0\0\0\v~'\0\0" + A(a.descent) + "ÿ" + A(a.ascent) + x(a.italicAngle ? 2 : 0) + "\0\0\0\0\0\0\0"); z.addTable("hhea", "\0\0\0" + A(a.ascent) + A(a.descent) + "\0\0ÿÿ\0\0\0\0\0\0" + A(a.capHeight) + A(Math.tan(a.italicAngle) * a.xHeight) + "\0\0\0\0\0\0\0\0\0\0\0\0" + x(h)); z.addTable("hmtx", function () { for (var e = t.charstrings, a = t.cff ? t.cff.widths : null, r = "\0\0\0\0", i = 1, n = h; i < n; i++) { var s = 0; if (e) { var o = e[i - 1]; s = "width" in o ? o.width : 0 } else a && (s = Math.ceil(a[i] || 0)); r += x(s) + x(0) } return r }()); z.addTable("maxp", "\0\0P\0" + x(h)); z.addTable("name", N(e)); z.addTable("post", D(a)); return z.toArray() }, get spaceWidth() { if ("_shadowWidth" in this) return this._shadowWidth; for (var e, t = ["space", "minus", "one", "i", "I"], a = 0, r = t.length; a < r; a++) { var i = t[a]; if (i in this.widths) { e = this.widths[i]; break } var s = (0, n.getGlyphsUnicode)()[i], o = 0; this.composite && this.cMap.contains(s) && (o = this.cMap.lookup(s)); !o && this.toUnicode && (o = this.toUnicode.charCodeOf(s)); o <= 0 && (o = s); if (e = this.widths[o]) break } e = e || this.defaultWidth; this._shadowWidth = e; return e }, charToGlyph: function (e, t) { var a, i, n, s = e; this.cMap && this.cMap.contains(e) && (s = this.cMap.lookup(e)); i = this.widths[s]; i = (0, r.isNum)(i) ? i : this.defaultWidth; var o = this.vmetrics && this.vmetrics[s]; let l = this.toUnicode.get(e) || this.fallbackToUnicode.get(e) || e; "number" == typeof l && (l = String.fromCharCode(l)); var h = e in this.toFontChar; a = this.toFontChar[e] || e; if (this.missingFile) { const t = this.differences[e] || this.defaultEncoding[e]; ".notdef" !== t && "" !== t || "Type1" !== this.type || (a = 32); a = (0, c.mapSpecialUnicodeValues)(a) } this.isType3Font && (n = a); var u = null; if (this.seacMap && this.seacMap[e]) { h = !0; var d = this.seacMap[e]; a = d.baseFontCharCode; u = { fontChar: String.fromCodePoint(d.accentFontCharCode), offset: d.accentOffset } } var f = "number" == typeof a ? String.fromCodePoint(a) : "", g = this.glyphCache[e]; if (!g || !g.matchesForCache(f, l, u, i, o, n, t, h)) { g = new w(f, l, u, i, o, n, t, h); this.glyphCache[e] = g } return g }, charsToGlyphs: function (e) { var t, a, r, i = this.charsCache; if (i && (t = i[e])) return t; i || (i = this.charsCache = Object.create(null)); t = []; var n, s = e, o = 0; if (this.cMap) for (var c = Object.create(null); o < e.length;) { this.cMap.readCharCode(e, o, c); r = c.charcode; var l = c.length; o += l; var h = 1 === l && 32 === e.charCodeAt(o - 1); a = this.charToGlyph(r, h); t.push(a) } else for (o = 0, n = e.length; o < n; ++o) { r = e.charCodeAt(o); a = this.charToGlyph(r, 32 === r); t.push(a) } return i[s] = t }, get glyphCacheValues() { return Object.values(this.glyphCache) } }; return e }(); t.Font = x; var A = function () { function e(e) { this.error = e; this.loadedName = "g_font_error"; this.missingFile = !0 } e.prototype = { charsToGlyphs: function () { return [] }, exportData: function () { return { error: this.error } } }; return e }(); t.ErrorFont = A; function I(e, t, a) { var r, i, o, c = Object.create(null), l = !!(e.flags & m.Symbolic); if (e.baseEncodingName) { o = (0, s.getEncoding)(e.baseEncodingName); for (i = 0; i < o.length; i++) { r = a.indexOf(o[i]); c[i] = r >= 0 ? r : 0 } } else if (l) for (i in t) c[i] = t[i]; else { o = s.StandardEncoding; for (i = 0; i < o.length; i++) { r = a.indexOf(o[i]); c[i] = r >= 0 ? r : 0 } } var h, u = e.differences; if (u) for (i in u) { var d = u[i]; if (-1 === (r = a.indexOf(d))) { h || (h = (0, n.getGlyphsUnicode)()); var f = v(d, h); f !== d && (r = a.indexOf(f)) } c[i] = r >= 0 ? r : 0 } return c } var F = function () { function e(e, t, a) { for (var r, i = e.length, n = t.length, s = i - n, o = a, c = !1; o < s;) { r = 0; for (; r < n && e[o + r] === t[r];)r++; if (r >= n) { o += r; for (; o < i && (0, l.isWhiteSpace)(e[o]);)o++; c = !0; break } o++ } return { found: c, length: o } } function t(t, a, i) { var n = i.length1, s = (i.length2, a.peekBytes(6)), o = 128 === s[0] && 1 === s[1]; if (o) { a.skip(6); n = s[5] << 24 | s[4] << 16 | s[3] << 8 | s[2] } var c = function (t, a) { var i, n, s, o, c = [101, 101, 120, 101, 99], h = t.pos; try { n = (i = t.getBytes(a)).length } catch (e) { if (e instanceof l.MissingDataException) throw e } if (n === a && (s = e(i, c, a - 2 * c.length)).found && s.length === a) return { stream: new d.Stream(i), length: a }; (0, r.warn)('Invalid "Length1" property in Type1 font -- trying to recover.'); t.pos = h; for (; ;) { if (0 === (s = e(t.peekBytes(2048), c, 0)).length) break; t.pos += s.length; if (s.found) { o = t.pos - h; break } } t.pos = h; if (o) return { stream: new d.Stream(t.getBytes(o)), length: o }; (0, r.warn)('Unable to recover "Length1" property in Type1 font -- using as is.'); return { stream: new d.Stream(t.getBytes(a)), length: a } }(a, n); new f.Type1Parser(c.stream, !1, !0).extractFontHeader(i); o && (s = a.getBytes(6))[5] << 24 | s[4] << 16 | s[3] << 8 | s[2]; var h, u = (h = a.getBytes(), { stream: new d.Stream(h), length: h.length }), g = new f.Type1Parser(u.stream, !0, !0).extractFontProgram(i); for (var m in g.properties) i[m] = g.properties[m]; var p = g.charstrings, b = this.getType2Charstrings(p), y = this.getType2Subrs(g.subrs); this.charstrings = p; this.data = this.wrap(t, b, this.charstrings, y, i); this.seacs = this.getSeacs(g.charstrings) } t.prototype = { get numGlyphs() { return this.charstrings.length + 1 }, getCharset: function () { for (var e = [".notdef"], t = this.charstrings, a = 0; a < t.length; a++)e.push(t[a].glyphName); return e }, getGlyphMapping: function (e) { var t, a = this.charstrings, r = [".notdef"]; for (t = 0; t < a.length; t++)r.push(a[t].glyphName); var i = e.builtInEncoding; if (i) { var n = Object.create(null); for (var s in i) (t = r.indexOf(i[s])) >= 0 && (n[s] = t) } return I(e, n, r) }, hasGlyphId: function (e) { return !(e < 0 || e >= this.numGlyphs) && (0 === e || this.charstrings[e - 1].charstring.length > 0) }, getSeacs: function (e) { var t, a, r = []; for (t = 0, a = e.length; t < a; t++) { var i = e[t]; i.seac && (r[t + 1] = i.seac) } return r }, getType2Charstrings: function (e) { for (var t = [], a = 0, r = e.length; a < r; a++)t.push(e[a].charstring); return t }, getType2Subrs: function (e) { var t = 0, a = e.length; t = a < 1133 ? 107 : a < 33769 ? 1131 : 32768; var r, i = []; for (r = 0; r < t; r++)i.push([11]); for (r = 0; r < a; r++)i.push(e[r]); return i }, wrap: function (e, t, a, r, n) { var s = new i.CFF; s.header = new i.CFFHeader(1, 0, 4, 4); s.names = [e]; var o = new i.CFFTopDict; o.setByName("version", 391); o.setByName("Notice", 392); o.setByName("FullName", 393); o.setByName("FamilyName", 394); o.setByName("Weight", 395); o.setByName("Encoding", null); o.setByName("FontMatrix", n.fontMatrix); o.setByName("FontBBox", n.bbox); o.setByName("charset", null); o.setByName("CharStrings", null); o.setByName("Private", null); s.topDict = o; var c = new i.CFFStrings; c.add("Version 0.11"); c.add("See original notice"); c.add(e); c.add(e); c.add("Medium"); s.strings = c; s.globalSubrIndex = new i.CFFIndex; var l, h, u = t.length, d = [".notdef"]; for (l = 0; l < u; l++) { const e = a[l].glyphName; -1 === i.CFFStandardStrings.indexOf(e) && c.add(e); d.push(e) } s.charset = new i.CFFCharset(!1, 0, d); var f = new i.CFFIndex; f.add([139, 14]); for (l = 0; l < u; l++)f.add(t[l]); s.charStrings = f; var g = new i.CFFPrivateDict; g.setByName("Subrs", null); var m = ["BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StemSnapH", "StemSnapV", "BlueShift", "BlueFuzz", "BlueScale", "LanguageGroup", "ExpansionFactor", "ForceBold", "StdHW", "StdVW"]; for (l = 0, h = m.length; l < h; l++) { var p = m[l]; if (p in n.privateData) { var b = n.privateData[p]; if (Array.isArray(b)) for (var y = b.length - 1; y > 0; y--)b[y] -= b[y - 1]; g.setByName(p, b) } } s.topDict.privateDict = g; var v = new i.CFFIndex; for (l = 0, h = r.length; l < h; l++)v.add(r[l]); g.subrsIndex = v; return new i.CFFCompiler(s).compile() } }; return t }(), T = function () { function e(e, t) { this.properties = t; var a = new i.CFFParser(e, t, !0); this.cff = a.parse(); this.cff.duplicateFirstGlyph(); var n = new i.CFFCompiler(this.cff); this.seacs = this.cff.seacs; try { this.data = n.compile() } catch (a) { (0, r.warn)("Failed to compile font " + t.loadedName); this.data = e } } e.prototype = { get numGlyphs() { return this.cff.charStrings.count }, getCharset: function () { return this.cff.charset.charset }, getGlyphMapping: function () { var e, t, a = this.cff, r = this.properties, i = a.charset.charset; if (r.composite) { e = Object.create(null); let s; if (a.isCIDFont) for (t = 0; t < i.length; t++) { var n = i[t]; s = r.cMap.charCodeOf(n); e[s] = t } else for (t = 0; t < a.charStrings.count; t++) { s = r.cMap.charCodeOf(t); e[s] = t } return e } return e = I(r, a.encoding ? a.encoding.encoding : null, i) }, hasGlyphId: function (e) { return this.cff.hasGlyphId(e) } }; return e }() }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.CFFFDSelect = t.CFFCompiler = t.CFFPrivateDict = t.CFFTopDict = t.CFFCharset = t.CFFIndex = t.CFFStrings = t.CFFHeader = t.CFF = t.CFFParser = t.CFFStandardStrings = void 0; var r = a(2), i = a(29), n = a(30), s = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"]; t.CFFStandardStrings = s; var o = function () { var e = [null, { id: "hstem", min: 2, stackClearing: !0, stem: !0 }, null, { id: "vstem", min: 2, stackClearing: !0, stem: !0 }, { id: "vmoveto", min: 1, stackClearing: !0 }, { id: "rlineto", min: 2, resetStack: !0 }, { id: "hlineto", min: 1, resetStack: !0 }, { id: "vlineto", min: 1, resetStack: !0 }, { id: "rrcurveto", min: 6, resetStack: !0 }, null, { id: "callsubr", min: 1, undefStack: !0 }, { id: "return", min: 0, undefStack: !0 }, null, null, { id: "endchar", min: 0, stackClearing: !0 }, null, null, null, { id: "hstemhm", min: 2, stackClearing: !0, stem: !0 }, { id: "hintmask", min: 0, stackClearing: !0 }, { id: "cntrmask", min: 0, stackClearing: !0 }, { id: "rmoveto", min: 2, stackClearing: !0 }, { id: "hmoveto", min: 1, stackClearing: !0 }, { id: "vstemhm", min: 2, stackClearing: !0, stem: !0 }, { id: "rcurveline", min: 8, resetStack: !0 }, { id: "rlinecurve", min: 8, resetStack: !0 }, { id: "vvcurveto", min: 4, resetStack: !0 }, { id: "hhcurveto", min: 4, resetStack: !0 }, null, { id: "callgsubr", min: 1, undefStack: !0 }, { id: "vhcurveto", min: 4, resetStack: !0 }, { id: "hvcurveto", min: 4, resetStack: !0 }], t = [null, null, null, { id: "and", min: 2, stackDelta: -1 }, { id: "or", min: 2, stackDelta: -1 }, { id: "not", min: 1, stackDelta: 0 }, null, null, null, { id: "abs", min: 1, stackDelta: 0 }, { id: "add", min: 2, stackDelta: -1, stackFn: function (e, t) { e[t - 2] = e[t - 2] + e[t - 1] } }, { id: "sub", min: 2, stackDelta: -1, stackFn: function (e, t) { e[t - 2] = e[t - 2] - e[t - 1] } }, { id: "div", min: 2, stackDelta: -1, stackFn: function (e, t) { e[t - 2] = e[t - 2] / e[t - 1] } }, null, { id: "neg", min: 1, stackDelta: 0, stackFn: function (e, t) { e[t - 1] = -e[t - 1] } }, { id: "eq", min: 2, stackDelta: -1 }, null, null, { id: "drop", min: 1, stackDelta: -1 }, null, { id: "put", min: 2, stackDelta: -2 }, { id: "get", min: 1, stackDelta: 0 }, { id: "ifelse", min: 4, stackDelta: -3 }, { id: "random", min: 0, stackDelta: 1 }, { id: "mul", min: 2, stackDelta: -1, stackFn: function (e, t) { e[t - 2] = e[t - 2] * e[t - 1] } }, null, { id: "sqrt", min: 1, stackDelta: 0 }, { id: "dup", min: 1, stackDelta: 1 }, { id: "exch", min: 2, stackDelta: 0 }, { id: "index", min: 2, stackDelta: 0 }, { id: "roll", min: 3, stackDelta: -2 }, null, null, null, { id: "hflex", min: 7, resetStack: !0 }, { id: "flex", min: 13, resetStack: !0 }, { id: "hflex1", min: 9, resetStack: !0 }, { id: "flex1", min: 11, resetStack: !0 }]; function a(e, t, a) { this.bytes = e.getBytes(); this.properties = t; this.seacAnalysisEnabled = !!a } a.prototype = { parse: function () { var e = this.properties, t = new c; this.cff = t; var a = this.parseHeader(), r = this.parseIndex(a.endPos), i = this.parseIndex(r.endPos), n = this.parseIndex(i.endPos), s = this.parseIndex(n.endPos), o = this.parseDict(i.obj.get(0)), l = this.createDict(f, o, t.strings); t.header = a.obj; t.names = this.parseNameIndex(r.obj); t.strings = this.parseStringIndex(n.obj); t.topDict = l; t.globalSubrIndex = s.obj; this.parsePrivateDict(t.topDict); t.isCIDFont = l.hasName("ROS"); var h = l.getByName("CharStrings"), u = this.parseIndex(h).obj, d = l.getByName("FontMatrix"); d && (e.fontMatrix = d); var g, m, p = l.getByName("FontBBox"); if (p) { e.ascent = Math.max(p[3], p[1]); e.descent = Math.min(p[1], p[3]); e.ascentScaled = !0 } if (t.isCIDFont) { for (var b = this.parseIndex(l.getByName("FDArray")).obj, y = 0, v = b.count; y < v; ++y) { var w = b.get(y), k = this.createDict(f, this.parseDict(w), t.strings); this.parsePrivateDict(k); t.fdArray.push(k) } m = null; g = this.parseCharsets(l.getByName("charset"), u.count, t.strings, !0); t.fdSelect = this.parseFDSelect(l.getByName("FDSelect"), u.count) } else { g = this.parseCharsets(l.getByName("charset"), u.count, t.strings, !1); m = this.parseEncoding(l.getByName("Encoding"), e, t.strings, g.charset) } t.charset = g; t.encoding = m; var S = this.parseCharStrings({ charStrings: u, localSubrIndex: l.privateDict.subrsIndex, globalSubrIndex: s.obj, fdSelect: t.fdSelect, fdArray: t.fdArray, privateDict: l.privateDict }); t.charStrings = S.charStrings; t.seacs = S.seacs; t.widths = S.widths; return t }, parseHeader: function () { for (var e = this.bytes, t = e.length, a = 0; a < t && 1 !== e[a];)++a; if (a >= t) throw new r.FormatError("Invalid CFF header"); if (0 !== a) { (0, r.info)("cff data is shifted"); e = e.subarray(a); this.bytes = e } var i = e[0], n = e[1], s = e[2], o = e[3]; return { obj: new l(i, n, s, o), endPos: s } }, parseDict: function (e) { var t = 0; function a() { var a = e[t++]; if (30 === a) return function () { var a = ""; const r = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"]; var i = e.length; for (; t < i;) { var n = e[t++], s = n >> 4, o = 15 & n; if (15 === s) break; a += r[s]; if (15 === o) break; a += r[o] } return parseFloat(a) }(); if (28 === a) return a = ((a = e[t++]) << 24 | e[t++] << 16) >> 16; if (29 === a) return a = (a = (a = (a = e[t++]) << 8 | e[t++]) << 8 | e[t++]) << 8 | e[t++]; if (a >= 32 && a <= 246) return a - 139; if (a >= 247 && a <= 250) return 256 * (a - 247) + e[t++] + 108; if (a >= 251 && a <= 254) return -256 * (a - 251) - e[t++] - 108; (0, r.warn)('CFFParser_parseDict: "' + a + '" is a reserved command.'); return NaN } var i = [], n = []; t = 0; for (var s = e.length; t < s;) { var o = e[t]; if (o <= 21) { 12 === o && (o = o << 8 | e[++t]); n.push([o, i]); i = []; ++t } else i.push(a()) } return n }, parseIndex: function (e) { var t, a, r = new u, i = this.bytes, n = i[e++] << 8 | i[e++], s = [], o = e; if (0 !== n) { var c = i[e++], l = e + (n + 1) * c - 1; for (t = 0, a = n + 1; t < a; ++t) { for (var h = 0, d = 0; d < c; ++d) { h <<= 8; h += i[e++] } s.push(l + h) } o = s[n] } for (t = 0, a = s.length - 1; t < a; ++t) { var f = s[t], g = s[t + 1]; r.add(i.subarray(f, g)) } return { obj: r, endPos: o } }, parseNameIndex: function (e) { for (var t = [], a = 0, i = e.count; a < i; ++a) { var n = e.get(a); t.push((0, r.bytesToString)(n)) } return t }, parseStringIndex: function (e) { for (var t = new h, a = 0, i = e.count; a < i; ++a) { var n = e.get(a); t.add((0, r.bytesToString)(n)) } return t }, createDict: function (e, t, a) { for (var r = new e(a), i = 0, n = t.length; i < n; ++i) { var s = t[i], o = s[0], c = s[1]; r.setByKey(o, c) } return r }, parseCharString: function (a, i, n, s) { if (!i || a.callDepth > 10) return !1; for (var o = a.stackSize, c = a.stack, l = i.length, h = 0; h < l;) { var u = i[h++], d = null; if (12 === u) { var f = i[h++]; if (0 === f) { i[h - 2] = 139; i[h - 1] = 22; o = 0 } else d = t[f] } else if (28 === u) { c[o] = (i[h] << 24 | i[h + 1] << 16) >> 16; h += 2; o++ } else if (14 === u) { if (o >= 4) { o -= 4; if (this.seacAnalysisEnabled) { a.seac = c.slice(o, o + 4); return !1 } } d = e[u] } else if (u >= 32 && u <= 246) { c[o] = u - 139; o++ } else if (u >= 247 && u <= 254) { c[o] = u < 251 ? (u - 247 << 8) + i[h] + 108 : -(u - 251 << 8) - i[h] - 108; h++; o++ } else if (255 === u) { c[o] = (i[h] << 24 | i[h + 1] << 16 | i[h + 2] << 8 | i[h + 3]) / 65536; h += 4; o++ } else if (19 === u || 20 === u) { a.hints += o >> 1; h += a.hints + 7 >> 3; o %= 2; d = e[u] } else { if (10 === u || 29 === u) { var g; if (!(g = 10 === u ? n : s)) { d = e[u]; (0, r.warn)("Missing subrsIndex for " + d.id); return !1 } var m = 32768; g.count < 1240 ? m = 107 : g.count < 33900 && (m = 1131); var p = c[--o] + m; if (p < 0 || p >= g.count || isNaN(p)) { d = e[u]; (0, r.warn)("Out of bounds subrIndex for " + d.id); return !1 } a.stackSize = o; a.callDepth++; if (!this.parseCharString(a, g.get(p), n, s)) return !1; a.callDepth--; o = a.stackSize; continue } if (11 === u) { a.stackSize = o; return !0 } d = e[u] } if (d) { if (d.stem) { a.hints += o >> 1; if (3 === u || 23 === u) a.hasVStems = !0; else if (a.hasVStems && (1 === u || 18 === u)) { (0, r.warn)("CFF stem hints are in wrong order"); i[h - 1] = 1 === u ? 3 : 23 } } if ("min" in d && !a.undefStack && o < d.min) { (0, r.warn)("Not enough parameters for " + d.id + "; actual: " + o + ", expected: " + d.min); return !1 } if (a.firstStackClearing && d.stackClearing) { a.firstStackClearing = !1; (o -= d.min) >= 2 && d.stem ? o %= 2 : o > 1 && (0, r.warn)("Found too many parameters for stack-clearing command"); o > 0 && c[o - 1] >= 0 && (a.width = c[o - 1]) } if ("stackDelta" in d) { "stackFn" in d && d.stackFn(c, o); o += d.stackDelta } else if (d.stackClearing) o = 0; else if (d.resetStack) { o = 0; a.undefStack = !1 } else if (d.undefStack) { o = 0; a.undefStack = !0; a.firstStackClearing = !1 } } } a.stackSize = o; return !0 }, parseCharStrings({ charStrings: e, localSubrIndex: t, globalSubrIndex: a, fdSelect: i, fdArray: n, privateDict: s }) { for (var o = [], c = [], l = e.count, h = 0; h < l; h++) { var u = e.get(h), d = { callDepth: 0, stackSize: 0, stack: [], undefStack: !0, hints: 0, firstStackClearing: !0, seac: null, width: null, hasVStems: !1 }, f = !0, g = null, m = s; if (i && n.length) { var p = i.getFDIndex(h); if (-1 === p) { (0, r.warn)("Glyph index is not in fd select."); f = !1 } if (p >= n.length) { (0, r.warn)("Invalid fd index for glyph index."); f = !1 } f && (g = (m = n[p].privateDict).subrsIndex) } else t && (g = t); f && (f = this.parseCharString(d, u, g, a)); if (null !== d.width) { const e = m.getByName("nominalWidthX"); c[h] = e + d.width } else { const e = m.getByName("defaultWidthX"); c[h] = e } null !== d.seac && (o[h] = d.seac); f || e.set(h, new Uint8Array([14])) } return { charStrings: e, seacs: o, widths: c } }, emptyPrivateDictionary: function (e) { var t = this.createDict(g, [], e.strings); e.setByKey(18, [0, 0]); e.privateDict = t }, parsePrivateDict: function (e) { if (e.hasName("Private")) { var t = e.getByName("Private"); if (Array.isArray(t) && 2 === t.length) { var a = t[0], r = t[1]; if (0 === a || r >= this.bytes.length) this.emptyPrivateDictionary(e); else { var i = r + a, n = this.bytes.subarray(r, i), s = this.parseDict(n), o = this.createDict(g, s, e.strings); e.privateDict = o; if (o.getByName("Subrs")) { var c = o.getByName("Subrs"), l = r + c; if (0 === c || l >= this.bytes.length) this.emptyPrivateDictionary(e); else { var h = this.parseIndex(l); o.subrsIndex = h.obj } } } } else e.removeByName("Private") } else this.emptyPrivateDictionary(e) }, parseCharsets: function (e, t, a, n) { if (0 === e) return new p(!0, m.ISO_ADOBE, i.ISOAdobeCharset); if (1 === e) return new p(!0, m.EXPERT, i.ExpertCharset); if (2 === e) return new p(!0, m.EXPERT_SUBSET, i.ExpertSubsetCharset); var s, o, c, l = this.bytes, h = e, u = l[e++], d = [".notdef"]; t -= 1; switch (u) { case 0: for (c = 0; c < t; c++) { s = l[e++] << 8 | l[e++]; d.push(n ? s : a.get(s)) } break; case 1: for (; d.length <= t;) { s = l[e++] << 8 | l[e++]; o = l[e++]; for (c = 0; c <= o; c++)d.push(n ? s++ : a.get(s++)) } break; case 2: for (; d.length <= t;) { s = l[e++] << 8 | l[e++]; o = l[e++] << 8 | l[e++]; for (c = 0; c <= o; c++)d.push(n ? s++ : a.get(s++)) } break; default: throw new r.FormatError("Unknown charset format") }var f = e, g = l.subarray(h, f); return new p(!1, u, d, g) }, parseEncoding: function (e, t, a, i) { var s, o, c, l = Object.create(null), h = this.bytes, u = !1, d = null; if (0 === e || 1 === e) { u = !0; s = e; var f = e ? n.ExpertEncoding : n.StandardEncoding; for (o = 0, c = i.length; o < c; o++) { var g = f.indexOf(i[o]); -1 !== g && (l[g] = o) } } else { var m = e; switch (127 & (s = h[e++])) { case 0: var p = h[e++]; for (o = 1; o <= p; o++)l[h[e++]] = o; break; case 1: var y = h[e++], v = 1; for (o = 0; o < y; o++)for (var w = h[e++], k = h[e++], S = w; S <= w + k; S++)l[S] = v++; break; default: throw new r.FormatError(`Unknown encoding format: ${s} in CFF`) }var C = e; if (128 & s) { h[m] &= 127; !function () { var t = h[e++]; for (o = 0; o < t; o++) { var r = h[e++], n = (h[e++] << 8) + (255 & h[e++]); l[r] = i.indexOf(a.get(n)) } }() } d = h.subarray(m, C) } return new b(u, s &= 127, l, d) }, parseFDSelect: function (e, t) { var a, i = this.bytes, n = i[e++], s = []; switch (n) { case 0: for (a = 0; a < t; ++a) { var o = i[e++]; s.push(o) } break; case 3: var c = i[e++] << 8 | i[e++]; for (a = 0; a < c; ++a) { var l = i[e++] << 8 | i[e++]; if (0 === a && 0 !== l) { (0, r.warn)("parseFDSelect: The first range must have a first GID of 0 -- trying to recover."); l = 0 } for (var h = i[e++], u = i[e] << 8 | i[e + 1], d = l; d < u; ++d)s.push(h) } e += 2; break; default: throw new r.FormatError(`parseFDSelect: Unknown format "${n}".`) }if (s.length !== t) throw new r.FormatError("parseFDSelect: Invalid font data."); return new y(n, s) } }; return a }(); t.CFFParser = o; var c = function () { function e() { this.header = null; this.names = []; this.topDict = null; this.strings = new h; this.globalSubrIndex = null; this.encoding = null; this.charset = null; this.charStrings = null; this.fdArray = []; this.fdSelect = null; this.isCIDFont = !1 } e.prototype = { duplicateFirstGlyph: function () { if (this.charStrings.count >= 65535) (0, r.warn)("Not enough space in charstrings to duplicate first glyph."); else { var e = this.charStrings.get(0); this.charStrings.add(e); this.isCIDFont && this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]) } }, hasGlyphId: function (e) { return !(e < 0 || e >= this.charStrings.count) && this.charStrings.get(e).length > 0 } }; return e }(); t.CFF = c; var l = function (e, t, a, r) { this.major = e; this.minor = t; this.hdrSize = a; this.offSize = r }; t.CFFHeader = l; var h = function () { function e() { this.strings = [] } e.prototype = { get: function (e) { return e >= 0 && e <= 390 ? s[e] : e - 391 <= this.strings.length ? this.strings[e - 391] : s[0] }, getSID: function (e) { let t = s.indexOf(e); if (-1 !== t) return t; t = this.strings.indexOf(e); return -1 !== t ? t + 391 : -1 }, add: function (e) { this.strings.push(e) }, get count() { return this.strings.length } }; return e }(); t.CFFStrings = h; var u = function () { function e() { this.objects = []; this.length = 0 } e.prototype = { add: function (e) { this.length += e.length; this.objects.push(e) }, set: function (e, t) { this.length += t.length - this.objects[e].length; this.objects[e] = t }, get: function (e) { return this.objects[e] }, get count() { return this.objects.length } }; return e }(); t.CFFIndex = u; var d = function () { function e(e, t) { this.keyToNameMap = e.keyToNameMap; this.nameToKeyMap = e.nameToKeyMap; this.defaults = e.defaults; this.types = e.types; this.opcodes = e.opcodes; this.order = e.order; this.strings = t; this.values = Object.create(null) } e.prototype = { setByKey: function (e, t) { if (!(e in this.keyToNameMap)) return !1; var a = t.length; if (0 === a) return !0; for (var i = 0; i < a; i++)if (isNaN(t[i])) { (0, r.warn)('Invalid CFFDict value: "' + t + '" for key "' + e + '".'); return !0 } var n = this.types[e]; "num" !== n && "sid" !== n && "offset" !== n || (t = t[0]); this.values[e] = t; return !0 }, setByName: function (e, t) { if (!(e in this.nameToKeyMap)) throw new r.FormatError(`Invalid dictionary name "${e}"`); this.values[this.nameToKeyMap[e]] = t }, hasName: function (e) { return this.nameToKeyMap[e] in this.values }, getByName: function (e) { if (!(e in this.nameToKeyMap)) throw new r.FormatError(`Invalid dictionary name ${e}"`); var t = this.nameToKeyMap[e]; return t in this.values ? this.values[t] : this.defaults[t] }, removeByName: function (e) { delete this.values[this.nameToKeyMap[e]] } }; e.createTables = function (e) { for (var t = { keyToNameMap: {}, nameToKeyMap: {}, defaults: {}, types: {}, opcodes: {}, order: [] }, a = 0, r = e.length; a < r; ++a) { var i = e[a], n = Array.isArray(i[0]) ? (i[0][0] << 8) + i[0][1] : i[0]; t.keyToNameMap[n] = i[1]; t.nameToKeyMap[i[1]] = n; t.types[n] = i[2]; t.defaults[n] = i[3]; t.opcodes[n] = Array.isArray(i[0]) ? i[0] : [i[0]]; t.order.push(n) } return t }; return e }(), f = function () { var e = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [.001, 0, 0, .001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]], t = null; function a(a) { null === t && (t = d.createTables(e)); d.call(this, t, a); this.privateDict = null } a.prototype = Object.create(d.prototype); return a }(); t.CFFTopDict = f; var g = function () { var e = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", .039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", .06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]], t = null; function a(a) { null === t && (t = d.createTables(e)); d.call(this, t, a); this.subrsIndex = null } a.prototype = Object.create(d.prototype); return a }(); t.CFFPrivateDict = g; var m = { ISO_ADOBE: 0, EXPERT: 1, EXPERT_SUBSET: 2 }, p = function (e, t, a, r) { this.predefined = e; this.format = t; this.charset = a; this.raw = r }; t.CFFCharset = p; var b = function (e, t, a, r) { this.predefined = e; this.format = t; this.encoding = a; this.raw = r }, y = function () { function e(e, t) { this.format = e; this.fdSelect = t } e.prototype = { getFDIndex: function (e) { return e < 0 || e >= this.fdSelect.length ? -1 : this.fdSelect[e] } }; return e }(); t.CFFFDSelect = y; var v = function () { function e() { this.offsets = Object.create(null) } e.prototype = { isTracking: function (e) { return e in this.offsets }, track: function (e, t) { if (e in this.offsets) throw new r.FormatError(`Already tracking location of ${e}`); this.offsets[e] = t }, offset: function (e) { for (var t in this.offsets) this.offsets[t] += e }, setEntryLocation: function (e, t, a) { if (!(e in this.offsets)) throw new r.FormatError(`Not tracking location of ${e}`); for (var i = a.data, n = this.offsets[e], s = 0, o = t.length; s < o; ++s) { var c = 5 * s + n, l = c + 1, h = c + 2, u = c + 3, d = c + 4; if (29 !== i[c] || 0 !== i[l] || 0 !== i[h] || 0 !== i[u] || 0 !== i[d]) throw new r.FormatError("writing to an offset that is not empty"); var f = t[s]; i[c] = 29; i[l] = f >> 24 & 255; i[h] = f >> 16 & 255; i[u] = f >> 8 & 255; i[d] = 255 & f } } }; return e }(), w = function () { function e(e) { this.cff = e } e.prototype = { compile: function () { var e = this.cff, t = { data: [], length: 0, add: function (e) { this.data = this.data.concat(e); this.length = this.data.length } }, a = this.compileHeader(e.header); t.add(a); var i = this.compileNameIndex(e.names); t.add(i); if (e.isCIDFont && e.topDict.hasName("FontMatrix")) { var n = e.topDict.getByName("FontMatrix"); e.topDict.removeByName("FontMatrix"); for (var s = 0, o = e.fdArray.length; s < o; s++) { var c = e.fdArray[s], l = n.slice(0); c.hasName("FontMatrix") && (l = r.Util.transform(l, c.getByName("FontMatrix"))); c.setByName("FontMatrix", l) } } e.topDict.setByName("charset", 0); var h = this.compileTopDicts([e.topDict], t.length, e.isCIDFont); t.add(h.output); var u = h.trackers[0], d = this.compileStringIndex(e.strings.strings); t.add(d); var f = this.compileIndex(e.globalSubrIndex); t.add(f); if (e.encoding && e.topDict.hasName("Encoding")) if (e.encoding.predefined) u.setEntryLocation("Encoding", [e.encoding.format], t); else { var g = this.compileEncoding(e.encoding); u.setEntryLocation("Encoding", [t.length], t); t.add(g) } var m = this.compileCharset(e.charset, e.charStrings.count, e.strings, e.isCIDFont); u.setEntryLocation("charset", [t.length], t); t.add(m); var p = this.compileCharStrings(e.charStrings); u.setEntryLocation("CharStrings", [t.length], t); t.add(p); if (e.isCIDFont) { u.setEntryLocation("FDSelect", [t.length], t); var b = this.compileFDSelect(e.fdSelect); t.add(b); h = this.compileTopDicts(e.fdArray, t.length, !0); u.setEntryLocation("FDArray", [t.length], t); t.add(h.output); var y = h.trackers; this.compilePrivateDicts(e.fdArray, y, t) } this.compilePrivateDicts([e.topDict], [u], t); t.add([0]); return t.data }, encodeNumber: function (e) { return parseFloat(e) !== parseInt(e, 10) || isNaN(e) ? this.encodeFloat(e) : this.encodeInteger(e) }, encodeFloat: function (e) { var t = e.toString(), a = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(t); if (a) { var r = parseFloat("1e" + ((a[2] ? +a[2] : 0) + a[1].length)); t = (Math.round(e * r) / r).toString() } var i, n, s = ""; for (i = 0, n = t.length; i < n; ++i) { var o = t[i]; s += "e" === o ? "-" === t[++i] ? "c" : "b" : "." === o ? "a" : "-" === o ? "e" : o } var c = [30]; for (i = 0, n = (s += 1 & s.length ? "f" : "ff").length; i < n; i += 2)c.push(parseInt(s.substring(i, i + 2), 16)); return c }, encodeInteger: function (e) { return e >= -107 && e <= 107 ? [e + 139] : e >= 108 && e <= 1131 ? [247 + ((e -= 108) >> 8), 255 & e] : e >= -1131 && e <= -108 ? [251 + ((e = -e - 108) >> 8), 255 & e] : e >= -32768 && e <= 32767 ? [28, e >> 8 & 255, 255 & e] : [29, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e] }, compileHeader: function (e) { return [e.major, e.minor, e.hdrSize, e.offSize] }, compileNameIndex: function (e) { for (var t = new u, a = 0, i = e.length; a < i; ++a) { for (var n = e[a], s = Math.min(n.length, 127), o = new Array(s), c = 0; c < s; c++) { var l = n[c]; (l < "!" || l > "~" || "[" === l || "]" === l || "(" === l || ")" === l || "{" === l || "}" === l || "<" === l || ">" === l || "/" === l || "%" === l) && (l = "_"); o[c] = l } "" === (o = o.join("")) && (o = "Bad_Font_Name"); t.add((0, r.stringToBytes)(o)) } return this.compileIndex(t) }, compileTopDicts: function (e, t, a) { for (var r = [], i = new u, n = 0, s = e.length; n < s; ++n) { var o = e[n]; if (a) { o.removeByName("CIDFontVersion"); o.removeByName("CIDFontRevision"); o.removeByName("CIDFontType"); o.removeByName("CIDCount"); o.removeByName("UIDBase") } var c = new v, l = this.compileDict(o, c); r.push(c); i.add(l); c.offset(t) } return { trackers: r, output: i = this.compileIndex(i, r) } }, compilePrivateDicts: function (e, t, a) { for (var i = 0, n = e.length; i < n; ++i) { var s = e[i], o = s.privateDict; if (!o || !s.hasName("Private")) throw new r.FormatError("There must be a private dictionary."); var c = new v, l = this.compileDict(o, c), h = a.length; c.offset(h); l.length || (h = 0); t[i].setEntryLocation("Private", [l.length, h], a); a.add(l); if (o.subrsIndex && o.hasName("Subrs")) { var u = this.compileIndex(o.subrsIndex); c.setEntryLocation("Subrs", [l.length], a); a.add(u) } } }, compileDict: function (e, t) { for (var a = [], i = e.order, n = 0; n < i.length; ++n) { var s = i[n]; if (s in e.values) { var o = e.values[s], c = e.types[s]; Array.isArray(c) || (c = [c]); Array.isArray(o) || (o = [o]); if (0 !== o.length) { for (var l = 0, h = c.length; l < h; ++l) { var u = c[l], d = o[l]; switch (u) { case "num": case "sid": a = a.concat(this.encodeNumber(d)); break; case "offset": var f = e.keyToNameMap[s]; t.isTracking(f) || t.track(f, a.length); a = a.concat([29, 0, 0, 0, 0]); break; case "array": case "delta": a = a.concat(this.encodeNumber(d)); for (var g = 1, m = o.length; g < m; ++g)a = a.concat(this.encodeNumber(o[g])); break; default: throw new r.FormatError(`Unknown data type of ${u}`) } } a = a.concat(e.opcodes[s]) } } } return a }, compileStringIndex: function (e) { for (var t = new u, a = 0, i = e.length; a < i; ++a)t.add((0, r.stringToBytes)(e[a])); return this.compileIndex(t) }, compileGlobalSubrIndex: function () { var e = this.cff.globalSubrIndex; this.out.writeByteArray(this.compileIndex(e)) }, compileCharStrings: function (e) { for (var t = new u, a = 0; a < e.count; a++) { var r = e.get(a); 0 !== r.length ? t.add(r) : t.add(new Uint8Array([139, 14])) } return this.compileIndex(t) }, compileCharset: function (e, t, a, i) { let n; const s = t - 1; if (i) n = new Uint8Array([2, 0, 0, s >> 8 & 255, 255 & s]); else { n = new Uint8Array(1 + 2 * s); n[0] = 0; let t = 0; const i = e.charset.length; let o = !1; for (let s = 1; s < n.length; s += 2) { let c = 0; if (t < i) { const i = e.charset[t++]; c = a.getSID(i); if (-1 === c) { c = 0; if (!o) { o = !0; (0, r.warn)(`Couldn't find ${i} in CFF strings`) } } } n[s] = c >> 8 & 255; n[s + 1] = 255 & c } } return this.compileTypedArray(n) }, compileEncoding: function (e) { return this.compileTypedArray(e.raw) }, compileFDSelect: function (e) { const t = e.format; let a, r; switch (t) { case 0: a = new Uint8Array(1 + e.fdSelect.length); a[0] = t; for (r = 0; r < e.fdSelect.length; r++)a[r + 1] = e.fdSelect[r]; break; case 3: const i = 0; let n = e.fdSelect[0]; const s = [t, 0, 0, i >> 8 & 255, 255 & i, n]; for (r = 1; r < e.fdSelect.length; r++) { const t = e.fdSelect[r]; if (t !== n) { s.push(r >> 8 & 255, 255 & r, t); n = t } } const o = (s.length - 3) / 3; s[1] = o >> 8 & 255; s[2] = 255 & o; s.push(r >> 8 & 255, 255 & r); a = new Uint8Array(s) }return this.compileTypedArray(a) }, compileTypedArray: function (e) { for (var t = [], a = 0, r = e.length; a < r; ++a)t[a] = e[a]; return t }, compileIndex: function (e, t) { t = t || []; var a = e.objects, r = a.length; if (0 === r) return [0, 0, 0]; var i, n, s = [r >> 8 & 255, 255 & r], o = 1; for (i = 0; i < r; ++i)o += a[i].length; n = o < 256 ? 1 : o < 65536 ? 2 : o < 16777216 ? 3 : 4; s.push(n); var c = 1; for (i = 0; i < r + 1; i++) { 1 === n ? s.push(255 & c) : 2 === n ? s.push(c >> 8 & 255, 255 & c) : 3 === n ? s.push(c >> 16 & 255, c >> 8 & 255, 255 & c) : s.push(c >>> 24 & 255, c >> 16 & 255, c >> 8 & 255, 255 & c); a[i] && (c += a[i].length) } for (i = 0; i < r; i++) { t[i] && t[i].offset(s.length); for (var l = 0, h = a[i].length; l < h; l++)s.push(a[i][l]) } return s } }; return e }(); t.CFFCompiler = w }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.ExpertSubsetCharset = t.ExpertCharset = t.ISOAdobeCharset = void 0; t.ISOAdobeCharset = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron"]; t.ExpertCharset = [".notdef", "space", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; t.ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperior", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "hyphensuperior", "colonmonetary", "onefitted", "rupiah", "centoldstyle", "figuredash", "hypheninferior", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior"] }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.getEncoding = function (e) { switch (e) { case "WinAnsiEncoding": return o; case "StandardEncoding": return s; case "MacRomanEncoding": return n; case "SymbolSetEncoding": return c; case "ZapfDingbatsEncoding": return l; case "ExpertEncoding": return r; case "MacExpertEncoding": return i; default: return null } }; t.ExpertEncoding = t.ZapfDingbatsEncoding = t.SymbolSetEncoding = t.MacRomanEncoding = t.StandardEncoding = t.WinAnsiEncoding = void 0; const r = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "", "", "", "isuperior", "", "", "lsuperior", "msuperior", "nsuperior", "osuperior", "", "", "rsuperior", "ssuperior", "tsuperior", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdownsmall", "centoldstyle", "Lslashsmall", "", "", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "", "Dotaccentsmall", "", "", "Macronsmall", "", "", "figuredash", "hypheninferior", "", "", "Ogoneksmall", "Ringsmall", "Cedillasmall", "", "", "", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; t.ExpertEncoding = r; const i = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "", "threequartersemdash", "", "questionsmall", "", "", "", "", "Ethsmall", "", "", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "", "", "", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hypheninferior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "asuperior", "centsuperior", "", "", "", "", "Aacutesmall", "Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", "Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall", "Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", "Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall", "Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", "Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", "", "eightsuperior", "fourinferior", "threeinferior", "sixinferior", "eightinferior", "seveninferior", "Scaronsmall", "", "centinferior", "twoinferior", "", "Dieresissmall", "", "Caronsmall", "osuperior", "fiveinferior", "", "commainferior", "periodinferior", "Yacutesmall", "", "dollarinferior", "", "", "Thornsmall", "", "nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall", "questiondownsmall", "oneinferior", "Lslashsmall", "", "", "", "", "", "", "Cedillasmall", "", "", "", "", "", "OEsmall", "figuredash", "hyphensuperior", "", "", "", "", "exclamdownsmall", "", "Ydieresissmall", "", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "ninesuperior", "zerosuperior", "", "esuperior", "rsuperior", "tsuperior", "", "", "isuperior", "ssuperior", "dsuperior", "", "", "", "", "", "lsuperior", "Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", "msuperior", "commasuperior", "periodsuperior", "Dotaccentsmall", "Ringsmall", "", "", "", ""], n = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "space", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron"]; t.MacRomanEncoding = n; const s = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "", "endash", "dagger", "daggerdbl", "periodcentered", "", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "", "questiondown", "", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "", "ring", "cedilla", "", "hungarumlaut", "ogonek", "caron", "emdash", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AE", "", "ordfeminine", "", "", "", "", "Lslash", "Oslash", "OE", "ordmasculine", "", "", "", "", "", "ae", "", "", "", "dotlessi", "", "", "lslash", "oslash", "oe", "germandbls", "", "", "", ""]; t.StandardEncoding = s; const o = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "bullet", "Euro", "bullet", "quotesinglbase", "florin", "quotedblbase", "ellipsis", "dagger", "daggerdbl", "circumflex", "perthousand", "Scaron", "guilsinglleft", "OE", "bullet", "Zcaron", "bullet", "bullet", "quoteleft", "quoteright", "quotedblleft", "quotedblright", "bullet", "endash", "emdash", "tilde", "trademark", "scaron", "guilsinglright", "oe", "bullet", "zcaron", "Ydieresis", "space", "exclamdown", "cent", "sterling", "currency", "yen", "brokenbar", "section", "dieresis", "copyright", "ordfeminine", "guillemotleft", "logicalnot", "hyphen", "registered", "macron", "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu", "paragraph", "periodcentered", "cedilla", "onesuperior", "ordmasculine", "guillemotright", "onequarter", "onehalf", "threequarters", "questiondown", "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", "Ccedilla", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex", "Idieresis", "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply", "Oslash", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls", "agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae", "ccedilla", "egrave", "eacute", "ecircumflex", "edieresis", "igrave", "iacute", "icircumflex", "idieresis", "eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", "divide", "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn", "ydieresis"]; t.WinAnsiEncoding = o; const c = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "universal", "numbersign", "existential", "percent", "ampersand", "suchthat", "parenleft", "parenright", "asteriskmath", "plus", "comma", "minus", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "congruent", "Alpha", "Beta", "Chi", "Delta", "Epsilon", "Phi", "Gamma", "Eta", "Iota", "theta1", "Kappa", "Lambda", "Mu", "Nu", "Omicron", "Pi", "Theta", "Rho", "Sigma", "Tau", "Upsilon", "sigma1", "Omega", "Xi", "Psi", "Zeta", "bracketleft", "therefore", "bracketright", "perpendicular", "underscore", "radicalex", "alpha", "beta", "chi", "delta", "epsilon", "phi", "gamma", "eta", "iota", "phi1", "kappa", "lambda", "mu", "nu", "omicron", "pi", "theta", "rho", "sigma", "tau", "upsilon", "omega1", "omega", "xi", "psi", "zeta", "braceleft", "bar", "braceright", "similar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Euro", "Upsilon1", "minute", "lessequal", "fraction", "infinity", "florin", "club", "diamond", "heart", "spade", "arrowboth", "arrowleft", "arrowup", "arrowright", "arrowdown", "degree", "plusminus", "second", "greaterequal", "multiply", "proportional", "partialdiff", "bullet", "divide", "notequal", "equivalence", "approxequal", "ellipsis", "arrowvertex", "arrowhorizex", "carriagereturn", "aleph", "Ifraktur", "Rfraktur", "weierstrass", "circlemultiply", "circleplus", "emptyset", "intersection", "union", "propersuperset", "reflexsuperset", "notsubset", "propersubset", "reflexsubset", "element", "notelement", "angle", "gradient", "registerserif", "copyrightserif", "trademarkserif", "product", "radical", "dotmath", "logicalnot", "logicaland", "logicalor", "arrowdblboth", "arrowdblleft", "arrowdblup", "arrowdblright", "arrowdbldown", "lozenge", "angleleft", "registersans", "copyrightsans", "trademarksans", "summation", "parenlefttp", "parenleftex", "parenleftbt", "bracketlefttp", "bracketleftex", "bracketleftbt", "bracelefttp", "braceleftmid", "braceleftbt", "braceex", "", "angleright", "integral", "integraltp", "integralex", "integralbt", "parenrighttp", "parenrightex", "parenrightbt", "bracketrighttp", "bracketrightex", "bracketrightbt", "bracerighttp", "bracerightmid", "bracerightbt", ""]; t.SymbolSetEncoding = c; const l = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119", "a118", "a117", "a11", "a12", "a13", "a14", "a15", "a16", "a105", "a17", "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a6", "a7", "a8", "a9", "a10", "a29", "a30", "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50", "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58", "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74", "a203", "a75", "a204", "a76", "a77", "a78", "a79", "a81", "a82", "a83", "a84", "a97", "a98", "a99", "a100", "", "a89", "a90", "a93", "a94", "a91", "a92", "a205", "a85", "a206", "a86", "a87", "a88", "a95", "a96", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "a101", "a102", "a103", "a104", "a106", "a107", "a108", "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123", "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131", "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139", "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147", "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155", "a156", "a157", "a158", "a159", "a160", "a161", "a163", "a164", "a196", "a165", "a192", "a166", "a167", "a168", "a169", "a170", "a171", "a172", "a173", "a162", "a174", "a175", "a176", "a177", "a178", "a179", "a193", "a180", "a199", "a181", "a200", "a182", "", "a201", "a183", "a184", "a197", "a185", "a194", "a198", "a186", "a195", "a187", "a188", "a189", "a190", "a191", ""]; t.ZapfDingbatsEncoding = l }, function (e, t, a) { var r = a(7).getLookupTableFactory, i = r((function (e) { e.A = 65; e.AE = 198; e.AEacute = 508; e.AEmacron = 482; e.AEsmall = 63462; e.Aacute = 193; e.Aacutesmall = 63457; e.Abreve = 258; e.Abreveacute = 7854; e.Abrevecyrillic = 1232; e.Abrevedotbelow = 7862; e.Abrevegrave = 7856; e.Abrevehookabove = 7858; e.Abrevetilde = 7860; e.Acaron = 461; e.Acircle = 9398; e.Acircumflex = 194; e.Acircumflexacute = 7844; e.Acircumflexdotbelow = 7852; e.Acircumflexgrave = 7846; e.Acircumflexhookabove = 7848; e.Acircumflexsmall = 63458; e.Acircumflextilde = 7850; e.Acute = 63177; e.Acutesmall = 63412; e.Acyrillic = 1040; e.Adblgrave = 512; e.Adieresis = 196; e.Adieresiscyrillic = 1234; e.Adieresismacron = 478; e.Adieresissmall = 63460; e.Adotbelow = 7840; e.Adotmacron = 480; e.Agrave = 192; e.Agravesmall = 63456; e.Ahookabove = 7842; e.Aiecyrillic = 1236; e.Ainvertedbreve = 514; e.Alpha = 913; e.Alphatonos = 902; e.Amacron = 256; e.Amonospace = 65313; e.Aogonek = 260; e.Aring = 197; e.Aringacute = 506; e.Aringbelow = 7680; e.Aringsmall = 63461; e.Asmall = 63329; e.Atilde = 195; e.Atildesmall = 63459; e.Aybarmenian = 1329; e.B = 66; e.Bcircle = 9399; e.Bdotaccent = 7682; e.Bdotbelow = 7684; e.Becyrillic = 1041; e.Benarmenian = 1330; e.Beta = 914; e.Bhook = 385; e.Blinebelow = 7686; e.Bmonospace = 65314; e.Brevesmall = 63220; e.Bsmall = 63330; e.Btopbar = 386; e.C = 67; e.Caarmenian = 1342; e.Cacute = 262; e.Caron = 63178; e.Caronsmall = 63221; e.Ccaron = 268; e.Ccedilla = 199; e.Ccedillaacute = 7688; e.Ccedillasmall = 63463; e.Ccircle = 9400; e.Ccircumflex = 264; e.Cdot = 266; e.Cdotaccent = 266; e.Cedillasmall = 63416; e.Chaarmenian = 1353; e.Cheabkhasiancyrillic = 1212; e.Checyrillic = 1063; e.Chedescenderabkhasiancyrillic = 1214; e.Chedescendercyrillic = 1206; e.Chedieresiscyrillic = 1268; e.Cheharmenian = 1347; e.Chekhakassiancyrillic = 1227; e.Cheverticalstrokecyrillic = 1208; e.Chi = 935; e.Chook = 391; e.Circumflexsmall = 63222; e.Cmonospace = 65315; e.Coarmenian = 1361; e.Csmall = 63331; e.D = 68; e.DZ = 497; e.DZcaron = 452; e.Daarmenian = 1332; e.Dafrican = 393; e.Dcaron = 270; e.Dcedilla = 7696; e.Dcircle = 9401; e.Dcircumflexbelow = 7698; e.Dcroat = 272; e.Ddotaccent = 7690; e.Ddotbelow = 7692; e.Decyrillic = 1044; e.Deicoptic = 1006; e.Delta = 8710; e.Deltagreek = 916; e.Dhook = 394; e.Dieresis = 63179; e.DieresisAcute = 63180; e.DieresisGrave = 63181; e.Dieresissmall = 63400; e.Digammagreek = 988; e.Djecyrillic = 1026; e.Dlinebelow = 7694; e.Dmonospace = 65316; e.Dotaccentsmall = 63223; e.Dslash = 272; e.Dsmall = 63332; e.Dtopbar = 395; e.Dz = 498; e.Dzcaron = 453; e.Dzeabkhasiancyrillic = 1248; e.Dzecyrillic = 1029; e.Dzhecyrillic = 1039; e.E = 69; e.Eacute = 201; e.Eacutesmall = 63465; e.Ebreve = 276; e.Ecaron = 282; e.Ecedillabreve = 7708; e.Echarmenian = 1333; e.Ecircle = 9402; e.Ecircumflex = 202; e.Ecircumflexacute = 7870; e.Ecircumflexbelow = 7704; e.Ecircumflexdotbelow = 7878; e.Ecircumflexgrave = 7872; e.Ecircumflexhookabove = 7874; e.Ecircumflexsmall = 63466; e.Ecircumflextilde = 7876; e.Ecyrillic = 1028; e.Edblgrave = 516; e.Edieresis = 203; e.Edieresissmall = 63467; e.Edot = 278; e.Edotaccent = 278; e.Edotbelow = 7864; e.Efcyrillic = 1060; e.Egrave = 200; e.Egravesmall = 63464; e.Eharmenian = 1335; e.Ehookabove = 7866; e.Eightroman = 8551; e.Einvertedbreve = 518; e.Eiotifiedcyrillic = 1124; e.Elcyrillic = 1051; e.Elevenroman = 8554; e.Emacron = 274; e.Emacronacute = 7702; e.Emacrongrave = 7700; e.Emcyrillic = 1052; e.Emonospace = 65317; e.Encyrillic = 1053; e.Endescendercyrillic = 1186; e.Eng = 330; e.Enghecyrillic = 1188; e.Enhookcyrillic = 1223; e.Eogonek = 280; e.Eopen = 400; e.Epsilon = 917; e.Epsilontonos = 904; e.Ercyrillic = 1056; e.Ereversed = 398; e.Ereversedcyrillic = 1069; e.Escyrillic = 1057; e.Esdescendercyrillic = 1194; e.Esh = 425; e.Esmall = 63333; e.Eta = 919; e.Etarmenian = 1336; e.Etatonos = 905; e.Eth = 208; e.Ethsmall = 63472; e.Etilde = 7868; e.Etildebelow = 7706; e.Euro = 8364; e.Ezh = 439; e.Ezhcaron = 494; e.Ezhreversed = 440; e.F = 70; e.Fcircle = 9403; e.Fdotaccent = 7710; e.Feharmenian = 1366; e.Feicoptic = 996; e.Fhook = 401; e.Fitacyrillic = 1138; e.Fiveroman = 8548; e.Fmonospace = 65318; e.Fourroman = 8547; e.Fsmall = 63334; e.G = 71; e.GBsquare = 13191; e.Gacute = 500; e.Gamma = 915; e.Gammaafrican = 404; e.Gangiacoptic = 1002; e.Gbreve = 286; e.Gcaron = 486; e.Gcedilla = 290; e.Gcircle = 9404; e.Gcircumflex = 284; e.Gcommaaccent = 290; e.Gdot = 288; e.Gdotaccent = 288; e.Gecyrillic = 1043; e.Ghadarmenian = 1346; e.Ghemiddlehookcyrillic = 1172; e.Ghestrokecyrillic = 1170; e.Gheupturncyrillic = 1168; e.Ghook = 403; e.Gimarmenian = 1331; e.Gjecyrillic = 1027; e.Gmacron = 7712; e.Gmonospace = 65319; e.Grave = 63182; e.Gravesmall = 63328; e.Gsmall = 63335; e.Gsmallhook = 667; e.Gstroke = 484; e.H = 72; e.H18533 = 9679; e.H18543 = 9642; e.H18551 = 9643; e.H22073 = 9633; e.HPsquare = 13259; e.Haabkhasiancyrillic = 1192; e.Hadescendercyrillic = 1202; e.Hardsigncyrillic = 1066; e.Hbar = 294; e.Hbrevebelow = 7722; e.Hcedilla = 7720; e.Hcircle = 9405; e.Hcircumflex = 292; e.Hdieresis = 7718; e.Hdotaccent = 7714; e.Hdotbelow = 7716; e.Hmonospace = 65320; e.Hoarmenian = 1344; e.Horicoptic = 1e3; e.Hsmall = 63336; e.Hungarumlaut = 63183; e.Hungarumlautsmall = 63224; e.Hzsquare = 13200; e.I = 73; e.IAcyrillic = 1071; e.IJ = 306; e.IUcyrillic = 1070; e.Iacute = 205; e.Iacutesmall = 63469; e.Ibreve = 300; e.Icaron = 463; e.Icircle = 9406; e.Icircumflex = 206; e.Icircumflexsmall = 63470; e.Icyrillic = 1030; e.Idblgrave = 520; e.Idieresis = 207; e.Idieresisacute = 7726; e.Idieresiscyrillic = 1252; e.Idieresissmall = 63471; e.Idot = 304; e.Idotaccent = 304; e.Idotbelow = 7882; e.Iebrevecyrillic = 1238; e.Iecyrillic = 1045; e.Ifraktur = 8465; e.Igrave = 204; e.Igravesmall = 63468; e.Ihookabove = 7880; e.Iicyrillic = 1048; e.Iinvertedbreve = 522; e.Iishortcyrillic = 1049; e.Imacron = 298; e.Imacroncyrillic = 1250; e.Imonospace = 65321; e.Iniarmenian = 1339; e.Iocyrillic = 1025; e.Iogonek = 302; e.Iota = 921; e.Iotaafrican = 406; e.Iotadieresis = 938; e.Iotatonos = 906; e.Ismall = 63337; e.Istroke = 407; e.Itilde = 296; e.Itildebelow = 7724; e.Izhitsacyrillic = 1140; e.Izhitsadblgravecyrillic = 1142; e.J = 74; e.Jaarmenian = 1345; e.Jcircle = 9407; e.Jcircumflex = 308; e.Jecyrillic = 1032; e.Jheharmenian = 1355; e.Jmonospace = 65322; e.Jsmall = 63338; e.K = 75; e.KBsquare = 13189; e.KKsquare = 13261; e.Kabashkircyrillic = 1184; e.Kacute = 7728; e.Kacyrillic = 1050; e.Kadescendercyrillic = 1178; e.Kahookcyrillic = 1219; e.Kappa = 922; e.Kastrokecyrillic = 1182; e.Kaverticalstrokecyrillic = 1180; e.Kcaron = 488; e.Kcedilla = 310; e.Kcircle = 9408; e.Kcommaaccent = 310; e.Kdotbelow = 7730; e.Keharmenian = 1364; e.Kenarmenian = 1343; e.Khacyrillic = 1061; e.Kheicoptic = 998; e.Khook = 408; e.Kjecyrillic = 1036; e.Klinebelow = 7732; e.Kmonospace = 65323; e.Koppacyrillic = 1152; e.Koppagreek = 990; e.Ksicyrillic = 1134; e.Ksmall = 63339; e.L = 76; e.LJ = 455; e.LL = 63167; e.Lacute = 313; e.Lambda = 923; e.Lcaron = 317; e.Lcedilla = 315; e.Lcircle = 9409; e.Lcircumflexbelow = 7740; e.Lcommaaccent = 315; e.Ldot = 319; e.Ldotaccent = 319; e.Ldotbelow = 7734; e.Ldotbelowmacron = 7736; e.Liwnarmenian = 1340; e.Lj = 456; e.Ljecyrillic = 1033; e.Llinebelow = 7738; e.Lmonospace = 65324; e.Lslash = 321; e.Lslashsmall = 63225; e.Lsmall = 63340; e.M = 77; e.MBsquare = 13190; e.Macron = 63184; e.Macronsmall = 63407; e.Macute = 7742; e.Mcircle = 9410; e.Mdotaccent = 7744; e.Mdotbelow = 7746; e.Menarmenian = 1348; e.Mmonospace = 65325; e.Msmall = 63341; e.Mturned = 412; e.Mu = 924; e.N = 78; e.NJ = 458; e.Nacute = 323; e.Ncaron = 327; e.Ncedilla = 325; e.Ncircle = 9411; e.Ncircumflexbelow = 7754; e.Ncommaaccent = 325; e.Ndotaccent = 7748; e.Ndotbelow = 7750; e.Nhookleft = 413; e.Nineroman = 8552; e.Nj = 459; e.Njecyrillic = 1034; e.Nlinebelow = 7752; e.Nmonospace = 65326; e.Nowarmenian = 1350; e.Nsmall = 63342; e.Ntilde = 209; e.Ntildesmall = 63473; e.Nu = 925; e.O = 79; e.OE = 338; e.OEsmall = 63226; e.Oacute = 211; e.Oacutesmall = 63475; e.Obarredcyrillic = 1256; e.Obarreddieresiscyrillic = 1258; e.Obreve = 334; e.Ocaron = 465; e.Ocenteredtilde = 415; e.Ocircle = 9412; e.Ocircumflex = 212; e.Ocircumflexacute = 7888; e.Ocircumflexdotbelow = 7896; e.Ocircumflexgrave = 7890; e.Ocircumflexhookabove = 7892; e.Ocircumflexsmall = 63476; e.Ocircumflextilde = 7894; e.Ocyrillic = 1054; e.Odblacute = 336; e.Odblgrave = 524; e.Odieresis = 214; e.Odieresiscyrillic = 1254; e.Odieresissmall = 63478; e.Odotbelow = 7884; e.Ogoneksmall = 63227; e.Ograve = 210; e.Ogravesmall = 63474; e.Oharmenian = 1365; e.Ohm = 8486; e.Ohookabove = 7886; e.Ohorn = 416; e.Ohornacute = 7898; e.Ohorndotbelow = 7906; e.Ohorngrave = 7900; e.Ohornhookabove = 7902; e.Ohorntilde = 7904; e.Ohungarumlaut = 336; e.Oi = 418; e.Oinvertedbreve = 526; e.Omacron = 332; e.Omacronacute = 7762; e.Omacrongrave = 7760; e.Omega = 8486; e.Omegacyrillic = 1120; e.Omegagreek = 937; e.Omegaroundcyrillic = 1146; e.Omegatitlocyrillic = 1148; e.Omegatonos = 911; e.Omicron = 927; e.Omicrontonos = 908; e.Omonospace = 65327; e.Oneroman = 8544; e.Oogonek = 490; e.Oogonekmacron = 492; e.Oopen = 390; e.Oslash = 216; e.Oslashacute = 510; e.Oslashsmall = 63480; e.Osmall = 63343; e.Ostrokeacute = 510; e.Otcyrillic = 1150; e.Otilde = 213; e.Otildeacute = 7756; e.Otildedieresis = 7758; e.Otildesmall = 63477; e.P = 80; e.Pacute = 7764; e.Pcircle = 9413; e.Pdotaccent = 7766; e.Pecyrillic = 1055; e.Peharmenian = 1354; e.Pemiddlehookcyrillic = 1190; e.Phi = 934; e.Phook = 420; e.Pi = 928; e.Piwrarmenian = 1363; e.Pmonospace = 65328; e.Psi = 936; e.Psicyrillic = 1136; e.Psmall = 63344; e.Q = 81; e.Qcircle = 9414; e.Qmonospace = 65329; e.Qsmall = 63345; e.R = 82; e.Raarmenian = 1356; e.Racute = 340; e.Rcaron = 344; e.Rcedilla = 342; e.Rcircle = 9415; e.Rcommaaccent = 342; e.Rdblgrave = 528; e.Rdotaccent = 7768; e.Rdotbelow = 7770; e.Rdotbelowmacron = 7772; e.Reharmenian = 1360; e.Rfraktur = 8476; e.Rho = 929; e.Ringsmall = 63228; e.Rinvertedbreve = 530; e.Rlinebelow = 7774; e.Rmonospace = 65330; e.Rsmall = 63346; e.Rsmallinverted = 641; e.Rsmallinvertedsuperior = 694; e.S = 83; e.SF010000 = 9484; e.SF020000 = 9492; e.SF030000 = 9488; e.SF040000 = 9496; e.SF050000 = 9532; e.SF060000 = 9516; e.SF070000 = 9524; e.SF080000 = 9500; e.SF090000 = 9508; e.SF100000 = 9472; e.SF110000 = 9474; e.SF190000 = 9569; e.SF200000 = 9570; e.SF210000 = 9558; e.SF220000 = 9557; e.SF230000 = 9571; e.SF240000 = 9553; e.SF250000 = 9559; e.SF260000 = 9565; e.SF270000 = 9564; e.SF280000 = 9563; e.SF360000 = 9566; e.SF370000 = 9567; e.SF380000 = 9562; e.SF390000 = 9556; e.SF400000 = 9577; e.SF410000 = 9574; e.SF420000 = 9568; e.SF430000 = 9552; e.SF440000 = 9580; e.SF450000 = 9575; e.SF460000 = 9576; e.SF470000 = 9572; e.SF480000 = 9573; e.SF490000 = 9561; e.SF500000 = 9560; e.SF510000 = 9554; e.SF520000 = 9555; e.SF530000 = 9579; e.SF540000 = 9578; e.Sacute = 346; e.Sacutedotaccent = 7780; e.Sampigreek = 992; e.Scaron = 352; e.Scarondotaccent = 7782; e.Scaronsmall = 63229; e.Scedilla = 350; e.Schwa = 399; e.Schwacyrillic = 1240; e.Schwadieresiscyrillic = 1242; e.Scircle = 9416; e.Scircumflex = 348; e.Scommaaccent = 536; e.Sdotaccent = 7776; e.Sdotbelow = 7778; e.Sdotbelowdotaccent = 7784; e.Seharmenian = 1357; e.Sevenroman = 8550; e.Shaarmenian = 1351; e.Shacyrillic = 1064; e.Shchacyrillic = 1065; e.Sheicoptic = 994; e.Shhacyrillic = 1210; e.Shimacoptic = 1004; e.Sigma = 931; e.Sixroman = 8549; e.Smonospace = 65331; e.Softsigncyrillic = 1068; e.Ssmall = 63347; e.Stigmagreek = 986; e.T = 84; e.Tau = 932; e.Tbar = 358; e.Tcaron = 356; e.Tcedilla = 354; e.Tcircle = 9417; e.Tcircumflexbelow = 7792; e.Tcommaaccent = 354; e.Tdotaccent = 7786; e.Tdotbelow = 7788; e.Tecyrillic = 1058; e.Tedescendercyrillic = 1196; e.Tenroman = 8553; e.Tetsecyrillic = 1204; e.Theta = 920; e.Thook = 428; e.Thorn = 222; e.Thornsmall = 63486; e.Threeroman = 8546; e.Tildesmall = 63230; e.Tiwnarmenian = 1359; e.Tlinebelow = 7790; e.Tmonospace = 65332; e.Toarmenian = 1337; e.Tonefive = 444; e.Tonesix = 388; e.Tonetwo = 423; e.Tretroflexhook = 430; e.Tsecyrillic = 1062; e.Tshecyrillic = 1035; e.Tsmall = 63348; e.Twelveroman = 8555; e.Tworoman = 8545; e.U = 85; e.Uacute = 218; e.Uacutesmall = 63482; e.Ubreve = 364; e.Ucaron = 467; e.Ucircle = 9418; e.Ucircumflex = 219; e.Ucircumflexbelow = 7798; e.Ucircumflexsmall = 63483; e.Ucyrillic = 1059; e.Udblacute = 368; e.Udblgrave = 532; e.Udieresis = 220; e.Udieresisacute = 471; e.Udieresisbelow = 7794; e.Udieresiscaron = 473; e.Udieresiscyrillic = 1264; e.Udieresisgrave = 475; e.Udieresismacron = 469; e.Udieresissmall = 63484; e.Udotbelow = 7908; e.Ugrave = 217; e.Ugravesmall = 63481; e.Uhookabove = 7910; e.Uhorn = 431; e.Uhornacute = 7912; e.Uhorndotbelow = 7920; e.Uhorngrave = 7914; e.Uhornhookabove = 7916; e.Uhorntilde = 7918; e.Uhungarumlaut = 368; e.Uhungarumlautcyrillic = 1266; e.Uinvertedbreve = 534; e.Ukcyrillic = 1144; e.Umacron = 362; e.Umacroncyrillic = 1262; e.Umacrondieresis = 7802; e.Umonospace = 65333; e.Uogonek = 370; e.Upsilon = 933; e.Upsilon1 = 978; e.Upsilonacutehooksymbolgreek = 979; e.Upsilonafrican = 433; e.Upsilondieresis = 939; e.Upsilondieresishooksymbolgreek = 980; e.Upsilonhooksymbol = 978; e.Upsilontonos = 910; e.Uring = 366; e.Ushortcyrillic = 1038; e.Usmall = 63349; e.Ustraightcyrillic = 1198; e.Ustraightstrokecyrillic = 1200; e.Utilde = 360; e.Utildeacute = 7800; e.Utildebelow = 7796; e.V = 86; e.Vcircle = 9419; e.Vdotbelow = 7806; e.Vecyrillic = 1042; e.Vewarmenian = 1358; e.Vhook = 434; e.Vmonospace = 65334; e.Voarmenian = 1352; e.Vsmall = 63350; e.Vtilde = 7804; e.W = 87; e.Wacute = 7810; e.Wcircle = 9420; e.Wcircumflex = 372; e.Wdieresis = 7812; e.Wdotaccent = 7814; e.Wdotbelow = 7816; e.Wgrave = 7808; e.Wmonospace = 65335; e.Wsmall = 63351; e.X = 88; e.Xcircle = 9421; e.Xdieresis = 7820; e.Xdotaccent = 7818; e.Xeharmenian = 1341; e.Xi = 926; e.Xmonospace = 65336; e.Xsmall = 63352; e.Y = 89; e.Yacute = 221; e.Yacutesmall = 63485; e.Yatcyrillic = 1122; e.Ycircle = 9422; e.Ycircumflex = 374; e.Ydieresis = 376; e.Ydieresissmall = 63487; e.Ydotaccent = 7822; e.Ydotbelow = 7924; e.Yericyrillic = 1067; e.Yerudieresiscyrillic = 1272; e.Ygrave = 7922; e.Yhook = 435; e.Yhookabove = 7926; e.Yiarmenian = 1349; e.Yicyrillic = 1031; e.Yiwnarmenian = 1362; e.Ymonospace = 65337; e.Ysmall = 63353; e.Ytilde = 7928; e.Yusbigcyrillic = 1130; e.Yusbigiotifiedcyrillic = 1132; e.Yuslittlecyrillic = 1126; e.Yuslittleiotifiedcyrillic = 1128; e.Z = 90; e.Zaarmenian = 1334; e.Zacute = 377; e.Zcaron = 381; e.Zcaronsmall = 63231; e.Zcircle = 9423; e.Zcircumflex = 7824; e.Zdot = 379; e.Zdotaccent = 379; e.Zdotbelow = 7826; e.Zecyrillic = 1047; e.Zedescendercyrillic = 1176; e.Zedieresiscyrillic = 1246; e.Zeta = 918; e.Zhearmenian = 1338; e.Zhebrevecyrillic = 1217; e.Zhecyrillic = 1046; e.Zhedescendercyrillic = 1174; e.Zhedieresiscyrillic = 1244; e.Zlinebelow = 7828; e.Zmonospace = 65338; e.Zsmall = 63354; e.Zstroke = 437; e.a = 97; e.aabengali = 2438; e.aacute = 225; e.aadeva = 2310; e.aagujarati = 2694; e.aagurmukhi = 2566; e.aamatragurmukhi = 2622; e.aarusquare = 13059; e.aavowelsignbengali = 2494; e.aavowelsigndeva = 2366; e.aavowelsigngujarati = 2750; e.abbreviationmarkarmenian = 1375; e.abbreviationsigndeva = 2416; e.abengali = 2437; e.abopomofo = 12570; e.abreve = 259; e.abreveacute = 7855; e.abrevecyrillic = 1233; e.abrevedotbelow = 7863; e.abrevegrave = 7857; e.abrevehookabove = 7859; e.abrevetilde = 7861; e.acaron = 462; e.acircle = 9424; e.acircumflex = 226; e.acircumflexacute = 7845; e.acircumflexdotbelow = 7853; e.acircumflexgrave = 7847; e.acircumflexhookabove = 7849; e.acircumflextilde = 7851; e.acute = 180; e.acutebelowcmb = 791; e.acutecmb = 769; e.acutecomb = 769; e.acutedeva = 2388; e.acutelowmod = 719; e.acutetonecmb = 833; e.acyrillic = 1072; e.adblgrave = 513; e.addakgurmukhi = 2673; e.adeva = 2309; e.adieresis = 228; e.adieresiscyrillic = 1235; e.adieresismacron = 479; e.adotbelow = 7841; e.adotmacron = 481; e.ae = 230; e.aeacute = 509; e.aekorean = 12624; e.aemacron = 483; e.afii00208 = 8213; e.afii08941 = 8356; e.afii10017 = 1040; e.afii10018 = 1041; e.afii10019 = 1042; e.afii10020 = 1043; e.afii10021 = 1044; e.afii10022 = 1045; e.afii10023 = 1025; e.afii10024 = 1046; e.afii10025 = 1047; e.afii10026 = 1048; e.afii10027 = 1049; e.afii10028 = 1050; e.afii10029 = 1051; e.afii10030 = 1052; e.afii10031 = 1053; e.afii10032 = 1054; e.afii10033 = 1055; e.afii10034 = 1056; e.afii10035 = 1057; e.afii10036 = 1058; e.afii10037 = 1059; e.afii10038 = 1060; e.afii10039 = 1061; e.afii10040 = 1062; e.afii10041 = 1063; e.afii10042 = 1064; e.afii10043 = 1065; e.afii10044 = 1066; e.afii10045 = 1067; e.afii10046 = 1068; e.afii10047 = 1069; e.afii10048 = 1070; e.afii10049 = 1071; e.afii10050 = 1168; e.afii10051 = 1026; e.afii10052 = 1027; e.afii10053 = 1028; e.afii10054 = 1029; e.afii10055 = 1030; e.afii10056 = 1031; e.afii10057 = 1032; e.afii10058 = 1033; e.afii10059 = 1034; e.afii10060 = 1035; e.afii10061 = 1036; e.afii10062 = 1038; e.afii10063 = 63172; e.afii10064 = 63173; e.afii10065 = 1072; e.afii10066 = 1073; e.afii10067 = 1074; e.afii10068 = 1075; e.afii10069 = 1076; e.afii10070 = 1077; e.afii10071 = 1105; e.afii10072 = 1078; e.afii10073 = 1079; e.afii10074 = 1080; e.afii10075 = 1081; e.afii10076 = 1082; e.afii10077 = 1083; e.afii10078 = 1084; e.afii10079 = 1085; e.afii10080 = 1086; e.afii10081 = 1087; e.afii10082 = 1088; e.afii10083 = 1089; e.afii10084 = 1090; e.afii10085 = 1091; e.afii10086 = 1092; e.afii10087 = 1093; e.afii10088 = 1094; e.afii10089 = 1095; e.afii10090 = 1096; e.afii10091 = 1097; e.afii10092 = 1098; e.afii10093 = 1099; e.afii10094 = 1100; e.afii10095 = 1101; e.afii10096 = 1102; e.afii10097 = 1103; e.afii10098 = 1169; e.afii10099 = 1106; e.afii10100 = 1107; e.afii10101 = 1108; e.afii10102 = 1109; e.afii10103 = 1110; e.afii10104 = 1111; e.afii10105 = 1112; e.afii10106 = 1113; e.afii10107 = 1114; e.afii10108 = 1115; e.afii10109 = 1116; e.afii10110 = 1118; e.afii10145 = 1039; e.afii10146 = 1122; e.afii10147 = 1138; e.afii10148 = 1140; e.afii10192 = 63174; e.afii10193 = 1119; e.afii10194 = 1123; e.afii10195 = 1139; e.afii10196 = 1141; e.afii10831 = 63175; e.afii10832 = 63176; e.afii10846 = 1241; e.afii299 = 8206; e.afii300 = 8207; e.afii301 = 8205; e.afii57381 = 1642; e.afii57388 = 1548; e.afii57392 = 1632; e.afii57393 = 1633; e.afii57394 = 1634; e.afii57395 = 1635; e.afii57396 = 1636; e.afii57397 = 1637; e.afii57398 = 1638; e.afii57399 = 1639; e.afii57400 = 1640; e.afii57401 = 1641; e.afii57403 = 1563; e.afii57407 = 1567; e.afii57409 = 1569; e.afii57410 = 1570; e.afii57411 = 1571; e.afii57412 = 1572; e.afii57413 = 1573; e.afii57414 = 1574; e.afii57415 = 1575; e.afii57416 = 1576; e.afii57417 = 1577; e.afii57418 = 1578; e.afii57419 = 1579; e.afii57420 = 1580; e.afii57421 = 1581; e.afii57422 = 1582; e.afii57423 = 1583; e.afii57424 = 1584; e.afii57425 = 1585; e.afii57426 = 1586; e.afii57427 = 1587; e.afii57428 = 1588; e.afii57429 = 1589; e.afii57430 = 1590; e.afii57431 = 1591; e.afii57432 = 1592; e.afii57433 = 1593; e.afii57434 = 1594; e.afii57440 = 1600; e.afii57441 = 1601; e.afii57442 = 1602; e.afii57443 = 1603; e.afii57444 = 1604; e.afii57445 = 1605; e.afii57446 = 1606; e.afii57448 = 1608; e.afii57449 = 1609; e.afii57450 = 1610; e.afii57451 = 1611; e.afii57452 = 1612; e.afii57453 = 1613; e.afii57454 = 1614; e.afii57455 = 1615; e.afii57456 = 1616; e.afii57457 = 1617; e.afii57458 = 1618; e.afii57470 = 1607; e.afii57505 = 1700; e.afii57506 = 1662; e.afii57507 = 1670; e.afii57508 = 1688; e.afii57509 = 1711; e.afii57511 = 1657; e.afii57512 = 1672; e.afii57513 = 1681; e.afii57514 = 1722; e.afii57519 = 1746; e.afii57534 = 1749; e.afii57636 = 8362; e.afii57645 = 1470; e.afii57658 = 1475; e.afii57664 = 1488; e.afii57665 = 1489; e.afii57666 = 1490; e.afii57667 = 1491; e.afii57668 = 1492; e.afii57669 = 1493; e.afii57670 = 1494; e.afii57671 = 1495; e.afii57672 = 1496; e.afii57673 = 1497; e.afii57674 = 1498; e.afii57675 = 1499; e.afii57676 = 1500; e.afii57677 = 1501; e.afii57678 = 1502; e.afii57679 = 1503; e.afii57680 = 1504; e.afii57681 = 1505; e.afii57682 = 1506; e.afii57683 = 1507; e.afii57684 = 1508; e.afii57685 = 1509; e.afii57686 = 1510; e.afii57687 = 1511; e.afii57688 = 1512; e.afii57689 = 1513; e.afii57690 = 1514; e.afii57694 = 64298; e.afii57695 = 64299; e.afii57700 = 64331; e.afii57705 = 64287; e.afii57716 = 1520; e.afii57717 = 1521; e.afii57718 = 1522; e.afii57723 = 64309; e.afii57793 = 1460; e.afii57794 = 1461; e.afii57795 = 1462; e.afii57796 = 1467; e.afii57797 = 1464; e.afii57798 = 1463; e.afii57799 = 1456; e.afii57800 = 1458; e.afii57801 = 1457; e.afii57802 = 1459; e.afii57803 = 1474; e.afii57804 = 1473; e.afii57806 = 1465; e.afii57807 = 1468; e.afii57839 = 1469; e.afii57841 = 1471; e.afii57842 = 1472; e.afii57929 = 700; e.afii61248 = 8453; e.afii61289 = 8467; e.afii61352 = 8470; e.afii61573 = 8236; e.afii61574 = 8237; e.afii61575 = 8238; e.afii61664 = 8204; e.afii63167 = 1645; e.afii64937 = 701; e.agrave = 224; e.agujarati = 2693; e.agurmukhi = 2565; e.ahiragana = 12354; e.ahookabove = 7843; e.aibengali = 2448; e.aibopomofo = 12574; e.aideva = 2320; e.aiecyrillic = 1237; e.aigujarati = 2704; e.aigurmukhi = 2576; e.aimatragurmukhi = 2632; e.ainarabic = 1593; e.ainfinalarabic = 65226; e.aininitialarabic = 65227; e.ainmedialarabic = 65228; e.ainvertedbreve = 515; e.aivowelsignbengali = 2504; e.aivowelsigndeva = 2376; e.aivowelsigngujarati = 2760; e.akatakana = 12450; e.akatakanahalfwidth = 65393; e.akorean = 12623; e.alef = 1488; e.alefarabic = 1575; e.alefdageshhebrew = 64304; e.aleffinalarabic = 65166; e.alefhamzaabovearabic = 1571; e.alefhamzaabovefinalarabic = 65156; e.alefhamzabelowarabic = 1573; e.alefhamzabelowfinalarabic = 65160; e.alefhebrew = 1488; e.aleflamedhebrew = 64335; e.alefmaddaabovearabic = 1570; e.alefmaddaabovefinalarabic = 65154; e.alefmaksuraarabic = 1609; e.alefmaksurafinalarabic = 65264; e.alefmaksurainitialarabic = 65267; e.alefmaksuramedialarabic = 65268; e.alefpatahhebrew = 64302; e.alefqamatshebrew = 64303; e.aleph = 8501; e.allequal = 8780; e.alpha = 945; e.alphatonos = 940; e.amacron = 257; e.amonospace = 65345; e.ampersand = 38; e.ampersandmonospace = 65286; e.ampersandsmall = 63270; e.amsquare = 13250; e.anbopomofo = 12578; e.angbopomofo = 12580; e.angbracketleft = 12296; e.angbracketright = 12297; e.angkhankhuthai = 3674; e.angle = 8736; e.anglebracketleft = 12296; e.anglebracketleftvertical = 65087; e.anglebracketright = 12297; e.anglebracketrightvertical = 65088; e.angleleft = 9001; e.angleright = 9002; e.angstrom = 8491; e.anoteleia = 903; e.anudattadeva = 2386; e.anusvarabengali = 2434; e.anusvaradeva = 2306; e.anusvaragujarati = 2690; e.aogonek = 261; e.apaatosquare = 13056; e.aparen = 9372; e.apostrophearmenian = 1370; e.apostrophemod = 700; e.apple = 63743; e.approaches = 8784; e.approxequal = 8776; e.approxequalorimage = 8786; e.approximatelyequal = 8773; e.araeaekorean = 12686; e.araeakorean = 12685; e.arc = 8978; e.arighthalfring = 7834; e.aring = 229; e.aringacute = 507; e.aringbelow = 7681; e.arrowboth = 8596; e.arrowdashdown = 8675; e.arrowdashleft = 8672; e.arrowdashright = 8674; e.arrowdashup = 8673; e.arrowdblboth = 8660; e.arrowdbldown = 8659; e.arrowdblleft = 8656; e.arrowdblright = 8658; e.arrowdblup = 8657; e.arrowdown = 8595; e.arrowdownleft = 8601; e.arrowdownright = 8600; e.arrowdownwhite = 8681; e.arrowheaddownmod = 709; e.arrowheadleftmod = 706; e.arrowheadrightmod = 707; e.arrowheadupmod = 708; e.arrowhorizex = 63719; e.arrowleft = 8592; e.arrowleftdbl = 8656; e.arrowleftdblstroke = 8653; e.arrowleftoverright = 8646; e.arrowleftwhite = 8678; e.arrowright = 8594; e.arrowrightdblstroke = 8655; e.arrowrightheavy = 10142; e.arrowrightoverleft = 8644; e.arrowrightwhite = 8680; e.arrowtableft = 8676; e.arrowtabright = 8677; e.arrowup = 8593; e.arrowupdn = 8597; e.arrowupdnbse = 8616; e.arrowupdownbase = 8616; e.arrowupleft = 8598; e.arrowupleftofdown = 8645; e.arrowupright = 8599; e.arrowupwhite = 8679; e.arrowvertex = 63718; e.asciicircum = 94; e.asciicircummonospace = 65342; e.asciitilde = 126; e.asciitildemonospace = 65374; e.ascript = 593; e.ascriptturned = 594; e.asmallhiragana = 12353; e.asmallkatakana = 12449; e.asmallkatakanahalfwidth = 65383; e.asterisk = 42; e.asteriskaltonearabic = 1645; e.asteriskarabic = 1645; e.asteriskmath = 8727; e.asteriskmonospace = 65290; e.asterisksmall = 65121; e.asterism = 8258; e.asuperior = 63209; e.asymptoticallyequal = 8771; e.at = 64; e.atilde = 227; e.atmonospace = 65312; e.atsmall = 65131; e.aturned = 592; e.aubengali = 2452; e.aubopomofo = 12576; e.audeva = 2324; e.augujarati = 2708; e.augurmukhi = 2580; e.aulengthmarkbengali = 2519; e.aumatragurmukhi = 2636; e.auvowelsignbengali = 2508; e.auvowelsigndeva = 2380; e.auvowelsigngujarati = 2764; e.avagrahadeva = 2365; e.aybarmenian = 1377; e.ayin = 1506; e.ayinaltonehebrew = 64288; e.ayinhebrew = 1506; e.b = 98; e.babengali = 2476; e.backslash = 92; e.backslashmonospace = 65340; e.badeva = 2348; e.bagujarati = 2732; e.bagurmukhi = 2604; e.bahiragana = 12400; e.bahtthai = 3647; e.bakatakana = 12496; e.bar = 124; e.barmonospace = 65372; e.bbopomofo = 12549; e.bcircle = 9425; e.bdotaccent = 7683; e.bdotbelow = 7685; e.beamedsixteenthnotes = 9836; e.because = 8757; e.becyrillic = 1073; e.beharabic = 1576; e.behfinalarabic = 65168; e.behinitialarabic = 65169; e.behiragana = 12409; e.behmedialarabic = 65170; e.behmeeminitialarabic = 64671; e.behmeemisolatedarabic = 64520; e.behnoonfinalarabic = 64621; e.bekatakana = 12505; e.benarmenian = 1378; e.bet = 1489; e.beta = 946; e.betasymbolgreek = 976; e.betdagesh = 64305; e.betdageshhebrew = 64305; e.bethebrew = 1489; e.betrafehebrew = 64332; e.bhabengali = 2477; e.bhadeva = 2349; e.bhagujarati = 2733; e.bhagurmukhi = 2605; e.bhook = 595; e.bihiragana = 12403; e.bikatakana = 12499; e.bilabialclick = 664; e.bindigurmukhi = 2562; e.birusquare = 13105; e.blackcircle = 9679; e.blackdiamond = 9670; e.blackdownpointingtriangle = 9660; e.blackleftpointingpointer = 9668; e.blackleftpointingtriangle = 9664; e.blacklenticularbracketleft = 12304; e.blacklenticularbracketleftvertical = 65083; e.blacklenticularbracketright = 12305; e.blacklenticularbracketrightvertical = 65084; e.blacklowerlefttriangle = 9699; e.blacklowerrighttriangle = 9698; e.blackrectangle = 9644; e.blackrightpointingpointer = 9658; e.blackrightpointingtriangle = 9654; e.blacksmallsquare = 9642; e.blacksmilingface = 9787; e.blacksquare = 9632; e.blackstar = 9733; e.blackupperlefttriangle = 9700; e.blackupperrighttriangle = 9701; e.blackuppointingsmalltriangle = 9652; e.blackuppointingtriangle = 9650; e.blank = 9251; e.blinebelow = 7687; e.block = 9608; e.bmonospace = 65346; e.bobaimaithai = 3610; e.bohiragana = 12412; e.bokatakana = 12508; e.bparen = 9373; e.bqsquare = 13251; e.braceex = 63732; e.braceleft = 123; e.braceleftbt = 63731; e.braceleftmid = 63730; e.braceleftmonospace = 65371; e.braceleftsmall = 65115; e.bracelefttp = 63729; e.braceleftvertical = 65079; e.braceright = 125; e.bracerightbt = 63742; e.bracerightmid = 63741; e.bracerightmonospace = 65373; e.bracerightsmall = 65116; e.bracerighttp = 63740; e.bracerightvertical = 65080; e.bracketleft = 91; e.bracketleftbt = 63728; e.bracketleftex = 63727; e.bracketleftmonospace = 65339; e.bracketlefttp = 63726; e.bracketright = 93; e.bracketrightbt = 63739; e.bracketrightex = 63738; e.bracketrightmonospace = 65341; e.bracketrighttp = 63737; e.breve = 728; e.brevebelowcmb = 814; e.brevecmb = 774; e.breveinvertedbelowcmb = 815; e.breveinvertedcmb = 785; e.breveinverteddoublecmb = 865; e.bridgebelowcmb = 810; e.bridgeinvertedbelowcmb = 826; e.brokenbar = 166; e.bstroke = 384; e.bsuperior = 63210; e.btopbar = 387; e.buhiragana = 12406; e.bukatakana = 12502; e.bullet = 8226; e.bulletinverse = 9688; e.bulletoperator = 8729; e.bullseye = 9678; e.c = 99; e.caarmenian = 1390; e.cabengali = 2458; e.cacute = 263; e.cadeva = 2330; e.cagujarati = 2714; e.cagurmukhi = 2586; e.calsquare = 13192; e.candrabindubengali = 2433; e.candrabinducmb = 784; e.candrabindudeva = 2305; e.candrabindugujarati = 2689; e.capslock = 8682; e.careof = 8453; e.caron = 711; e.caronbelowcmb = 812; e.caroncmb = 780; e.carriagereturn = 8629; e.cbopomofo = 12568; e.ccaron = 269; e.ccedilla = 231; e.ccedillaacute = 7689; e.ccircle = 9426; e.ccircumflex = 265; e.ccurl = 597; e.cdot = 267; e.cdotaccent = 267; e.cdsquare = 13253; e.cedilla = 184; e.cedillacmb = 807; e.cent = 162; e.centigrade = 8451; e.centinferior = 63199; e.centmonospace = 65504; e.centoldstyle = 63394; e.centsuperior = 63200; e.chaarmenian = 1401; e.chabengali = 2459; e.chadeva = 2331; e.chagujarati = 2715; e.chagurmukhi = 2587; e.chbopomofo = 12564; e.cheabkhasiancyrillic = 1213; e.checkmark = 10003; e.checyrillic = 1095; e.chedescenderabkhasiancyrillic = 1215; e.chedescendercyrillic = 1207; e.chedieresiscyrillic = 1269; e.cheharmenian = 1395; e.chekhakassiancyrillic = 1228; e.cheverticalstrokecyrillic = 1209; e.chi = 967; e.chieuchacirclekorean = 12919; e.chieuchaparenkorean = 12823; e.chieuchcirclekorean = 12905; e.chieuchkorean = 12618; e.chieuchparenkorean = 12809; e.chochangthai = 3594; e.chochanthai = 3592; e.chochingthai = 3593; e.chochoethai = 3596; e.chook = 392; e.cieucacirclekorean = 12918; e.cieucaparenkorean = 12822; e.cieuccirclekorean = 12904; e.cieuckorean = 12616; e.cieucparenkorean = 12808; e.cieucuparenkorean = 12828; e.circle = 9675; e.circlecopyrt = 169; e.circlemultiply = 8855; e.circleot = 8857; e.circleplus = 8853; e.circlepostalmark = 12342; e.circlewithlefthalfblack = 9680; e.circlewithrighthalfblack = 9681; e.circumflex = 710; e.circumflexbelowcmb = 813; e.circumflexcmb = 770; e.clear = 8999; e.clickalveolar = 450; e.clickdental = 448; e.clicklateral = 449; e.clickretroflex = 451; e.club = 9827; e.clubsuitblack = 9827; e.clubsuitwhite = 9831; e.cmcubedsquare = 13220; e.cmonospace = 65347; e.cmsquaredsquare = 13216; e.coarmenian = 1409; e.colon = 58; e.colonmonetary = 8353; e.colonmonospace = 65306; e.colonsign = 8353; e.colonsmall = 65109; e.colontriangularhalfmod = 721; e.colontriangularmod = 720; e.comma = 44; e.commaabovecmb = 787; e.commaaboverightcmb = 789; e.commaaccent = 63171; e.commaarabic = 1548; e.commaarmenian = 1373; e.commainferior = 63201; e.commamonospace = 65292; e.commareversedabovecmb = 788; e.commareversedmod = 701; e.commasmall = 65104; e.commasuperior = 63202; e.commaturnedabovecmb = 786; e.commaturnedmod = 699; e.compass = 9788; e.congruent = 8773; e.contourintegral = 8750; e.control = 8963; e.controlACK = 6; e.controlBEL = 7; e.controlBS = 8; e.controlCAN = 24; e.controlCR = 13; e.controlDC1 = 17; e.controlDC2 = 18; e.controlDC3 = 19; e.controlDC4 = 20; e.controlDEL = 127; e.controlDLE = 16; e.controlEM = 25; e.controlENQ = 5; e.controlEOT = 4; e.controlESC = 27; e.controlETB = 23; e.controlETX = 3; e.controlFF = 12; e.controlFS = 28; e.controlGS = 29; e.controlHT = 9; e.controlLF = 10; e.controlNAK = 21; e.controlNULL = 0; e.controlRS = 30; e.controlSI = 15; e.controlSO = 14; e.controlSOT = 2; e.controlSTX = 1; e.controlSUB = 26; e.controlSYN = 22; e.controlUS = 31; e.controlVT = 11; e.copyright = 169; e.copyrightsans = 63721; e.copyrightserif = 63193; e.cornerbracketleft = 12300; e.cornerbracketlefthalfwidth = 65378; e.cornerbracketleftvertical = 65089; e.cornerbracketright = 12301; e.cornerbracketrighthalfwidth = 65379; e.cornerbracketrightvertical = 65090; e.corporationsquare = 13183; e.cosquare = 13255; e.coverkgsquare = 13254; e.cparen = 9374; e.cruzeiro = 8354; e.cstretched = 663; e.curlyand = 8911; e.curlyor = 8910; e.currency = 164; e.cyrBreve = 63185; e.cyrFlex = 63186; e.cyrbreve = 63188; e.cyrflex = 63189; e.d = 100; e.daarmenian = 1380; e.dabengali = 2470; e.dadarabic = 1590; e.dadeva = 2342; e.dadfinalarabic = 65214; e.dadinitialarabic = 65215; e.dadmedialarabic = 65216; e.dagesh = 1468; e.dageshhebrew = 1468; e.dagger = 8224; e.daggerdbl = 8225; e.dagujarati = 2726; e.dagurmukhi = 2598; e.dahiragana = 12384; e.dakatakana = 12480; e.dalarabic = 1583; e.dalet = 1491; e.daletdagesh = 64307; e.daletdageshhebrew = 64307; e.dalethebrew = 1491; e.dalfinalarabic = 65194; e.dammaarabic = 1615; e.dammalowarabic = 1615; e.dammatanaltonearabic = 1612; e.dammatanarabic = 1612; e.danda = 2404; e.dargahebrew = 1447; e.dargalefthebrew = 1447; e.dasiapneumatacyrilliccmb = 1157; e.dblGrave = 63187; e.dblanglebracketleft = 12298; e.dblanglebracketleftvertical = 65085; e.dblanglebracketright = 12299; e.dblanglebracketrightvertical = 65086; e.dblarchinvertedbelowcmb = 811; e.dblarrowleft = 8660; e.dblarrowright = 8658; e.dbldanda = 2405; e.dblgrave = 63190; e.dblgravecmb = 783; e.dblintegral = 8748; e.dbllowline = 8215; e.dbllowlinecmb = 819; e.dbloverlinecmb = 831; e.dblprimemod = 698; e.dblverticalbar = 8214; e.dblverticallineabovecmb = 782; e.dbopomofo = 12553; e.dbsquare = 13256; e.dcaron = 271; e.dcedilla = 7697; e.dcircle = 9427; e.dcircumflexbelow = 7699; e.dcroat = 273; e.ddabengali = 2465; e.ddadeva = 2337; e.ddagujarati = 2721; e.ddagurmukhi = 2593; e.ddalarabic = 1672; e.ddalfinalarabic = 64393; e.dddhadeva = 2396; e.ddhabengali = 2466; e.ddhadeva = 2338; e.ddhagujarati = 2722; e.ddhagurmukhi = 2594; e.ddotaccent = 7691; e.ddotbelow = 7693; e.decimalseparatorarabic = 1643; e.decimalseparatorpersian = 1643; e.decyrillic = 1076; e.degree = 176; e.dehihebrew = 1453; e.dehiragana = 12391; e.deicoptic = 1007; e.dekatakana = 12487; e.deleteleft = 9003; e.deleteright = 8998; e.delta = 948; e.deltaturned = 397; e.denominatorminusonenumeratorbengali = 2552; e.dezh = 676; e.dhabengali = 2471; e.dhadeva = 2343; e.dhagujarati = 2727; e.dhagurmukhi = 2599; e.dhook = 599; e.dialytikatonos = 901; e.dialytikatonoscmb = 836; e.diamond = 9830; e.diamondsuitwhite = 9826; e.dieresis = 168; e.dieresisacute = 63191; e.dieresisbelowcmb = 804; e.dieresiscmb = 776; e.dieresisgrave = 63192; e.dieresistonos = 901; e.dihiragana = 12386; e.dikatakana = 12482; e.dittomark = 12291; e.divide = 247; e.divides = 8739; e.divisionslash = 8725; e.djecyrillic = 1106; e.dkshade = 9619; e.dlinebelow = 7695; e.dlsquare = 13207; e.dmacron = 273; e.dmonospace = 65348; e.dnblock = 9604; e.dochadathai = 3598; e.dodekthai = 3604; e.dohiragana = 12393; e.dokatakana = 12489; e.dollar = 36; e.dollarinferior = 63203; e.dollarmonospace = 65284; e.dollaroldstyle = 63268; e.dollarsmall = 65129; e.dollarsuperior = 63204; e.dong = 8363; e.dorusquare = 13094; e.dotaccent = 729; e.dotaccentcmb = 775; e.dotbelowcmb = 803; e.dotbelowcomb = 803; e.dotkatakana = 12539; e.dotlessi = 305; e.dotlessj = 63166; e.dotlessjstrokehook = 644; e.dotmath = 8901; e.dottedcircle = 9676; e.doubleyodpatah = 64287; e.doubleyodpatahhebrew = 64287; e.downtackbelowcmb = 798; e.downtackmod = 725; e.dparen = 9375; e.dsuperior = 63211; e.dtail = 598; e.dtopbar = 396; e.duhiragana = 12389; e.dukatakana = 12485; e.dz = 499; e.dzaltone = 675; e.dzcaron = 454; e.dzcurl = 677; e.dzeabkhasiancyrillic = 1249; e.dzecyrillic = 1109; e.dzhecyrillic = 1119; e.e = 101; e.eacute = 233; e.earth = 9793; e.ebengali = 2447; e.ebopomofo = 12572; e.ebreve = 277; e.ecandradeva = 2317; e.ecandragujarati = 2701; e.ecandravowelsigndeva = 2373; e.ecandravowelsigngujarati = 2757; e.ecaron = 283; e.ecedillabreve = 7709; e.echarmenian = 1381; e.echyiwnarmenian = 1415; e.ecircle = 9428; e.ecircumflex = 234; e.ecircumflexacute = 7871; e.ecircumflexbelow = 7705; e.ecircumflexdotbelow = 7879; e.ecircumflexgrave = 7873; e.ecircumflexhookabove = 7875; e.ecircumflextilde = 7877; e.ecyrillic = 1108; e.edblgrave = 517; e.edeva = 2319; e.edieresis = 235; e.edot = 279; e.edotaccent = 279; e.edotbelow = 7865; e.eegurmukhi = 2575; e.eematragurmukhi = 2631; e.efcyrillic = 1092; e.egrave = 232; e.egujarati = 2703; e.eharmenian = 1383; e.ehbopomofo = 12573; e.ehiragana = 12360; e.ehookabove = 7867; e.eibopomofo = 12575; e.eight = 56; e.eightarabic = 1640; e.eightbengali = 2542; e.eightcircle = 9319; e.eightcircleinversesansserif = 10129; e.eightdeva = 2414; e.eighteencircle = 9329; e.eighteenparen = 9349; e.eighteenperiod = 9369; e.eightgujarati = 2798; e.eightgurmukhi = 2670; e.eighthackarabic = 1640; e.eighthangzhou = 12328; e.eighthnotebeamed = 9835; e.eightideographicparen = 12839; e.eightinferior = 8328; e.eightmonospace = 65304; e.eightoldstyle = 63288; e.eightparen = 9339; e.eightperiod = 9359; e.eightpersian = 1784; e.eightroman = 8567; e.eightsuperior = 8312; e.eightthai = 3672; e.einvertedbreve = 519; e.eiotifiedcyrillic = 1125; e.ekatakana = 12456; e.ekatakanahalfwidth = 65396; e.ekonkargurmukhi = 2676; e.ekorean = 12628; e.elcyrillic = 1083; e.element = 8712; e.elevencircle = 9322; e.elevenparen = 9342; e.elevenperiod = 9362; e.elevenroman = 8570; e.ellipsis = 8230; e.ellipsisvertical = 8942; e.emacron = 275; e.emacronacute = 7703; e.emacrongrave = 7701; e.emcyrillic = 1084; e.emdash = 8212; e.emdashvertical = 65073; e.emonospace = 65349; e.emphasismarkarmenian = 1371; e.emptyset = 8709; e.enbopomofo = 12579; e.encyrillic = 1085; e.endash = 8211; e.endashvertical = 65074; e.endescendercyrillic = 1187; e.eng = 331; e.engbopomofo = 12581; e.enghecyrillic = 1189; e.enhookcyrillic = 1224; e.enspace = 8194; e.eogonek = 281; e.eokorean = 12627; e.eopen = 603; e.eopenclosed = 666; e.eopenreversed = 604; e.eopenreversedclosed = 606; e.eopenreversedhook = 605; e.eparen = 9376; e.epsilon = 949; e.epsilontonos = 941; e.equal = 61; e.equalmonospace = 65309; e.equalsmall = 65126; e.equalsuperior = 8316; e.equivalence = 8801; e.erbopomofo = 12582; e.ercyrillic = 1088; e.ereversed = 600; e.ereversedcyrillic = 1101; e.escyrillic = 1089; e.esdescendercyrillic = 1195; e.esh = 643; e.eshcurl = 646; e.eshortdeva = 2318; e.eshortvowelsigndeva = 2374; e.eshreversedloop = 426; e.eshsquatreversed = 645; e.esmallhiragana = 12359; e.esmallkatakana = 12455; e.esmallkatakanahalfwidth = 65386; e.estimated = 8494; e.esuperior = 63212; e.eta = 951; e.etarmenian = 1384; e.etatonos = 942; e.eth = 240; e.etilde = 7869; e.etildebelow = 7707; e.etnahtafoukhhebrew = 1425; e.etnahtafoukhlefthebrew = 1425; e.etnahtahebrew = 1425; e.etnahtalefthebrew = 1425; e.eturned = 477; e.eukorean = 12641; e.euro = 8364; e.evowelsignbengali = 2503; e.evowelsigndeva = 2375; e.evowelsigngujarati = 2759; e.exclam = 33; e.exclamarmenian = 1372; e.exclamdbl = 8252; e.exclamdown = 161; e.exclamdownsmall = 63393; e.exclammonospace = 65281; e.exclamsmall = 63265; e.existential = 8707; e.ezh = 658; e.ezhcaron = 495; e.ezhcurl = 659; e.ezhreversed = 441; e.ezhtail = 442; e.f = 102; e.fadeva = 2398; e.fagurmukhi = 2654; e.fahrenheit = 8457; e.fathaarabic = 1614; e.fathalowarabic = 1614; e.fathatanarabic = 1611; e.fbopomofo = 12552; e.fcircle = 9429; e.fdotaccent = 7711; e.feharabic = 1601; e.feharmenian = 1414; e.fehfinalarabic = 65234; e.fehinitialarabic = 65235; e.fehmedialarabic = 65236; e.feicoptic = 997; e.female = 9792; e.ff = 64256; e.f_f = 64256; e.ffi = 64259; e.ffl = 64260; e.fi = 64257; e.fifteencircle = 9326; e.fifteenparen = 9346; e.fifteenperiod = 9366; e.figuredash = 8210; e.filledbox = 9632; e.filledrect = 9644; e.finalkaf = 1498; e.finalkafdagesh = 64314; e.finalkafdageshhebrew = 64314; e.finalkafhebrew = 1498; e.finalmem = 1501; e.finalmemhebrew = 1501; e.finalnun = 1503; e.finalnunhebrew = 1503; e.finalpe = 1507; e.finalpehebrew = 1507; e.finaltsadi = 1509; e.finaltsadihebrew = 1509; e.firsttonechinese = 713; e.fisheye = 9673; e.fitacyrillic = 1139; e.five = 53; e.fivearabic = 1637; e.fivebengali = 2539; e.fivecircle = 9316; e.fivecircleinversesansserif = 10126; e.fivedeva = 2411; e.fiveeighths = 8541; e.fivegujarati = 2795; e.fivegurmukhi = 2667; e.fivehackarabic = 1637; e.fivehangzhou = 12325; e.fiveideographicparen = 12836; e.fiveinferior = 8325; e.fivemonospace = 65301; e.fiveoldstyle = 63285; e.fiveparen = 9336; e.fiveperiod = 9356; e.fivepersian = 1781; e.fiveroman = 8564; e.fivesuperior = 8309; e.fivethai = 3669; e.fl = 64258; e.florin = 402; e.fmonospace = 65350; e.fmsquare = 13209; e.fofanthai = 3615; e.fofathai = 3613; e.fongmanthai = 3663; e.forall = 8704; e.four = 52; e.fourarabic = 1636; e.fourbengali = 2538; e.fourcircle = 9315; e.fourcircleinversesansserif = 10125; e.fourdeva = 2410; e.fourgujarati = 2794; e.fourgurmukhi = 2666; e.fourhackarabic = 1636; e.fourhangzhou = 12324; e.fourideographicparen = 12835; e.fourinferior = 8324; e.fourmonospace = 65300; e.fournumeratorbengali = 2551; e.fouroldstyle = 63284; e.fourparen = 9335; e.fourperiod = 9355; e.fourpersian = 1780; e.fourroman = 8563; e.foursuperior = 8308; e.fourteencircle = 9325; e.fourteenparen = 9345; e.fourteenperiod = 9365; e.fourthai = 3668; e.fourthtonechinese = 715; e.fparen = 9377; e.fraction = 8260; e.franc = 8355; e.g = 103; e.gabengali = 2455; e.gacute = 501; e.gadeva = 2327; e.gafarabic = 1711; e.gaffinalarabic = 64403; e.gafinitialarabic = 64404; e.gafmedialarabic = 64405; e.gagujarati = 2711; e.gagurmukhi = 2583; e.gahiragana = 12364; e.gakatakana = 12460; e.gamma = 947; e.gammalatinsmall = 611; e.gammasuperior = 736; e.gangiacoptic = 1003; e.gbopomofo = 12557; e.gbreve = 287; e.gcaron = 487; e.gcedilla = 291; e.gcircle = 9430; e.gcircumflex = 285; e.gcommaaccent = 291; e.gdot = 289; e.gdotaccent = 289; e.gecyrillic = 1075; e.gehiragana = 12370; e.gekatakana = 12466; e.geometricallyequal = 8785; e.gereshaccenthebrew = 1436; e.gereshhebrew = 1523; e.gereshmuqdamhebrew = 1437; e.germandbls = 223; e.gershayimaccenthebrew = 1438; e.gershayimhebrew = 1524; e.getamark = 12307; e.ghabengali = 2456; e.ghadarmenian = 1394; e.ghadeva = 2328; e.ghagujarati = 2712; e.ghagurmukhi = 2584; e.ghainarabic = 1594; e.ghainfinalarabic = 65230; e.ghaininitialarabic = 65231; e.ghainmedialarabic = 65232; e.ghemiddlehookcyrillic = 1173; e.ghestrokecyrillic = 1171; e.gheupturncyrillic = 1169; e.ghhadeva = 2394; e.ghhagurmukhi = 2650; e.ghook = 608; e.ghzsquare = 13203; e.gihiragana = 12366; e.gikatakana = 12462; e.gimarmenian = 1379; e.gimel = 1490; e.gimeldagesh = 64306; e.gimeldageshhebrew = 64306; e.gimelhebrew = 1490; e.gjecyrillic = 1107; e.glottalinvertedstroke = 446; e.glottalstop = 660; e.glottalstopinverted = 662; e.glottalstopmod = 704; e.glottalstopreversed = 661; e.glottalstopreversedmod = 705; e.glottalstopreversedsuperior = 740; e.glottalstopstroke = 673; e.glottalstopstrokereversed = 674; e.gmacron = 7713; e.gmonospace = 65351; e.gohiragana = 12372; e.gokatakana = 12468; e.gparen = 9378; e.gpasquare = 13228; e.gradient = 8711; e.grave = 96; e.gravebelowcmb = 790; e.gravecmb = 768; e.gravecomb = 768; e.gravedeva = 2387; e.gravelowmod = 718; e.gravemonospace = 65344; e.gravetonecmb = 832; e.greater = 62; e.greaterequal = 8805; e.greaterequalorless = 8923; e.greatermonospace = 65310; e.greaterorequivalent = 8819; e.greaterorless = 8823; e.greateroverequal = 8807; e.greatersmall = 65125; e.gscript = 609; e.gstroke = 485; e.guhiragana = 12368; e.guillemotleft = 171; e.guillemotright = 187; e.guilsinglleft = 8249; e.guilsinglright = 8250; e.gukatakana = 12464; e.guramusquare = 13080; e.gysquare = 13257; e.h = 104; e.haabkhasiancyrillic = 1193; e.haaltonearabic = 1729; e.habengali = 2489; e.hadescendercyrillic = 1203; e.hadeva = 2361; e.hagujarati = 2745; e.hagurmukhi = 2617; e.haharabic = 1581; e.hahfinalarabic = 65186; e.hahinitialarabic = 65187; e.hahiragana = 12399; e.hahmedialarabic = 65188; e.haitusquare = 13098; e.hakatakana = 12495; e.hakatakanahalfwidth = 65418; e.halantgurmukhi = 2637; e.hamzaarabic = 1569; e.hamzalowarabic = 1569; e.hangulfiller = 12644; e.hardsigncyrillic = 1098; e.harpoonleftbarbup = 8636; e.harpoonrightbarbup = 8640; e.hasquare = 13258; e.hatafpatah = 1458; e.hatafpatah16 = 1458; e.hatafpatah23 = 1458; e.hatafpatah2f = 1458; e.hatafpatahhebrew = 1458; e.hatafpatahnarrowhebrew = 1458; e.hatafpatahquarterhebrew = 1458; e.hatafpatahwidehebrew = 1458; e.hatafqamats = 1459; e.hatafqamats1b = 1459; e.hatafqamats28 = 1459; e.hatafqamats34 = 1459; e.hatafqamatshebrew = 1459; e.hatafqamatsnarrowhebrew = 1459; e.hatafqamatsquarterhebrew = 1459; e.hatafqamatswidehebrew = 1459; e.hatafsegol = 1457; e.hatafsegol17 = 1457; e.hatafsegol24 = 1457; e.hatafsegol30 = 1457; e.hatafsegolhebrew = 1457; e.hatafsegolnarrowhebrew = 1457; e.hatafsegolquarterhebrew = 1457; e.hatafsegolwidehebrew = 1457; e.hbar = 295; e.hbopomofo = 12559; e.hbrevebelow = 7723; e.hcedilla = 7721; e.hcircle = 9431; e.hcircumflex = 293; e.hdieresis = 7719; e.hdotaccent = 7715; e.hdotbelow = 7717; e.he = 1492; e.heart = 9829; e.heartsuitblack = 9829; e.heartsuitwhite = 9825; e.hedagesh = 64308; e.hedageshhebrew = 64308; e.hehaltonearabic = 1729; e.heharabic = 1607; e.hehebrew = 1492; e.hehfinalaltonearabic = 64423; e.hehfinalalttwoarabic = 65258; e.hehfinalarabic = 65258; e.hehhamzaabovefinalarabic = 64421; e.hehhamzaaboveisolatedarabic = 64420; e.hehinitialaltonearabic = 64424; e.hehinitialarabic = 65259; e.hehiragana = 12408; e.hehmedialaltonearabic = 64425; e.hehmedialarabic = 65260; e.heiseierasquare = 13179; e.hekatakana = 12504; e.hekatakanahalfwidth = 65421; e.hekutaarusquare = 13110; e.henghook = 615; e.herutusquare = 13113; e.het = 1495; e.hethebrew = 1495; e.hhook = 614; e.hhooksuperior = 689; e.hieuhacirclekorean = 12923; e.hieuhaparenkorean = 12827; e.hieuhcirclekorean = 12909; e.hieuhkorean = 12622; e.hieuhparenkorean = 12813; e.hihiragana = 12402; e.hikatakana = 12498; e.hikatakanahalfwidth = 65419; e.hiriq = 1460; e.hiriq14 = 1460; e.hiriq21 = 1460; e.hiriq2d = 1460; e.hiriqhebrew = 1460; e.hiriqnarrowhebrew = 1460; e.hiriqquarterhebrew = 1460; e.hiriqwidehebrew = 1460; e.hlinebelow = 7830; e.hmonospace = 65352; e.hoarmenian = 1392; e.hohipthai = 3627; e.hohiragana = 12411; e.hokatakana = 12507; e.hokatakanahalfwidth = 65422; e.holam = 1465; e.holam19 = 1465; e.holam26 = 1465; e.holam32 = 1465; e.holamhebrew = 1465; e.holamnarrowhebrew = 1465; e.holamquarterhebrew = 1465; e.holamwidehebrew = 1465; e.honokhukthai = 3630; e.hookabovecomb = 777; e.hookcmb = 777; e.hookpalatalizedbelowcmb = 801; e.hookretroflexbelowcmb = 802; e.hoonsquare = 13122; e.horicoptic = 1001; e.horizontalbar = 8213; e.horncmb = 795; e.hotsprings = 9832; e.house = 8962; e.hparen = 9379; e.hsuperior = 688; e.hturned = 613; e.huhiragana = 12405; e.huiitosquare = 13107; e.hukatakana = 12501; e.hukatakanahalfwidth = 65420; e.hungarumlaut = 733; e.hungarumlautcmb = 779; e.hv = 405; e.hyphen = 45; e.hypheninferior = 63205; e.hyphenmonospace = 65293; e.hyphensmall = 65123; e.hyphensuperior = 63206; e.hyphentwo = 8208; e.i = 105; e.iacute = 237; e.iacyrillic = 1103; e.ibengali = 2439; e.ibopomofo = 12583; e.ibreve = 301; e.icaron = 464; e.icircle = 9432; e.icircumflex = 238; e.icyrillic = 1110; e.idblgrave = 521; e.ideographearthcircle = 12943; e.ideographfirecircle = 12939; e.ideographicallianceparen = 12863; e.ideographiccallparen = 12858; e.ideographiccentrecircle = 12965; e.ideographicclose = 12294; e.ideographiccomma = 12289; e.ideographiccommaleft = 65380; e.ideographiccongratulationparen = 12855; e.ideographiccorrectcircle = 12963; e.ideographicearthparen = 12847; e.ideographicenterpriseparen = 12861; e.ideographicexcellentcircle = 12957; e.ideographicfestivalparen = 12864; e.ideographicfinancialcircle = 12950; e.ideographicfinancialparen = 12854; e.ideographicfireparen = 12843; e.ideographichaveparen = 12850; e.ideographichighcircle = 12964; e.ideographiciterationmark = 12293; e.ideographiclaborcircle = 12952; e.ideographiclaborparen = 12856; e.ideographicleftcircle = 12967; e.ideographiclowcircle = 12966; e.ideographicmedicinecircle = 12969; e.ideographicmetalparen = 12846; e.ideographicmoonparen = 12842; e.ideographicnameparen = 12852; e.ideographicperiod = 12290; e.ideographicprintcircle = 12958; e.ideographicreachparen = 12867; e.ideographicrepresentparen = 12857; e.ideographicresourceparen = 12862; e.ideographicrightcircle = 12968; e.ideographicsecretcircle = 12953; e.ideographicselfparen = 12866; e.ideographicsocietyparen = 12851; e.ideographicspace = 12288; e.ideographicspecialparen = 12853; e.ideographicstockparen = 12849; e.ideographicstudyparen = 12859; e.ideographicsunparen = 12848; e.ideographicsuperviseparen = 12860; e.ideographicwaterparen = 12844; e.ideographicwoodparen = 12845; e.ideographiczero = 12295; e.ideographmetalcircle = 12942; e.ideographmooncircle = 12938; e.ideographnamecircle = 12948; e.ideographsuncircle = 12944; e.ideographwatercircle = 12940; e.ideographwoodcircle = 12941; e.ideva = 2311; e.idieresis = 239; e.idieresisacute = 7727; e.idieresiscyrillic = 1253; e.idotbelow = 7883; e.iebrevecyrillic = 1239; e.iecyrillic = 1077; e.ieungacirclekorean = 12917; e.ieungaparenkorean = 12821; e.ieungcirclekorean = 12903; e.ieungkorean = 12615; e.ieungparenkorean = 12807; e.igrave = 236; e.igujarati = 2695; e.igurmukhi = 2567; e.ihiragana = 12356; e.ihookabove = 7881; e.iibengali = 2440; e.iicyrillic = 1080; e.iideva = 2312; e.iigujarati = 2696; e.iigurmukhi = 2568; e.iimatragurmukhi = 2624; e.iinvertedbreve = 523; e.iishortcyrillic = 1081; e.iivowelsignbengali = 2496; e.iivowelsigndeva = 2368; e.iivowelsigngujarati = 2752; e.ij = 307; e.ikatakana = 12452; e.ikatakanahalfwidth = 65394; e.ikorean = 12643; e.ilde = 732; e.iluyhebrew = 1452; e.imacron = 299; e.imacroncyrillic = 1251; e.imageorapproximatelyequal = 8787; e.imatragurmukhi = 2623; e.imonospace = 65353; e.increment = 8710; e.infinity = 8734; e.iniarmenian = 1387; e.integral = 8747; e.integralbottom = 8993; e.integralbt = 8993; e.integralex = 63733; e.integraltop = 8992; e.integraltp = 8992; e.intersection = 8745; e.intisquare = 13061; e.invbullet = 9688; e.invcircle = 9689; e.invsmileface = 9787; e.iocyrillic = 1105; e.iogonek = 303; e.iota = 953; e.iotadieresis = 970; e.iotadieresistonos = 912; e.iotalatin = 617; e.iotatonos = 943; e.iparen = 9380; e.irigurmukhi = 2674; e.ismallhiragana = 12355; e.ismallkatakana = 12451; e.ismallkatakanahalfwidth = 65384; e.issharbengali = 2554; e.istroke = 616; e.isuperior = 63213; e.iterationhiragana = 12445; e.iterationkatakana = 12541; e.itilde = 297; e.itildebelow = 7725; e.iubopomofo = 12585; e.iucyrillic = 1102; e.ivowelsignbengali = 2495; e.ivowelsigndeva = 2367; e.ivowelsigngujarati = 2751; e.izhitsacyrillic = 1141; e.izhitsadblgravecyrillic = 1143; e.j = 106; e.jaarmenian = 1393; e.jabengali = 2460; e.jadeva = 2332; e.jagujarati = 2716; e.jagurmukhi = 2588; e.jbopomofo = 12560; e.jcaron = 496; e.jcircle = 9433; e.jcircumflex = 309; e.jcrossedtail = 669; e.jdotlessstroke = 607; e.jecyrillic = 1112; e.jeemarabic = 1580; e.jeemfinalarabic = 65182; e.jeeminitialarabic = 65183; e.jeemmedialarabic = 65184; e.jeharabic = 1688; e.jehfinalarabic = 64395; e.jhabengali = 2461; e.jhadeva = 2333; e.jhagujarati = 2717; e.jhagurmukhi = 2589; e.jheharmenian = 1403; e.jis = 12292; e.jmonospace = 65354; e.jparen = 9381; e.jsuperior = 690; e.k = 107; e.kabashkircyrillic = 1185; e.kabengali = 2453; e.kacute = 7729; e.kacyrillic = 1082; e.kadescendercyrillic = 1179; e.kadeva = 2325; e.kaf = 1499; e.kafarabic = 1603; e.kafdagesh = 64315; e.kafdageshhebrew = 64315; e.kaffinalarabic = 65242; e.kafhebrew = 1499; e.kafinitialarabic = 65243; e.kafmedialarabic = 65244; e.kafrafehebrew = 64333; e.kagujarati = 2709; e.kagurmukhi = 2581; e.kahiragana = 12363; e.kahookcyrillic = 1220; e.kakatakana = 12459; e.kakatakanahalfwidth = 65398; e.kappa = 954; e.kappasymbolgreek = 1008; e.kapyeounmieumkorean = 12657; e.kapyeounphieuphkorean = 12676; e.kapyeounpieupkorean = 12664; e.kapyeounssangpieupkorean = 12665; e.karoriisquare = 13069; e.kashidaautoarabic = 1600; e.kashidaautonosidebearingarabic = 1600; e.kasmallkatakana = 12533; e.kasquare = 13188; e.kasraarabic = 1616; e.kasratanarabic = 1613; e.kastrokecyrillic = 1183; e.katahiraprolongmarkhalfwidth = 65392; e.kaverticalstrokecyrillic = 1181; e.kbopomofo = 12558; e.kcalsquare = 13193; e.kcaron = 489; e.kcedilla = 311; e.kcircle = 9434; e.kcommaaccent = 311; e.kdotbelow = 7731; e.keharmenian = 1412; e.kehiragana = 12369; e.kekatakana = 12465; e.kekatakanahalfwidth = 65401; e.kenarmenian = 1391; e.kesmallkatakana = 12534; e.kgreenlandic = 312; e.khabengali = 2454; e.khacyrillic = 1093; e.khadeva = 2326; e.khagujarati = 2710; e.khagurmukhi = 2582; e.khaharabic = 1582; e.khahfinalarabic = 65190; e.khahinitialarabic = 65191; e.khahmedialarabic = 65192; e.kheicoptic = 999; e.khhadeva = 2393; e.khhagurmukhi = 2649; e.khieukhacirclekorean = 12920; e.khieukhaparenkorean = 12824; e.khieukhcirclekorean = 12906; e.khieukhkorean = 12619; e.khieukhparenkorean = 12810; e.khokhaithai = 3586; e.khokhonthai = 3589; e.khokhuatthai = 3587; e.khokhwaithai = 3588; e.khomutthai = 3675; e.khook = 409; e.khorakhangthai = 3590; e.khzsquare = 13201; e.kihiragana = 12365; e.kikatakana = 12461; e.kikatakanahalfwidth = 65399; e.kiroguramusquare = 13077; e.kiromeetorusquare = 13078; e.kirosquare = 13076; e.kiyeokacirclekorean = 12910; e.kiyeokaparenkorean = 12814; e.kiyeokcirclekorean = 12896; e.kiyeokkorean = 12593; e.kiyeokparenkorean = 12800; e.kiyeoksioskorean = 12595; e.kjecyrillic = 1116; e.klinebelow = 7733; e.klsquare = 13208; e.kmcubedsquare = 13222; e.kmonospace = 65355; e.kmsquaredsquare = 13218; e.kohiragana = 12371; e.kohmsquare = 13248; e.kokaithai = 3585; e.kokatakana = 12467; e.kokatakanahalfwidth = 65402; e.kooposquare = 13086; e.koppacyrillic = 1153; e.koreanstandardsymbol = 12927; e.koroniscmb = 835; e.kparen = 9382; e.kpasquare = 13226; e.ksicyrillic = 1135; e.ktsquare = 13263; e.kturned = 670; e.kuhiragana = 12367; e.kukatakana = 12463; e.kukatakanahalfwidth = 65400; e.kvsquare = 13240; e.kwsquare = 13246; e.l = 108; e.labengali = 2482; e.lacute = 314; e.ladeva = 2354; e.lagujarati = 2738; e.lagurmukhi = 2610; e.lakkhangyaothai = 3653; e.lamaleffinalarabic = 65276; e.lamalefhamzaabovefinalarabic = 65272; e.lamalefhamzaaboveisolatedarabic = 65271; e.lamalefhamzabelowfinalarabic = 65274; e.lamalefhamzabelowisolatedarabic = 65273; e.lamalefisolatedarabic = 65275; e.lamalefmaddaabovefinalarabic = 65270; e.lamalefmaddaaboveisolatedarabic = 65269; e.lamarabic = 1604; e.lambda = 955; e.lambdastroke = 411; e.lamed = 1500; e.lameddagesh = 64316; e.lameddageshhebrew = 64316; e.lamedhebrew = 1500; e.lamfinalarabic = 65246; e.lamhahinitialarabic = 64714; e.laminitialarabic = 65247; e.lamjeeminitialarabic = 64713; e.lamkhahinitialarabic = 64715; e.lamlamhehisolatedarabic = 65010; e.lammedialarabic = 65248; e.lammeemhahinitialarabic = 64904; e.lammeeminitialarabic = 64716; e.largecircle = 9711; e.lbar = 410; e.lbelt = 620; e.lbopomofo = 12556; e.lcaron = 318; e.lcedilla = 316; e.lcircle = 9435; e.lcircumflexbelow = 7741; e.lcommaaccent = 316; e.ldot = 320; e.ldotaccent = 320; e.ldotbelow = 7735; e.ldotbelowmacron = 7737; e.leftangleabovecmb = 794; e.lefttackbelowcmb = 792; e.less = 60; e.lessequal = 8804; e.lessequalorgreater = 8922; e.lessmonospace = 65308; e.lessorequivalent = 8818; e.lessorgreater = 8822; e.lessoverequal = 8806; e.lesssmall = 65124; e.lezh = 622; e.lfblock = 9612; e.lhookretroflex = 621; e.lira = 8356; e.liwnarmenian = 1388; e.lj = 457; e.ljecyrillic = 1113; e.ll = 63168; e.lladeva = 2355; e.llagujarati = 2739; e.llinebelow = 7739; e.llladeva = 2356; e.llvocalicbengali = 2529; e.llvocalicdeva = 2401; e.llvocalicvowelsignbengali = 2531; e.llvocalicvowelsigndeva = 2403; e.lmiddletilde = 619; e.lmonospace = 65356; e.lmsquare = 13264; e.lochulathai = 3628; e.logicaland = 8743; e.logicalnot = 172; e.logicalnotreversed = 8976; e.logicalor = 8744; e.lolingthai = 3621; e.longs = 383; e.lowlinecenterline = 65102; e.lowlinecmb = 818; e.lowlinedashed = 65101; e.lozenge = 9674; e.lparen = 9383; e.lslash = 322; e.lsquare = 8467; e.lsuperior = 63214; e.ltshade = 9617; e.luthai = 3622; e.lvocalicbengali = 2444; e.lvocalicdeva = 2316; e.lvocalicvowelsignbengali = 2530; e.lvocalicvowelsigndeva = 2402; e.lxsquare = 13267; e.m = 109; e.mabengali = 2478; e.macron = 175; e.macronbelowcmb = 817; e.macroncmb = 772; e.macronlowmod = 717; e.macronmonospace = 65507; e.macute = 7743; e.madeva = 2350; e.magujarati = 2734; e.magurmukhi = 2606; e.mahapakhhebrew = 1444; e.mahapakhlefthebrew = 1444; e.mahiragana = 12414; e.maichattawalowleftthai = 63637; e.maichattawalowrightthai = 63636; e.maichattawathai = 3659; e.maichattawaupperleftthai = 63635; e.maieklowleftthai = 63628; e.maieklowrightthai = 63627; e.maiekthai = 3656; e.maiekupperleftthai = 63626; e.maihanakatleftthai = 63620; e.maihanakatthai = 3633; e.maitaikhuleftthai = 63625; e.maitaikhuthai = 3655; e.maitholowleftthai = 63631; e.maitholowrightthai = 63630; e.maithothai = 3657; e.maithoupperleftthai = 63629; e.maitrilowleftthai = 63634; e.maitrilowrightthai = 63633; e.maitrithai = 3658; e.maitriupperleftthai = 63632; e.maiyamokthai = 3654; e.makatakana = 12510; e.makatakanahalfwidth = 65423; e.male = 9794; e.mansyonsquare = 13127; e.maqafhebrew = 1470; e.mars = 9794; e.masoracirclehebrew = 1455; e.masquare = 13187; e.mbopomofo = 12551; e.mbsquare = 13268; e.mcircle = 9436; e.mcubedsquare = 13221; e.mdotaccent = 7745; e.mdotbelow = 7747; e.meemarabic = 1605; e.meemfinalarabic = 65250; e.meeminitialarabic = 65251; e.meemmedialarabic = 65252; e.meemmeeminitialarabic = 64721; e.meemmeemisolatedarabic = 64584; e.meetorusquare = 13133; e.mehiragana = 12417; e.meizierasquare = 13182; e.mekatakana = 12513; e.mekatakanahalfwidth = 65426; e.mem = 1502; e.memdagesh = 64318; e.memdageshhebrew = 64318; e.memhebrew = 1502; e.menarmenian = 1396; e.merkhahebrew = 1445; e.merkhakefulahebrew = 1446; e.merkhakefulalefthebrew = 1446; e.merkhalefthebrew = 1445; e.mhook = 625; e.mhzsquare = 13202; e.middledotkatakanahalfwidth = 65381; e.middot = 183; e.mieumacirclekorean = 12914; e.mieumaparenkorean = 12818; e.mieumcirclekorean = 12900; e.mieumkorean = 12609; e.mieumpansioskorean = 12656; e.mieumparenkorean = 12804; e.mieumpieupkorean = 12654; e.mieumsioskorean = 12655; e.mihiragana = 12415; e.mikatakana = 12511; e.mikatakanahalfwidth = 65424; e.minus = 8722; e.minusbelowcmb = 800; e.minuscircle = 8854; e.minusmod = 727; e.minusplus = 8723; e.minute = 8242; e.miribaarusquare = 13130; e.mirisquare = 13129; e.mlonglegturned = 624; e.mlsquare = 13206; e.mmcubedsquare = 13219; e.mmonospace = 65357; e.mmsquaredsquare = 13215; e.mohiragana = 12418; e.mohmsquare = 13249; e.mokatakana = 12514; e.mokatakanahalfwidth = 65427; e.molsquare = 13270; e.momathai = 3617; e.moverssquare = 13223; e.moverssquaredsquare = 13224; e.mparen = 9384; e.mpasquare = 13227; e.mssquare = 13235; e.msuperior = 63215; e.mturned = 623; e.mu = 181; e.mu1 = 181; e.muasquare = 13186; e.muchgreater = 8811; e.muchless = 8810; e.mufsquare = 13196; e.mugreek = 956; e.mugsquare = 13197; e.muhiragana = 12416; e.mukatakana = 12512; e.mukatakanahalfwidth = 65425; e.mulsquare = 13205; e.multiply = 215; e.mumsquare = 13211; e.munahhebrew = 1443; e.munahlefthebrew = 1443; e.musicalnote = 9834; e.musicalnotedbl = 9835; e.musicflatsign = 9837; e.musicsharpsign = 9839; e.mussquare = 13234; e.muvsquare = 13238; e.muwsquare = 13244; e.mvmegasquare = 13241; e.mvsquare = 13239; e.mwmegasquare = 13247; e.mwsquare = 13245; e.n = 110; e.nabengali = 2472; e.nabla = 8711; e.nacute = 324; e.nadeva = 2344; e.nagujarati = 2728; e.nagurmukhi = 2600; e.nahiragana = 12394; e.nakatakana = 12490; e.nakatakanahalfwidth = 65413; e.napostrophe = 329; e.nasquare = 13185; e.nbopomofo = 12555; e.nbspace = 160; e.ncaron = 328; e.ncedilla = 326; e.ncircle = 9437; e.ncircumflexbelow = 7755; e.ncommaaccent = 326; e.ndotaccent = 7749; e.ndotbelow = 7751; e.nehiragana = 12397; e.nekatakana = 12493; e.nekatakanahalfwidth = 65416; e.newsheqelsign = 8362; e.nfsquare = 13195; e.ngabengali = 2457; e.ngadeva = 2329; e.ngagujarati = 2713; e.ngagurmukhi = 2585; e.ngonguthai = 3591; e.nhiragana = 12435; e.nhookleft = 626; e.nhookretroflex = 627; e.nieunacirclekorean = 12911; e.nieunaparenkorean = 12815; e.nieuncieuckorean = 12597; e.nieuncirclekorean = 12897; e.nieunhieuhkorean = 12598; e.nieunkorean = 12596; e.nieunpansioskorean = 12648; e.nieunparenkorean = 12801; e.nieunsioskorean = 12647; e.nieuntikeutkorean = 12646; e.nihiragana = 12395; e.nikatakana = 12491; e.nikatakanahalfwidth = 65414; e.nikhahitleftthai = 63641; e.nikhahitthai = 3661; e.nine = 57; e.ninearabic = 1641; e.ninebengali = 2543; e.ninecircle = 9320; e.ninecircleinversesansserif = 10130; e.ninedeva = 2415; e.ninegujarati = 2799; e.ninegurmukhi = 2671; e.ninehackarabic = 1641; e.ninehangzhou = 12329; e.nineideographicparen = 12840; e.nineinferior = 8329; e.ninemonospace = 65305; e.nineoldstyle = 63289; e.nineparen = 9340; e.nineperiod = 9360; e.ninepersian = 1785; e.nineroman = 8568; e.ninesuperior = 8313; e.nineteencircle = 9330; e.nineteenparen = 9350; e.nineteenperiod = 9370; e.ninethai = 3673; e.nj = 460; e.njecyrillic = 1114; e.nkatakana = 12531; e.nkatakanahalfwidth = 65437; e.nlegrightlong = 414; e.nlinebelow = 7753; e.nmonospace = 65358; e.nmsquare = 13210; e.nnabengali = 2467; e.nnadeva = 2339; e.nnagujarati = 2723; e.nnagurmukhi = 2595; e.nnnadeva = 2345; e.nohiragana = 12398; e.nokatakana = 12494; e.nokatakanahalfwidth = 65417; e.nonbreakingspace = 160; e.nonenthai = 3603; e.nonuthai = 3609; e.noonarabic = 1606; e.noonfinalarabic = 65254; e.noonghunnaarabic = 1722; e.noonghunnafinalarabic = 64415; e.nooninitialarabic = 65255; e.noonjeeminitialarabic = 64722; e.noonjeemisolatedarabic = 64587; e.noonmedialarabic = 65256; e.noonmeeminitialarabic = 64725; e.noonmeemisolatedarabic = 64590; e.noonnoonfinalarabic = 64653; e.notcontains = 8716; e.notelement = 8713; e.notelementof = 8713; e.notequal = 8800; e.notgreater = 8815; e.notgreaternorequal = 8817; e.notgreaternorless = 8825; e.notidentical = 8802; e.notless = 8814; e.notlessnorequal = 8816; e.notparallel = 8742; e.notprecedes = 8832; e.notsubset = 8836; e.notsucceeds = 8833; e.notsuperset = 8837; e.nowarmenian = 1398; e.nparen = 9385; e.nssquare = 13233; e.nsuperior = 8319; e.ntilde = 241; e.nu = 957; e.nuhiragana = 12396; e.nukatakana = 12492; e.nukatakanahalfwidth = 65415; e.nuktabengali = 2492; e.nuktadeva = 2364; e.nuktagujarati = 2748; e.nuktagurmukhi = 2620; e.numbersign = 35; e.numbersignmonospace = 65283; e.numbersignsmall = 65119; e.numeralsigngreek = 884; e.numeralsignlowergreek = 885; e.numero = 8470; e.nun = 1504; e.nundagesh = 64320; e.nundageshhebrew = 64320; e.nunhebrew = 1504; e.nvsquare = 13237; e.nwsquare = 13243; e.nyabengali = 2462; e.nyadeva = 2334; e.nyagujarati = 2718; e.nyagurmukhi = 2590; e.o = 111; e.oacute = 243; e.oangthai = 3629; e.obarred = 629; e.obarredcyrillic = 1257; e.obarreddieresiscyrillic = 1259; e.obengali = 2451; e.obopomofo = 12571; e.obreve = 335; e.ocandradeva = 2321; e.ocandragujarati = 2705; e.ocandravowelsigndeva = 2377; e.ocandravowelsigngujarati = 2761; e.ocaron = 466; e.ocircle = 9438; e.ocircumflex = 244; e.ocircumflexacute = 7889; e.ocircumflexdotbelow = 7897; e.ocircumflexgrave = 7891; e.ocircumflexhookabove = 7893; e.ocircumflextilde = 7895; e.ocyrillic = 1086; e.odblacute = 337; e.odblgrave = 525; e.odeva = 2323; e.odieresis = 246; e.odieresiscyrillic = 1255; e.odotbelow = 7885; e.oe = 339; e.oekorean = 12634; e.ogonek = 731; e.ogonekcmb = 808; e.ograve = 242; e.ogujarati = 2707; e.oharmenian = 1413; e.ohiragana = 12362; e.ohookabove = 7887; e.ohorn = 417; e.ohornacute = 7899; e.ohorndotbelow = 7907; e.ohorngrave = 7901; e.ohornhookabove = 7903; e.ohorntilde = 7905; e.ohungarumlaut = 337; e.oi = 419; e.oinvertedbreve = 527; e.okatakana = 12458; e.okatakanahalfwidth = 65397; e.okorean = 12631; e.olehebrew = 1451; e.omacron = 333; e.omacronacute = 7763; e.omacrongrave = 7761; e.omdeva = 2384; e.omega = 969; e.omega1 = 982; e.omegacyrillic = 1121; e.omegalatinclosed = 631; e.omegaroundcyrillic = 1147; e.omegatitlocyrillic = 1149; e.omegatonos = 974; e.omgujarati = 2768; e.omicron = 959; e.omicrontonos = 972; e.omonospace = 65359; e.one = 49; e.onearabic = 1633; e.onebengali = 2535; e.onecircle = 9312; e.onecircleinversesansserif = 10122; e.onedeva = 2407; e.onedotenleader = 8228; e.oneeighth = 8539; e.onefitted = 63196; e.onegujarati = 2791; e.onegurmukhi = 2663; e.onehackarabic = 1633; e.onehalf = 189; e.onehangzhou = 12321; e.oneideographicparen = 12832; e.oneinferior = 8321; e.onemonospace = 65297; e.onenumeratorbengali = 2548; e.oneoldstyle = 63281; e.oneparen = 9332; e.oneperiod = 9352; e.onepersian = 1777; e.onequarter = 188; e.oneroman = 8560; e.onesuperior = 185; e.onethai = 3665; e.onethird = 8531; e.oogonek = 491; e.oogonekmacron = 493; e.oogurmukhi = 2579; e.oomatragurmukhi = 2635; e.oopen = 596; e.oparen = 9386; e.openbullet = 9702; e.option = 8997; e.ordfeminine = 170; e.ordmasculine = 186; e.orthogonal = 8735; e.oshortdeva = 2322; e.oshortvowelsigndeva = 2378; e.oslash = 248; e.oslashacute = 511; e.osmallhiragana = 12361; e.osmallkatakana = 12457; e.osmallkatakanahalfwidth = 65387; e.ostrokeacute = 511; e.osuperior = 63216; e.otcyrillic = 1151; e.otilde = 245; e.otildeacute = 7757; e.otildedieresis = 7759; e.oubopomofo = 12577; e.overline = 8254; e.overlinecenterline = 65098; e.overlinecmb = 773; e.overlinedashed = 65097; e.overlinedblwavy = 65100; e.overlinewavy = 65099; e.overscore = 175; e.ovowelsignbengali = 2507; e.ovowelsigndeva = 2379; e.ovowelsigngujarati = 2763; e.p = 112; e.paampssquare = 13184; e.paasentosquare = 13099; e.pabengali = 2474; e.pacute = 7765; e.padeva = 2346; e.pagedown = 8671; e.pageup = 8670; e.pagujarati = 2730; e.pagurmukhi = 2602; e.pahiragana = 12401; e.paiyannoithai = 3631; e.pakatakana = 12497; e.palatalizationcyrilliccmb = 1156; e.palochkacyrillic = 1216; e.pansioskorean = 12671; e.paragraph = 182; e.parallel = 8741; e.parenleft = 40; e.parenleftaltonearabic = 64830; e.parenleftbt = 63725; e.parenleftex = 63724; e.parenleftinferior = 8333; e.parenleftmonospace = 65288; e.parenleftsmall = 65113; e.parenleftsuperior = 8317; e.parenlefttp = 63723; e.parenleftvertical = 65077; e.parenright = 41; e.parenrightaltonearabic = 64831; e.parenrightbt = 63736; e.parenrightex = 63735; e.parenrightinferior = 8334; e.parenrightmonospace = 65289; e.parenrightsmall = 65114; e.parenrightsuperior = 8318; e.parenrighttp = 63734; e.parenrightvertical = 65078; e.partialdiff = 8706; e.paseqhebrew = 1472; e.pashtahebrew = 1433; e.pasquare = 13225; e.patah = 1463; e.patah11 = 1463; e.patah1d = 1463; e.patah2a = 1463; e.patahhebrew = 1463; e.patahnarrowhebrew = 1463; e.patahquarterhebrew = 1463; e.patahwidehebrew = 1463; e.pazerhebrew = 1441; e.pbopomofo = 12550; e.pcircle = 9439; e.pdotaccent = 7767; e.pe = 1508; e.pecyrillic = 1087; e.pedagesh = 64324; e.pedageshhebrew = 64324; e.peezisquare = 13115; e.pefinaldageshhebrew = 64323; e.peharabic = 1662; e.peharmenian = 1402; e.pehebrew = 1508; e.pehfinalarabic = 64343; e.pehinitialarabic = 64344; e.pehiragana = 12410; e.pehmedialarabic = 64345; e.pekatakana = 12506; e.pemiddlehookcyrillic = 1191; e.perafehebrew = 64334; e.percent = 37; e.percentarabic = 1642; e.percentmonospace = 65285; e.percentsmall = 65130; e.period = 46; e.periodarmenian = 1417; e.periodcentered = 183; e.periodhalfwidth = 65377; e.periodinferior = 63207; e.periodmonospace = 65294; e.periodsmall = 65106; e.periodsuperior = 63208; e.perispomenigreekcmb = 834; e.perpendicular = 8869; e.perthousand = 8240; e.peseta = 8359; e.pfsquare = 13194; e.phabengali = 2475; e.phadeva = 2347; e.phagujarati = 2731; e.phagurmukhi = 2603; e.phi = 966; e.phi1 = 981; e.phieuphacirclekorean = 12922; e.phieuphaparenkorean = 12826; e.phieuphcirclekorean = 12908; e.phieuphkorean = 12621; e.phieuphparenkorean = 12812; e.philatin = 632; e.phinthuthai = 3642; e.phisymbolgreek = 981; e.phook = 421; e.phophanthai = 3614; e.phophungthai = 3612; e.phosamphaothai = 3616; e.pi = 960; e.pieupacirclekorean = 12915; e.pieupaparenkorean = 12819; e.pieupcieuckorean = 12662; e.pieupcirclekorean = 12901; e.pieupkiyeokkorean = 12658; e.pieupkorean = 12610; e.pieupparenkorean = 12805; e.pieupsioskiyeokkorean = 12660; e.pieupsioskorean = 12612; e.pieupsiostikeutkorean = 12661; e.pieupthieuthkorean = 12663; e.pieuptikeutkorean = 12659; e.pihiragana = 12404; e.pikatakana = 12500; e.pisymbolgreek = 982; e.piwrarmenian = 1411; e.plus = 43; e.plusbelowcmb = 799; e.pluscircle = 8853; e.plusminus = 177; e.plusmod = 726; e.plusmonospace = 65291; e.plussmall = 65122; e.plussuperior = 8314; e.pmonospace = 65360; e.pmsquare = 13272; e.pohiragana = 12413; e.pointingindexdownwhite = 9759; e.pointingindexleftwhite = 9756; e.pointingindexrightwhite = 9758; e.pointingindexupwhite = 9757; e.pokatakana = 12509; e.poplathai = 3611; e.postalmark = 12306; e.postalmarkface = 12320; e.pparen = 9387; e.precedes = 8826; e.prescription = 8478; e.primemod = 697; e.primereversed = 8245; e.product = 8719; e.projective = 8965; e.prolongedkana = 12540; e.propellor = 8984; e.propersubset = 8834; e.propersuperset = 8835; e.proportion = 8759; e.proportional = 8733; e.psi = 968; e.psicyrillic = 1137; e.psilipneumatacyrilliccmb = 1158; e.pssquare = 13232; e.puhiragana = 12407; e.pukatakana = 12503; e.pvsquare = 13236; e.pwsquare = 13242; e.q = 113; e.qadeva = 2392; e.qadmahebrew = 1448; e.qafarabic = 1602; e.qaffinalarabic = 65238; e.qafinitialarabic = 65239; e.qafmedialarabic = 65240; e.qamats = 1464; e.qamats10 = 1464; e.qamats1a = 1464; e.qamats1c = 1464; e.qamats27 = 1464; e.qamats29 = 1464; e.qamats33 = 1464; e.qamatsde = 1464; e.qamatshebrew = 1464; e.qamatsnarrowhebrew = 1464; e.qamatsqatanhebrew = 1464; e.qamatsqatannarrowhebrew = 1464; e.qamatsqatanquarterhebrew = 1464; e.qamatsqatanwidehebrew = 1464; e.qamatsquarterhebrew = 1464; e.qamatswidehebrew = 1464; e.qarneyparahebrew = 1439; e.qbopomofo = 12561; e.qcircle = 9440; e.qhook = 672; e.qmonospace = 65361; e.qof = 1511; e.qofdagesh = 64327; e.qofdageshhebrew = 64327; e.qofhebrew = 1511; e.qparen = 9388; e.quarternote = 9833; e.qubuts = 1467; e.qubuts18 = 1467; e.qubuts25 = 1467; e.qubuts31 = 1467; e.qubutshebrew = 1467; e.qubutsnarrowhebrew = 1467; e.qubutsquarterhebrew = 1467; e.qubutswidehebrew = 1467; e.question = 63; e.questionarabic = 1567; e.questionarmenian = 1374; e.questiondown = 191; e.questiondownsmall = 63423; e.questiongreek = 894; e.questionmonospace = 65311; e.questionsmall = 63295; e.quotedbl = 34; e.quotedblbase = 8222; e.quotedblleft = 8220; e.quotedblmonospace = 65282; e.quotedblprime = 12318; e.quotedblprimereversed = 12317; e.quotedblright = 8221; e.quoteleft = 8216; e.quoteleftreversed = 8219; e.quotereversed = 8219; e.quoteright = 8217; e.quoterightn = 329; e.quotesinglbase = 8218; e.quotesingle = 39; e.quotesinglemonospace = 65287; e.r = 114; e.raarmenian = 1404; e.rabengali = 2480; e.racute = 341; e.radeva = 2352; e.radical = 8730; e.radicalex = 63717; e.radoverssquare = 13230; e.radoverssquaredsquare = 13231; e.radsquare = 13229; e.rafe = 1471; e.rafehebrew = 1471; e.ragujarati = 2736; e.ragurmukhi = 2608; e.rahiragana = 12425; e.rakatakana = 12521; e.rakatakanahalfwidth = 65431; e.ralowerdiagonalbengali = 2545; e.ramiddlediagonalbengali = 2544; e.ramshorn = 612; e.ratio = 8758; e.rbopomofo = 12566; e.rcaron = 345; e.rcedilla = 343; e.rcircle = 9441; e.rcommaaccent = 343; e.rdblgrave = 529; e.rdotaccent = 7769; e.rdotbelow = 7771; e.rdotbelowmacron = 7773; e.referencemark = 8251; e.reflexsubset = 8838; e.reflexsuperset = 8839; e.registered = 174; e.registersans = 63720; e.registerserif = 63194; e.reharabic = 1585; e.reharmenian = 1408; e.rehfinalarabic = 65198; e.rehiragana = 12428; e.rekatakana = 12524; e.rekatakanahalfwidth = 65434; e.resh = 1512; e.reshdageshhebrew = 64328; e.reshhebrew = 1512; e.reversedtilde = 8765; e.reviahebrew = 1431; e.reviamugrashhebrew = 1431; e.revlogicalnot = 8976; e.rfishhook = 638; e.rfishhookreversed = 639; e.rhabengali = 2525; e.rhadeva = 2397; e.rho = 961; e.rhook = 637; e.rhookturned = 635; e.rhookturnedsuperior = 693; e.rhosymbolgreek = 1009; e.rhotichookmod = 734; e.rieulacirclekorean = 12913; e.rieulaparenkorean = 12817; e.rieulcirclekorean = 12899; e.rieulhieuhkorean = 12608; e.rieulkiyeokkorean = 12602; e.rieulkiyeoksioskorean = 12649; e.rieulkorean = 12601; e.rieulmieumkorean = 12603; e.rieulpansioskorean = 12652; e.rieulparenkorean = 12803; e.rieulphieuphkorean = 12607; e.rieulpieupkorean = 12604; e.rieulpieupsioskorean = 12651; e.rieulsioskorean = 12605; e.rieulthieuthkorean = 12606; e.rieultikeutkorean = 12650; e.rieulyeorinhieuhkorean = 12653; e.rightangle = 8735; e.righttackbelowcmb = 793; e.righttriangle = 8895; e.rihiragana = 12426; e.rikatakana = 12522; e.rikatakanahalfwidth = 65432; e.ring = 730; e.ringbelowcmb = 805; e.ringcmb = 778; e.ringhalfleft = 703; e.ringhalfleftarmenian = 1369; e.ringhalfleftbelowcmb = 796; e.ringhalfleftcentered = 723; e.ringhalfright = 702; e.ringhalfrightbelowcmb = 825; e.ringhalfrightcentered = 722; e.rinvertedbreve = 531; e.rittorusquare = 13137; e.rlinebelow = 7775; e.rlongleg = 636; e.rlonglegturned = 634; e.rmonospace = 65362; e.rohiragana = 12429; e.rokatakana = 12525; e.rokatakanahalfwidth = 65435; e.roruathai = 3619; e.rparen = 9389; e.rrabengali = 2524; e.rradeva = 2353; e.rragurmukhi = 2652; e.rreharabic = 1681; e.rrehfinalarabic = 64397; e.rrvocalicbengali = 2528; e.rrvocalicdeva = 2400; e.rrvocalicgujarati = 2784; e.rrvocalicvowelsignbengali = 2500; e.rrvocalicvowelsigndeva = 2372; e.rrvocalicvowelsigngujarati = 2756; e.rsuperior = 63217; e.rtblock = 9616; e.rturned = 633; e.rturnedsuperior = 692; e.ruhiragana = 12427; e.rukatakana = 12523; e.rukatakanahalfwidth = 65433; e.rupeemarkbengali = 2546; e.rupeesignbengali = 2547; e.rupiah = 63197; e.ruthai = 3620; e.rvocalicbengali = 2443; e.rvocalicdeva = 2315; e.rvocalicgujarati = 2699; e.rvocalicvowelsignbengali = 2499; e.rvocalicvowelsigndeva = 2371; e.rvocalicvowelsigngujarati = 2755; e.s = 115; e.sabengali = 2488; e.sacute = 347; e.sacutedotaccent = 7781; e.sadarabic = 1589; e.sadeva = 2360; e.sadfinalarabic = 65210; e.sadinitialarabic = 65211; e.sadmedialarabic = 65212; e.sagujarati = 2744; e.sagurmukhi = 2616; e.sahiragana = 12373; e.sakatakana = 12469; e.sakatakanahalfwidth = 65403; e.sallallahoualayhewasallamarabic = 65018; e.samekh = 1505; e.samekhdagesh = 64321; e.samekhdageshhebrew = 64321; e.samekhhebrew = 1505; e.saraaathai = 3634; e.saraaethai = 3649; e.saraaimaimalaithai = 3652; e.saraaimaimuanthai = 3651; e.saraamthai = 3635; e.saraathai = 3632; e.saraethai = 3648; e.saraiileftthai = 63622; e.saraiithai = 3637; e.saraileftthai = 63621; e.saraithai = 3636; e.saraothai = 3650; e.saraueeleftthai = 63624; e.saraueethai = 3639; e.saraueleftthai = 63623; e.sarauethai = 3638; e.sarauthai = 3640; e.sarauuthai = 3641; e.sbopomofo = 12569; e.scaron = 353; e.scarondotaccent = 7783; e.scedilla = 351; e.schwa = 601; e.schwacyrillic = 1241; e.schwadieresiscyrillic = 1243; e.schwahook = 602; e.scircle = 9442; e.scircumflex = 349; e.scommaaccent = 537; e.sdotaccent = 7777; e.sdotbelow = 7779; e.sdotbelowdotaccent = 7785; e.seagullbelowcmb = 828; e.second = 8243; e.secondtonechinese = 714; e.section = 167; e.seenarabic = 1587; e.seenfinalarabic = 65202; e.seeninitialarabic = 65203; e.seenmedialarabic = 65204; e.segol = 1462; e.segol13 = 1462; e.segol1f = 1462; e.segol2c = 1462; e.segolhebrew = 1462; e.segolnarrowhebrew = 1462; e.segolquarterhebrew = 1462; e.segoltahebrew = 1426; e.segolwidehebrew = 1462; e.seharmenian = 1405; e.sehiragana = 12379; e.sekatakana = 12475; e.sekatakanahalfwidth = 65406; e.semicolon = 59; e.semicolonarabic = 1563; e.semicolonmonospace = 65307; e.semicolonsmall = 65108; e.semivoicedmarkkana = 12444; e.semivoicedmarkkanahalfwidth = 65439; e.sentisquare = 13090; e.sentosquare = 13091; e.seven = 55; e.sevenarabic = 1639; e.sevenbengali = 2541; e.sevencircle = 9318; e.sevencircleinversesansserif = 10128; e.sevendeva = 2413; e.seveneighths = 8542; e.sevengujarati = 2797; e.sevengurmukhi = 2669; e.sevenhackarabic = 1639; e.sevenhangzhou = 12327; e.sevenideographicparen = 12838; e.seveninferior = 8327; e.sevenmonospace = 65303; e.sevenoldstyle = 63287; e.sevenparen = 9338; e.sevenperiod = 9358; e.sevenpersian = 1783; e.sevenroman = 8566; e.sevensuperior = 8311; e.seventeencircle = 9328; e.seventeenparen = 9348; e.seventeenperiod = 9368; e.seventhai = 3671; e.sfthyphen = 173; e.shaarmenian = 1399; e.shabengali = 2486; e.shacyrillic = 1096; e.shaddaarabic = 1617; e.shaddadammaarabic = 64609; e.shaddadammatanarabic = 64606; e.shaddafathaarabic = 64608; e.shaddakasraarabic = 64610; e.shaddakasratanarabic = 64607; e.shade = 9618; e.shadedark = 9619; e.shadelight = 9617; e.shademedium = 9618; e.shadeva = 2358; e.shagujarati = 2742; e.shagurmukhi = 2614; e.shalshelethebrew = 1427; e.shbopomofo = 12565; e.shchacyrillic = 1097; e.sheenarabic = 1588; e.sheenfinalarabic = 65206; e.sheeninitialarabic = 65207; e.sheenmedialarabic = 65208; e.sheicoptic = 995; e.sheqel = 8362; e.sheqelhebrew = 8362; e.sheva = 1456; e.sheva115 = 1456; e.sheva15 = 1456; e.sheva22 = 1456; e.sheva2e = 1456; e.shevahebrew = 1456; e.shevanarrowhebrew = 1456; e.shevaquarterhebrew = 1456; e.shevawidehebrew = 1456; e.shhacyrillic = 1211; e.shimacoptic = 1005; e.shin = 1513; e.shindagesh = 64329; e.shindageshhebrew = 64329; e.shindageshshindot = 64300; e.shindageshshindothebrew = 64300; e.shindageshsindot = 64301; e.shindageshsindothebrew = 64301; e.shindothebrew = 1473; e.shinhebrew = 1513; e.shinshindot = 64298; e.shinshindothebrew = 64298; e.shinsindot = 64299; e.shinsindothebrew = 64299; e.shook = 642; e.sigma = 963; e.sigma1 = 962; e.sigmafinal = 962; e.sigmalunatesymbolgreek = 1010; e.sihiragana = 12375; e.sikatakana = 12471; e.sikatakanahalfwidth = 65404; e.siluqhebrew = 1469; e.siluqlefthebrew = 1469; e.similar = 8764; e.sindothebrew = 1474; e.siosacirclekorean = 12916; e.siosaparenkorean = 12820; e.sioscieuckorean = 12670; e.sioscirclekorean = 12902; e.sioskiyeokkorean = 12666; e.sioskorean = 12613; e.siosnieunkorean = 12667; e.siosparenkorean = 12806; e.siospieupkorean = 12669; e.siostikeutkorean = 12668; e.six = 54; e.sixarabic = 1638; e.sixbengali = 2540; e.sixcircle = 9317; e.sixcircleinversesansserif = 10127; e.sixdeva = 2412; e.sixgujarati = 2796; e.sixgurmukhi = 2668; e.sixhackarabic = 1638; e.sixhangzhou = 12326; e.sixideographicparen = 12837; e.sixinferior = 8326; e.sixmonospace = 65302; e.sixoldstyle = 63286; e.sixparen = 9337; e.sixperiod = 9357; e.sixpersian = 1782; e.sixroman = 8565; e.sixsuperior = 8310; e.sixteencircle = 9327; e.sixteencurrencydenominatorbengali = 2553; e.sixteenparen = 9347; e.sixteenperiod = 9367; e.sixthai = 3670; e.slash = 47; e.slashmonospace = 65295; e.slong = 383; e.slongdotaccent = 7835; e.smileface = 9786; e.smonospace = 65363; e.sofpasuqhebrew = 1475; e.softhyphen = 173; e.softsigncyrillic = 1100; e.sohiragana = 12381; e.sokatakana = 12477; e.sokatakanahalfwidth = 65407; e.soliduslongoverlaycmb = 824; e.solidusshortoverlaycmb = 823; e.sorusithai = 3625; e.sosalathai = 3624; e.sosothai = 3595; e.sosuathai = 3626; e.space = 32; e.spacehackarabic = 32; e.spade = 9824; e.spadesuitblack = 9824; e.spadesuitwhite = 9828; e.sparen = 9390; e.squarebelowcmb = 827; e.squarecc = 13252; e.squarecm = 13213; e.squarediagonalcrosshatchfill = 9641; e.squarehorizontalfill = 9636; e.squarekg = 13199; e.squarekm = 13214; e.squarekmcapital = 13262; e.squareln = 13265; e.squarelog = 13266; e.squaremg = 13198; e.squaremil = 13269; e.squaremm = 13212; e.squaremsquared = 13217; e.squareorthogonalcrosshatchfill = 9638; e.squareupperlefttolowerrightfill = 9639; e.squareupperrighttolowerleftfill = 9640; e.squareverticalfill = 9637; e.squarewhitewithsmallblack = 9635; e.srsquare = 13275; e.ssabengali = 2487; e.ssadeva = 2359; e.ssagujarati = 2743; e.ssangcieuckorean = 12617; e.ssanghieuhkorean = 12677; e.ssangieungkorean = 12672; e.ssangkiyeokkorean = 12594; e.ssangnieunkorean = 12645; e.ssangpieupkorean = 12611; e.ssangsioskorean = 12614; e.ssangtikeutkorean = 12600; e.ssuperior = 63218; e.sterling = 163; e.sterlingmonospace = 65505; e.strokelongoverlaycmb = 822; e.strokeshortoverlaycmb = 821; e.subset = 8834; e.subsetnotequal = 8842; e.subsetorequal = 8838; e.succeeds = 8827; e.suchthat = 8715; e.suhiragana = 12377; e.sukatakana = 12473; e.sukatakanahalfwidth = 65405; e.sukunarabic = 1618; e.summation = 8721; e.sun = 9788; e.superset = 8835; e.supersetnotequal = 8843; e.supersetorequal = 8839; e.svsquare = 13276; e.syouwaerasquare = 13180; e.t = 116; e.tabengali = 2468; e.tackdown = 8868; e.tackleft = 8867; e.tadeva = 2340; e.tagujarati = 2724; e.tagurmukhi = 2596; e.taharabic = 1591; e.tahfinalarabic = 65218; e.tahinitialarabic = 65219; e.tahiragana = 12383; e.tahmedialarabic = 65220; e.taisyouerasquare = 13181; e.takatakana = 12479; e.takatakanahalfwidth = 65408; e.tatweelarabic = 1600; e.tau = 964; e.tav = 1514; e.tavdages = 64330; e.tavdagesh = 64330; e.tavdageshhebrew = 64330; e.tavhebrew = 1514; e.tbar = 359; e.tbopomofo = 12554; e.tcaron = 357; e.tccurl = 680; e.tcedilla = 355; e.tcheharabic = 1670; e.tchehfinalarabic = 64379; e.tchehinitialarabic = 64380; e.tchehmedialarabic = 64381; e.tcircle = 9443; e.tcircumflexbelow = 7793; e.tcommaaccent = 355; e.tdieresis = 7831; e.tdotaccent = 7787; e.tdotbelow = 7789; e.tecyrillic = 1090; e.tedescendercyrillic = 1197; e.teharabic = 1578; e.tehfinalarabic = 65174; e.tehhahinitialarabic = 64674; e.tehhahisolatedarabic = 64524; e.tehinitialarabic = 65175; e.tehiragana = 12390; e.tehjeeminitialarabic = 64673; e.tehjeemisolatedarabic = 64523; e.tehmarbutaarabic = 1577; e.tehmarbutafinalarabic = 65172; e.tehmedialarabic = 65176; e.tehmeeminitialarabic = 64676; e.tehmeemisolatedarabic = 64526; e.tehnoonfinalarabic = 64627; e.tekatakana = 12486; e.tekatakanahalfwidth = 65411; e.telephone = 8481; e.telephoneblack = 9742; e.telishagedolahebrew = 1440; e.telishaqetanahebrew = 1449; e.tencircle = 9321; e.tenideographicparen = 12841; e.tenparen = 9341; e.tenperiod = 9361; e.tenroman = 8569; e.tesh = 679; e.tet = 1496; e.tetdagesh = 64312; e.tetdageshhebrew = 64312; e.tethebrew = 1496; e.tetsecyrillic = 1205; e.tevirhebrew = 1435; e.tevirlefthebrew = 1435; e.thabengali = 2469; e.thadeva = 2341; e.thagujarati = 2725; e.thagurmukhi = 2597; e.thalarabic = 1584; e.thalfinalarabic = 65196; e.thanthakhatlowleftthai = 63640; e.thanthakhatlowrightthai = 63639; e.thanthakhatthai = 3660; e.thanthakhatupperleftthai = 63638; e.theharabic = 1579; e.thehfinalarabic = 65178; e.thehinitialarabic = 65179; e.thehmedialarabic = 65180; e.thereexists = 8707; e.therefore = 8756; e.theta = 952; e.theta1 = 977; e.thetasymbolgreek = 977; e.thieuthacirclekorean = 12921; e.thieuthaparenkorean = 12825; e.thieuthcirclekorean = 12907; e.thieuthkorean = 12620; e.thieuthparenkorean = 12811; e.thirteencircle = 9324; e.thirteenparen = 9344; e.thirteenperiod = 9364; e.thonangmonthothai = 3601; e.thook = 429; e.thophuthaothai = 3602; e.thorn = 254; e.thothahanthai = 3607; e.thothanthai = 3600; e.thothongthai = 3608; e.thothungthai = 3606; e.thousandcyrillic = 1154; e.thousandsseparatorarabic = 1644; e.thousandsseparatorpersian = 1644; e.three = 51; e.threearabic = 1635; e.threebengali = 2537; e.threecircle = 9314; e.threecircleinversesansserif = 10124; e.threedeva = 2409; e.threeeighths = 8540; e.threegujarati = 2793; e.threegurmukhi = 2665; e.threehackarabic = 1635; e.threehangzhou = 12323; e.threeideographicparen = 12834; e.threeinferior = 8323; e.threemonospace = 65299; e.threenumeratorbengali = 2550; e.threeoldstyle = 63283; e.threeparen = 9334; e.threeperiod = 9354; e.threepersian = 1779; e.threequarters = 190; e.threequartersemdash = 63198; e.threeroman = 8562; e.threesuperior = 179; e.threethai = 3667; e.thzsquare = 13204; e.tihiragana = 12385; e.tikatakana = 12481; e.tikatakanahalfwidth = 65409; e.tikeutacirclekorean = 12912; e.tikeutaparenkorean = 12816; e.tikeutcirclekorean = 12898; e.tikeutkorean = 12599; e.tikeutparenkorean = 12802; e.tilde = 732; e.tildebelowcmb = 816; e.tildecmb = 771; e.tildecomb = 771; e.tildedoublecmb = 864; e.tildeoperator = 8764; e.tildeoverlaycmb = 820; e.tildeverticalcmb = 830; e.timescircle = 8855; e.tipehahebrew = 1430; e.tipehalefthebrew = 1430; e.tippigurmukhi = 2672; e.titlocyrilliccmb = 1155; e.tiwnarmenian = 1407; e.tlinebelow = 7791; e.tmonospace = 65364; e.toarmenian = 1385; e.tohiragana = 12392; e.tokatakana = 12488; e.tokatakanahalfwidth = 65412; e.tonebarextrahighmod = 741; e.tonebarextralowmod = 745; e.tonebarhighmod = 742; e.tonebarlowmod = 744; e.tonebarmidmod = 743; e.tonefive = 445; e.tonesix = 389; e.tonetwo = 424; e.tonos = 900; e.tonsquare = 13095; e.topatakthai = 3599; e.tortoiseshellbracketleft = 12308; e.tortoiseshellbracketleftsmall = 65117; e.tortoiseshellbracketleftvertical = 65081; e.tortoiseshellbracketright = 12309; e.tortoiseshellbracketrightsmall = 65118; e.tortoiseshellbracketrightvertical = 65082; e.totaothai = 3605; e.tpalatalhook = 427; e.tparen = 9391; e.trademark = 8482; e.trademarksans = 63722; e.trademarkserif = 63195; e.tretroflexhook = 648; e.triagdn = 9660; e.triaglf = 9668; e.triagrt = 9658; e.triagup = 9650; e.ts = 678; e.tsadi = 1510; e.tsadidagesh = 64326; e.tsadidageshhebrew = 64326; e.tsadihebrew = 1510; e.tsecyrillic = 1094; e.tsere = 1461; e.tsere12 = 1461; e.tsere1e = 1461; e.tsere2b = 1461; e.tserehebrew = 1461; e.tserenarrowhebrew = 1461; e.tserequarterhebrew = 1461; e.tserewidehebrew = 1461; e.tshecyrillic = 1115; e.tsuperior = 63219; e.ttabengali = 2463; e.ttadeva = 2335; e.ttagujarati = 2719; e.ttagurmukhi = 2591; e.tteharabic = 1657; e.ttehfinalarabic = 64359; e.ttehinitialarabic = 64360; e.ttehmedialarabic = 64361; e.tthabengali = 2464; e.tthadeva = 2336; e.tthagujarati = 2720; e.tthagurmukhi = 2592; e.tturned = 647; e.tuhiragana = 12388; e.tukatakana = 12484; e.tukatakanahalfwidth = 65410; e.tusmallhiragana = 12387; e.tusmallkatakana = 12483; e.tusmallkatakanahalfwidth = 65391; e.twelvecircle = 9323; e.twelveparen = 9343; e.twelveperiod = 9363; e.twelveroman = 8571; e.twentycircle = 9331; e.twentyhangzhou = 21316; e.twentyparen = 9351; e.twentyperiod = 9371; e.two = 50; e.twoarabic = 1634; e.twobengali = 2536; e.twocircle = 9313; e.twocircleinversesansserif = 10123; e.twodeva = 2408; e.twodotenleader = 8229; e.twodotleader = 8229; e.twodotleadervertical = 65072; e.twogujarati = 2792; e.twogurmukhi = 2664; e.twohackarabic = 1634; e.twohangzhou = 12322; e.twoideographicparen = 12833; e.twoinferior = 8322; e.twomonospace = 65298; e.twonumeratorbengali = 2549; e.twooldstyle = 63282; e.twoparen = 9333; e.twoperiod = 9353; e.twopersian = 1778; e.tworoman = 8561; e.twostroke = 443; e.twosuperior = 178; e.twothai = 3666; e.twothirds = 8532; e.u = 117; e.uacute = 250; e.ubar = 649; e.ubengali = 2441; e.ubopomofo = 12584; e.ubreve = 365; e.ucaron = 468; e.ucircle = 9444; e.ucircumflex = 251; e.ucircumflexbelow = 7799; e.ucyrillic = 1091; e.udattadeva = 2385; e.udblacute = 369; e.udblgrave = 533; e.udeva = 2313; e.udieresis = 252; e.udieresisacute = 472; e.udieresisbelow = 7795; e.udieresiscaron = 474; e.udieresiscyrillic = 1265; e.udieresisgrave = 476; e.udieresismacron = 470; e.udotbelow = 7909; e.ugrave = 249; e.ugujarati = 2697; e.ugurmukhi = 2569; e.uhiragana = 12358; e.uhookabove = 7911; e.uhorn = 432; e.uhornacute = 7913; e.uhorndotbelow = 7921; e.uhorngrave = 7915; e.uhornhookabove = 7917; e.uhorntilde = 7919; e.uhungarumlaut = 369; e.uhungarumlautcyrillic = 1267; e.uinvertedbreve = 535; e.ukatakana = 12454; e.ukatakanahalfwidth = 65395; e.ukcyrillic = 1145; e.ukorean = 12636; e.umacron = 363; e.umacroncyrillic = 1263; e.umacrondieresis = 7803; e.umatragurmukhi = 2625; e.umonospace = 65365; e.underscore = 95; e.underscoredbl = 8215; e.underscoremonospace = 65343; e.underscorevertical = 65075; e.underscorewavy = 65103; e.union = 8746; e.universal = 8704; e.uogonek = 371; e.uparen = 9392; e.upblock = 9600; e.upperdothebrew = 1476; e.upsilon = 965; e.upsilondieresis = 971; e.upsilondieresistonos = 944; e.upsilonlatin = 650; e.upsilontonos = 973; e.uptackbelowcmb = 797; e.uptackmod = 724; e.uragurmukhi = 2675; e.uring = 367; e.ushortcyrillic = 1118; e.usmallhiragana = 12357; e.usmallkatakana = 12453; e.usmallkatakanahalfwidth = 65385; e.ustraightcyrillic = 1199; e.ustraightstrokecyrillic = 1201; e.utilde = 361; e.utildeacute = 7801; e.utildebelow = 7797; e.uubengali = 2442; e.uudeva = 2314; e.uugujarati = 2698; e.uugurmukhi = 2570; e.uumatragurmukhi = 2626; e.uuvowelsignbengali = 2498; e.uuvowelsigndeva = 2370; e.uuvowelsigngujarati = 2754; e.uvowelsignbengali = 2497; e.uvowelsigndeva = 2369; e.uvowelsigngujarati = 2753; e.v = 118; e.vadeva = 2357; e.vagujarati = 2741; e.vagurmukhi = 2613; e.vakatakana = 12535; e.vav = 1493; e.vavdagesh = 64309; e.vavdagesh65 = 64309; e.vavdageshhebrew = 64309; e.vavhebrew = 1493; e.vavholam = 64331; e.vavholamhebrew = 64331; e.vavvavhebrew = 1520; e.vavyodhebrew = 1521; e.vcircle = 9445; e.vdotbelow = 7807; e.vecyrillic = 1074; e.veharabic = 1700; e.vehfinalarabic = 64363; e.vehinitialarabic = 64364; e.vehmedialarabic = 64365; e.vekatakana = 12537; e.venus = 9792; e.verticalbar = 124; e.verticallineabovecmb = 781; e.verticallinebelowcmb = 809; e.verticallinelowmod = 716; e.verticallinemod = 712; e.vewarmenian = 1406; e.vhook = 651; e.vikatakana = 12536; e.viramabengali = 2509; e.viramadeva = 2381; e.viramagujarati = 2765; e.visargabengali = 2435; e.visargadeva = 2307; e.visargagujarati = 2691; e.vmonospace = 65366; e.voarmenian = 1400; e.voicediterationhiragana = 12446; e.voicediterationkatakana = 12542; e.voicedmarkkana = 12443; e.voicedmarkkanahalfwidth = 65438; e.vokatakana = 12538; e.vparen = 9393; e.vtilde = 7805; e.vturned = 652; e.vuhiragana = 12436; e.vukatakana = 12532; e.w = 119; e.wacute = 7811; e.waekorean = 12633; e.wahiragana = 12431; e.wakatakana = 12527; e.wakatakanahalfwidth = 65436; e.wakorean = 12632; e.wasmallhiragana = 12430; e.wasmallkatakana = 12526; e.wattosquare = 13143; e.wavedash = 12316; e.wavyunderscorevertical = 65076; e.wawarabic = 1608; e.wawfinalarabic = 65262; e.wawhamzaabovearabic = 1572; e.wawhamzaabovefinalarabic = 65158; e.wbsquare = 13277; e.wcircle = 9446; e.wcircumflex = 373; e.wdieresis = 7813; e.wdotaccent = 7815; e.wdotbelow = 7817; e.wehiragana = 12433; e.weierstrass = 8472; e.wekatakana = 12529; e.wekorean = 12638; e.weokorean = 12637; e.wgrave = 7809; e.whitebullet = 9702; e.whitecircle = 9675; e.whitecircleinverse = 9689; e.whitecornerbracketleft = 12302; e.whitecornerbracketleftvertical = 65091; e.whitecornerbracketright = 12303; e.whitecornerbracketrightvertical = 65092; e.whitediamond = 9671; e.whitediamondcontainingblacksmalldiamond = 9672; e.whitedownpointingsmalltriangle = 9663; e.whitedownpointingtriangle = 9661; e.whiteleftpointingsmalltriangle = 9667; e.whiteleftpointingtriangle = 9665; e.whitelenticularbracketleft = 12310; e.whitelenticularbracketright = 12311; e.whiterightpointingsmalltriangle = 9657; e.whiterightpointingtriangle = 9655; e.whitesmallsquare = 9643; e.whitesmilingface = 9786; e.whitesquare = 9633; e.whitestar = 9734; e.whitetelephone = 9743; e.whitetortoiseshellbracketleft = 12312; e.whitetortoiseshellbracketright = 12313; e.whiteuppointingsmalltriangle = 9653; e.whiteuppointingtriangle = 9651; e.wihiragana = 12432; e.wikatakana = 12528; e.wikorean = 12639; e.wmonospace = 65367; e.wohiragana = 12434; e.wokatakana = 12530; e.wokatakanahalfwidth = 65382; e.won = 8361; e.wonmonospace = 65510; e.wowaenthai = 3623; e.wparen = 9394; e.wring = 7832; e.wsuperior = 695; e.wturned = 653; e.wynn = 447; e.x = 120; e.xabovecmb = 829; e.xbopomofo = 12562; e.xcircle = 9447; e.xdieresis = 7821; e.xdotaccent = 7819; e.xeharmenian = 1389; e.xi = 958; e.xmonospace = 65368; e.xparen = 9395; e.xsuperior = 739; e.y = 121; e.yaadosquare = 13134; e.yabengali = 2479; e.yacute = 253; e.yadeva = 2351; e.yaekorean = 12626; e.yagujarati = 2735; e.yagurmukhi = 2607; e.yahiragana = 12420; e.yakatakana = 12516; e.yakatakanahalfwidth = 65428; e.yakorean = 12625; e.yamakkanthai = 3662; e.yasmallhiragana = 12419; e.yasmallkatakana = 12515; e.yasmallkatakanahalfwidth = 65388; e.yatcyrillic = 1123; e.ycircle = 9448; e.ycircumflex = 375; e.ydieresis = 255; e.ydotaccent = 7823; e.ydotbelow = 7925; e.yeharabic = 1610; e.yehbarreearabic = 1746; e.yehbarreefinalarabic = 64431; e.yehfinalarabic = 65266; e.yehhamzaabovearabic = 1574; e.yehhamzaabovefinalarabic = 65162; e.yehhamzaaboveinitialarabic = 65163; e.yehhamzaabovemedialarabic = 65164; e.yehinitialarabic = 65267; e.yehmedialarabic = 65268; e.yehmeeminitialarabic = 64733; e.yehmeemisolatedarabic = 64600; e.yehnoonfinalarabic = 64660; e.yehthreedotsbelowarabic = 1745; e.yekorean = 12630; e.yen = 165; e.yenmonospace = 65509; e.yeokorean = 12629; e.yeorinhieuhkorean = 12678; e.yerahbenyomohebrew = 1450; e.yerahbenyomolefthebrew = 1450; e.yericyrillic = 1099; e.yerudieresiscyrillic = 1273; e.yesieungkorean = 12673; e.yesieungpansioskorean = 12675; e.yesieungsioskorean = 12674; e.yetivhebrew = 1434; e.ygrave = 7923; e.yhook = 436; e.yhookabove = 7927; e.yiarmenian = 1397; e.yicyrillic = 1111; e.yikorean = 12642; e.yinyang = 9775; e.yiwnarmenian = 1410; e.ymonospace = 65369; e.yod = 1497; e.yoddagesh = 64313; e.yoddageshhebrew = 64313; e.yodhebrew = 1497; e.yodyodhebrew = 1522; e.yodyodpatahhebrew = 64287; e.yohiragana = 12424; e.yoikorean = 12681; e.yokatakana = 12520; e.yokatakanahalfwidth = 65430; e.yokorean = 12635; e.yosmallhiragana = 12423; e.yosmallkatakana = 12519; e.yosmallkatakanahalfwidth = 65390; e.yotgreek = 1011; e.yoyaekorean = 12680; e.yoyakorean = 12679; e.yoyakthai = 3618; e.yoyingthai = 3597; e.yparen = 9396; e.ypogegrammeni = 890; e.ypogegrammenigreekcmb = 837; e.yr = 422; e.yring = 7833; e.ysuperior = 696; e.ytilde = 7929; e.yturned = 654; e.yuhiragana = 12422; e.yuikorean = 12684; e.yukatakana = 12518; e.yukatakanahalfwidth = 65429; e.yukorean = 12640; e.yusbigcyrillic = 1131; e.yusbigiotifiedcyrillic = 1133; e.yuslittlecyrillic = 1127; e.yuslittleiotifiedcyrillic = 1129; e.yusmallhiragana = 12421; e.yusmallkatakana = 12517; e.yusmallkatakanahalfwidth = 65389; e.yuyekorean = 12683; e.yuyeokorean = 12682; e.yyabengali = 2527; e.yyadeva = 2399; e.z = 122; e.zaarmenian = 1382; e.zacute = 378; e.zadeva = 2395; e.zagurmukhi = 2651; e.zaharabic = 1592; e.zahfinalarabic = 65222; e.zahinitialarabic = 65223; e.zahiragana = 12374; e.zahmedialarabic = 65224; e.zainarabic = 1586; e.zainfinalarabic = 65200; e.zakatakana = 12470; e.zaqefgadolhebrew = 1429; e.zaqefqatanhebrew = 1428; e.zarqahebrew = 1432; e.zayin = 1494; e.zayindagesh = 64310; e.zayindageshhebrew = 64310; e.zayinhebrew = 1494; e.zbopomofo = 12567; e.zcaron = 382; e.zcircle = 9449; e.zcircumflex = 7825; e.zcurl = 657; e.zdot = 380; e.zdotaccent = 380; e.zdotbelow = 7827; e.zecyrillic = 1079; e.zedescendercyrillic = 1177; e.zedieresiscyrillic = 1247; e.zehiragana = 12380; e.zekatakana = 12476; e.zero = 48; e.zeroarabic = 1632; e.zerobengali = 2534; e.zerodeva = 2406; e.zerogujarati = 2790; e.zerogurmukhi = 2662; e.zerohackarabic = 1632; e.zeroinferior = 8320; e.zeromonospace = 65296; e.zerooldstyle = 63280; e.zeropersian = 1776; e.zerosuperior = 8304; e.zerothai = 3664; e.zerowidthjoiner = 65279; e.zerowidthnonjoiner = 8204; e.zerowidthspace = 8203; e.zeta = 950; e.zhbopomofo = 12563; e.zhearmenian = 1386; e.zhebrevecyrillic = 1218; e.zhecyrillic = 1078; e.zhedescendercyrillic = 1175; e.zhedieresiscyrillic = 1245; e.zihiragana = 12376; e.zikatakana = 12472; e.zinorhebrew = 1454; e.zlinebelow = 7829; e.zmonospace = 65370; e.zohiragana = 12382; e.zokatakana = 12478; e.zparen = 9397; e.zretroflexhook = 656; e.zstroke = 438; e.zuhiragana = 12378; e.zukatakana = 12474; e[".notdef"] = 0; e.angbracketleftbig = 9001; e.angbracketleftBig = 9001; e.angbracketleftbigg = 9001; e.angbracketleftBigg = 9001; e.angbracketrightBig = 9002; e.angbracketrightbig = 9002; e.angbracketrightBigg = 9002; e.angbracketrightbigg = 9002; e.arrowhookleft = 8618; e.arrowhookright = 8617; e.arrowlefttophalf = 8636; e.arrowleftbothalf = 8637; e.arrownortheast = 8599; e.arrownorthwest = 8598; e.arrowrighttophalf = 8640; e.arrowrightbothalf = 8641; e.arrowsoutheast = 8600; e.arrowsouthwest = 8601; e.backslashbig = 8726; e.backslashBig = 8726; e.backslashBigg = 8726; e.backslashbigg = 8726; e.bardbl = 8214; e.bracehtipdownleft = 65079; e.bracehtipdownright = 65079; e.bracehtipupleft = 65080; e.bracehtipupright = 65080; e.braceleftBig = 123; e.braceleftbig = 123; e.braceleftbigg = 123; e.braceleftBigg = 123; e.bracerightBig = 125; e.bracerightbig = 125; e.bracerightbigg = 125; e.bracerightBigg = 125; e.bracketleftbig = 91; e.bracketleftBig = 91; e.bracketleftbigg = 91; e.bracketleftBigg = 91; e.bracketrightBig = 93; e.bracketrightbig = 93; e.bracketrightbigg = 93; e.bracketrightBigg = 93; e.ceilingleftbig = 8968; e.ceilingleftBig = 8968; e.ceilingleftBigg = 8968; e.ceilingleftbigg = 8968; e.ceilingrightbig = 8969; e.ceilingrightBig = 8969; e.ceilingrightbigg = 8969; e.ceilingrightBigg = 8969; e.circledotdisplay = 8857; e.circledottext = 8857; e.circlemultiplydisplay = 8855; e.circlemultiplytext = 8855; e.circleplusdisplay = 8853; e.circleplustext = 8853; e.contintegraldisplay = 8750; e.contintegraltext = 8750; e.coproductdisplay = 8720; e.coproducttext = 8720; e.floorleftBig = 8970; e.floorleftbig = 8970; e.floorleftbigg = 8970; e.floorleftBigg = 8970; e.floorrightbig = 8971; e.floorrightBig = 8971; e.floorrightBigg = 8971; e.floorrightbigg = 8971; e.hatwide = 770; e.hatwider = 770; e.hatwidest = 770; e.intercal = 7488; e.integraldisplay = 8747; e.integraltext = 8747; e.intersectiondisplay = 8898; e.intersectiontext = 8898; e.logicalanddisplay = 8743; e.logicalandtext = 8743; e.logicalordisplay = 8744; e.logicalortext = 8744; e.parenleftBig = 40; e.parenleftbig = 40; e.parenleftBigg = 40; e.parenleftbigg = 40; e.parenrightBig = 41; e.parenrightbig = 41; e.parenrightBigg = 41; e.parenrightbigg = 41; e.prime = 8242; e.productdisplay = 8719; e.producttext = 8719; e.radicalbig = 8730; e.radicalBig = 8730; e.radicalBigg = 8730; e.radicalbigg = 8730; e.radicalbt = 8730; e.radicaltp = 8730; e.radicalvertex = 8730; e.slashbig = 47; e.slashBig = 47; e.slashBigg = 47; e.slashbigg = 47; e.summationdisplay = 8721; e.summationtext = 8721; e.tildewide = 732; e.tildewider = 732; e.tildewidest = 732; e.uniondisplay = 8899; e.unionmultidisplay = 8846; e.unionmultitext = 8846; e.unionsqdisplay = 8852; e.unionsqtext = 8852; e.uniontext = 8899; e.vextenddouble = 8741; e.vextendsingle = 8739 })), n = r((function (e) { e.space = 32; e.a1 = 9985; e.a2 = 9986; e.a202 = 9987; e.a3 = 9988; e.a4 = 9742; e.a5 = 9990; e.a119 = 9991; e.a118 = 9992; e.a117 = 9993; e.a11 = 9755; e.a12 = 9758; e.a13 = 9996; e.a14 = 9997; e.a15 = 9998; e.a16 = 9999; e.a105 = 1e4; e.a17 = 10001; e.a18 = 10002; e.a19 = 10003; e.a20 = 10004; e.a21 = 10005; e.a22 = 10006; e.a23 = 10007; e.a24 = 10008; e.a25 = 10009; e.a26 = 10010; e.a27 = 10011; e.a28 = 10012; e.a6 = 10013; e.a7 = 10014; e.a8 = 10015; e.a9 = 10016; e.a10 = 10017; e.a29 = 10018; e.a30 = 10019; e.a31 = 10020; e.a32 = 10021; e.a33 = 10022; e.a34 = 10023; e.a35 = 9733; e.a36 = 10025; e.a37 = 10026; e.a38 = 10027; e.a39 = 10028; e.a40 = 10029; e.a41 = 10030; e.a42 = 10031; e.a43 = 10032; e.a44 = 10033; e.a45 = 10034; e.a46 = 10035; e.a47 = 10036; e.a48 = 10037; e.a49 = 10038; e.a50 = 10039; e.a51 = 10040; e.a52 = 10041; e.a53 = 10042; e.a54 = 10043; e.a55 = 10044; e.a56 = 10045; e.a57 = 10046; e.a58 = 10047; e.a59 = 10048; e.a60 = 10049; e.a61 = 10050; e.a62 = 10051; e.a63 = 10052; e.a64 = 10053; e.a65 = 10054; e.a66 = 10055; e.a67 = 10056; e.a68 = 10057; e.a69 = 10058; e.a70 = 10059; e.a71 = 9679; e.a72 = 10061; e.a73 = 9632; e.a74 = 10063; e.a203 = 10064; e.a75 = 10065; e.a204 = 10066; e.a76 = 9650; e.a77 = 9660; e.a78 = 9670; e.a79 = 10070; e.a81 = 9687; e.a82 = 10072; e.a83 = 10073; e.a84 = 10074; e.a97 = 10075; e.a98 = 10076; e.a99 = 10077; e.a100 = 10078; e.a101 = 10081; e.a102 = 10082; e.a103 = 10083; e.a104 = 10084; e.a106 = 10085; e.a107 = 10086; e.a108 = 10087; e.a112 = 9827; e.a111 = 9830; e.a110 = 9829; e.a109 = 9824; e.a120 = 9312; e.a121 = 9313; e.a122 = 9314; e.a123 = 9315; e.a124 = 9316; e.a125 = 9317; e.a126 = 9318; e.a127 = 9319; e.a128 = 9320; e.a129 = 9321; e.a130 = 10102; e.a131 = 10103; e.a132 = 10104; e.a133 = 10105; e.a134 = 10106; e.a135 = 10107; e.a136 = 10108; e.a137 = 10109; e.a138 = 10110; e.a139 = 10111; e.a140 = 10112; e.a141 = 10113; e.a142 = 10114; e.a143 = 10115; e.a144 = 10116; e.a145 = 10117; e.a146 = 10118; e.a147 = 10119; e.a148 = 10120; e.a149 = 10121; e.a150 = 10122; e.a151 = 10123; e.a152 = 10124; e.a153 = 10125; e.a154 = 10126; e.a155 = 10127; e.a156 = 10128; e.a157 = 10129; e.a158 = 10130; e.a159 = 10131; e.a160 = 10132; e.a161 = 8594; e.a163 = 8596; e.a164 = 8597; e.a196 = 10136; e.a165 = 10137; e.a192 = 10138; e.a166 = 10139; e.a167 = 10140; e.a168 = 10141; e.a169 = 10142; e.a170 = 10143; e.a171 = 10144; e.a172 = 10145; e.a173 = 10146; e.a162 = 10147; e.a174 = 10148; e.a175 = 10149; e.a176 = 10150; e.a177 = 10151; e.a178 = 10152; e.a179 = 10153; e.a193 = 10154; e.a180 = 10155; e.a199 = 10156; e.a181 = 10157; e.a200 = 10158; e.a182 = 10159; e.a201 = 10161; e.a183 = 10162; e.a184 = 10163; e.a197 = 10164; e.a185 = 10165; e.a194 = 10166; e.a198 = 10167; e.a186 = 10168; e.a195 = 10169; e.a187 = 10170; e.a188 = 10171; e.a189 = 10172; e.a190 = 10173; e.a191 = 10174; e.a89 = 10088; e.a90 = 10089; e.a93 = 10090; e.a94 = 10091; e.a91 = 10092; e.a92 = 10093; e.a205 = 10094; e.a85 = 10095; e.a206 = 10096; e.a86 = 10097; e.a87 = 10098; e.a88 = 10099; e.a95 = 10100; e.a96 = 10101; e[".notdef"] = 0 })); t.getGlyphsUnicode = i; t.getDingbatsGlyphsUnicode = n }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.getSupplementalGlyphMapForCalibri = t.getSupplementalGlyphMapForArialBlack = t.getGlyphMapForStandardFonts = t.getSymbolsFonts = t.getSerifFonts = t.getNonStdFontMap = t.getStdFontMap = void 0; var r = a(7); const i = (0, r.getLookupTableFactory)((function (e) { e.ArialNarrow = "Helvetica"; e["ArialNarrow-Bold"] = "Helvetica-Bold"; e["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique"; e["ArialNarrow-Italic"] = "Helvetica-Oblique"; e.ArialBlack = "Helvetica"; e["ArialBlack-Bold"] = "Helvetica-Bold"; e["ArialBlack-BoldItalic"] = "Helvetica-BoldOblique"; e["ArialBlack-Italic"] = "Helvetica-Oblique"; e["Arial-Black"] = "Helvetica"; e["Arial-Black-Bold"] = "Helvetica-Bold"; e["Arial-Black-BoldItalic"] = "Helvetica-BoldOblique"; e["Arial-Black-Italic"] = "Helvetica-Oblique"; e.Arial = "Helvetica"; e["Arial-Bold"] = "Helvetica-Bold"; e["Arial-BoldItalic"] = "Helvetica-BoldOblique"; e["Arial-Italic"] = "Helvetica-Oblique"; e["Arial-BoldItalicMT"] = "Helvetica-BoldOblique"; e["Arial-BoldMT"] = "Helvetica-Bold"; e["Arial-ItalicMT"] = "Helvetica-Oblique"; e.ArialMT = "Helvetica"; e["Courier-Bold"] = "Courier-Bold"; e["Courier-BoldItalic"] = "Courier-BoldOblique"; e["Courier-Italic"] = "Courier-Oblique"; e.CourierNew = "Courier"; e["CourierNew-Bold"] = "Courier-Bold"; e["CourierNew-BoldItalic"] = "Courier-BoldOblique"; e["CourierNew-Italic"] = "Courier-Oblique"; e["CourierNewPS-BoldItalicMT"] = "Courier-BoldOblique"; e["CourierNewPS-BoldMT"] = "Courier-Bold"; e["CourierNewPS-ItalicMT"] = "Courier-Oblique"; e.CourierNewPSMT = "Courier"; e.Helvetica = "Helvetica"; e["Helvetica-Bold"] = "Helvetica-Bold"; e["Helvetica-BoldItalic"] = "Helvetica-BoldOblique"; e["Helvetica-BoldOblique"] = "Helvetica-BoldOblique"; e["Helvetica-Italic"] = "Helvetica-Oblique"; e["Helvetica-Oblique"] = "Helvetica-Oblique"; e["Symbol-Bold"] = "Symbol"; e["Symbol-BoldItalic"] = "Symbol"; e["Symbol-Italic"] = "Symbol"; e.TimesNewRoman = "Times-Roman"; e["TimesNewRoman-Bold"] = "Times-Bold"; e["TimesNewRoman-BoldItalic"] = "Times-BoldItalic"; e["TimesNewRoman-Italic"] = "Times-Italic"; e.TimesNewRomanPS = "Times-Roman"; e["TimesNewRomanPS-Bold"] = "Times-Bold"; e["TimesNewRomanPS-BoldItalic"] = "Times-BoldItalic"; e["TimesNewRomanPS-BoldItalicMT"] = "Times-BoldItalic"; e["TimesNewRomanPS-BoldMT"] = "Times-Bold"; e["TimesNewRomanPS-Italic"] = "Times-Italic"; e["TimesNewRomanPS-ItalicMT"] = "Times-Italic"; e.TimesNewRomanPSMT = "Times-Roman"; e["TimesNewRomanPSMT-Bold"] = "Times-Bold"; e["TimesNewRomanPSMT-BoldItalic"] = "Times-BoldItalic"; e["TimesNewRomanPSMT-Italic"] = "Times-Italic" })); t.getStdFontMap = i; const n = (0, r.getLookupTableFactory)((function (e) { e.Calibri = "Helvetica"; e["Calibri-Bold"] = "Helvetica-Bold"; e["Calibri-BoldItalic"] = "Helvetica-BoldOblique"; e["Calibri-Italic"] = "Helvetica-Oblique"; e.CenturyGothic = "Helvetica"; e["CenturyGothic-Bold"] = "Helvetica-Bold"; e["CenturyGothic-BoldItalic"] = "Helvetica-BoldOblique"; e["CenturyGothic-Italic"] = "Helvetica-Oblique"; e.ComicSansMS = "Comic Sans MS"; e["ComicSansMS-Bold"] = "Comic Sans MS-Bold"; e["ComicSansMS-BoldItalic"] = "Comic Sans MS-BoldItalic"; e["ComicSansMS-Italic"] = "Comic Sans MS-Italic"; e.LucidaConsole = "Courier"; e["LucidaConsole-Bold"] = "Courier-Bold"; e["LucidaConsole-BoldItalic"] = "Courier-BoldOblique"; e["LucidaConsole-Italic"] = "Courier-Oblique"; e["LucidaSans-Demi"] = "Helvetica-Bold"; e["MS-Gothic"] = "MS Gothic"; e["MS-Gothic-Bold"] = "MS Gothic-Bold"; e["MS-Gothic-BoldItalic"] = "MS Gothic-BoldItalic"; e["MS-Gothic-Italic"] = "MS Gothic-Italic"; e["MS-Mincho"] = "MS Mincho"; e["MS-Mincho-Bold"] = "MS Mincho-Bold"; e["MS-Mincho-BoldItalic"] = "MS Mincho-BoldItalic"; e["MS-Mincho-Italic"] = "MS Mincho-Italic"; e["MS-PGothic"] = "MS PGothic"; e["MS-PGothic-Bold"] = "MS PGothic-Bold"; e["MS-PGothic-BoldItalic"] = "MS PGothic-BoldItalic"; e["MS-PGothic-Italic"] = "MS PGothic-Italic"; e["MS-PMincho"] = "MS PMincho"; e["MS-PMincho-Bold"] = "MS PMincho-Bold"; e["MS-PMincho-BoldItalic"] = "MS PMincho-BoldItalic"; e["MS-PMincho-Italic"] = "MS PMincho-Italic"; e.NuptialScript = "Times-Italic"; e.SegoeUISymbol = "Helvetica"; e.Wingdings = "ZapfDingbats"; e["Wingdings-Regular"] = "ZapfDingbats" })); t.getNonStdFontMap = n; const s = (0, r.getLookupTableFactory)((function (e) { e["Adobe Jenson"] = !0; e["Adobe Text"] = !0; e.Albertus = !0; e.Aldus = !0; e.Alexandria = !0; e.Algerian = !0; e["American Typewriter"] = !0; e.Antiqua = !0; e.Apex = !0; e.Arno = !0; e.Aster = !0; e.Aurora = !0; e.Baskerville = !0; e.Bell = !0; e.Bembo = !0; e["Bembo Schoolbook"] = !0; e.Benguiat = !0; e["Berkeley Old Style"] = !0; e["Bernhard Modern"] = !0; e["Berthold City"] = !0; e.Bodoni = !0; e["Bauer Bodoni"] = !0; e["Book Antiqua"] = !0; e.Bookman = !0; e["Bordeaux Roman"] = !0; e["Californian FB"] = !0; e.Calisto = !0; e.Calvert = !0; e.Capitals = !0; e.Cambria = !0; e.Cartier = !0; e.Caslon = !0; e.Catull = !0; e.Centaur = !0; e["Century Old Style"] = !0; e["Century Schoolbook"] = !0; e.Chaparral = !0; e["Charis SIL"] = !0; e.Cheltenham = !0; e["Cholla Slab"] = !0; e.Clarendon = !0; e.Clearface = !0; e.Cochin = !0; e.Colonna = !0; e["Computer Modern"] = !0; e["Concrete Roman"] = !0; e.Constantia = !0; e["Cooper Black"] = !0; e.Corona = !0; e.Ecotype = !0; e.Egyptienne = !0; e.Elephant = !0; e.Excelsior = !0; e.Fairfield = !0; e["FF Scala"] = !0; e.Folkard = !0; e.Footlight = !0; e.FreeSerif = !0; e["Friz Quadrata"] = !0; e.Garamond = !0; e.Gentium = !0; e.Georgia = !0; e.Gloucester = !0; e["Goudy Old Style"] = !0; e["Goudy Schoolbook"] = !0; e["Goudy Pro Font"] = !0; e.Granjon = !0; e["Guardian Egyptian"] = !0; e.Heather = !0; e.Hercules = !0; e["High Tower Text"] = !0; e.Hiroshige = !0; e["Hoefler Text"] = !0; e["Humana Serif"] = !0; e.Imprint = !0; e["Ionic No. 5"] = !0; e.Janson = !0; e.Joanna = !0; e.Korinna = !0; e.Lexicon = !0; e["Liberation Serif"] = !0; e["Linux Libertine"] = !0; e.Literaturnaya = !0; e.Lucida = !0; e["Lucida Bright"] = !0; e.Melior = !0; e.Memphis = !0; e.Miller = !0; e.Minion = !0; e.Modern = !0; e["Mona Lisa"] = !0; e["Mrs Eaves"] = !0; e["MS Serif"] = !0; e["Museo Slab"] = !0; e["New York"] = !0; e["Nimbus Roman"] = !0; e["NPS Rawlinson Roadway"] = !0; e.NuptialScript = !0; e.Palatino = !0; e.Perpetua = !0; e.Plantin = !0; e["Plantin Schoolbook"] = !0; e.Playbill = !0; e["Poor Richard"] = !0; e["Rawlinson Roadway"] = !0; e.Renault = !0; e.Requiem = !0; e.Rockwell = !0; e.Roman = !0; e["Rotis Serif"] = !0; e.Sabon = !0; e.Scala = !0; e.Seagull = !0; e.Sistina = !0; e.Souvenir = !0; e.STIX = !0; e["Stone Informal"] = !0; e["Stone Serif"] = !0; e.Sylfaen = !0; e.Times = !0; e.Trajan = !0; e["Trinité"] = !0; e["Trump Mediaeval"] = !0; e.Utopia = !0; e["Vale Type"] = !0; e["Bitstream Vera"] = !0; e["Vera Serif"] = !0; e.Versailles = !0; e.Wanted = !0; e.Weiss = !0; e["Wide Latin"] = !0; e.Windsor = !0; e.XITS = !0 })); t.getSerifFonts = s; const o = (0, r.getLookupTableFactory)((function (e) { e.Dingbats = !0; e.Symbol = !0; e.ZapfDingbats = !0 })); t.getSymbolsFonts = o; const c = (0, r.getLookupTableFactory)((function (e) { e[2] = 10; e[3] = 32; e[4] = 33; e[5] = 34; e[6] = 35; e[7] = 36; e[8] = 37; e[9] = 38; e[10] = 39; e[11] = 40; e[12] = 41; e[13] = 42; e[14] = 43; e[15] = 44; e[16] = 45; e[17] = 46; e[18] = 47; e[19] = 48; e[20] = 49; e[21] = 50; e[22] = 51; e[23] = 52; e[24] = 53; e[25] = 54; e[26] = 55; e[27] = 56; e[28] = 57; e[29] = 58; e[30] = 894; e[31] = 60; e[32] = 61; e[33] = 62; e[34] = 63; e[35] = 64; e[36] = 65; e[37] = 66; e[38] = 67; e[39] = 68; e[40] = 69; e[41] = 70; e[42] = 71; e[43] = 72; e[44] = 73; e[45] = 74; e[46] = 75; e[47] = 76; e[48] = 77; e[49] = 78; e[50] = 79; e[51] = 80; e[52] = 81; e[53] = 82; e[54] = 83; e[55] = 84; e[56] = 85; e[57] = 86; e[58] = 87; e[59] = 88; e[60] = 89; e[61] = 90; e[62] = 91; e[63] = 92; e[64] = 93; e[65] = 94; e[66] = 95; e[67] = 96; e[68] = 97; e[69] = 98; e[70] = 99; e[71] = 100; e[72] = 101; e[73] = 102; e[74] = 103; e[75] = 104; e[76] = 105; e[77] = 106; e[78] = 107; e[79] = 108; e[80] = 109; e[81] = 110; e[82] = 111; e[83] = 112; e[84] = 113; e[85] = 114; e[86] = 115; e[87] = 116; e[88] = 117; e[89] = 118; e[90] = 119; e[91] = 120; e[92] = 121; e[93] = 122; e[94] = 123; e[95] = 124; e[96] = 125; e[97] = 126; e[98] = 196; e[99] = 197; e[100] = 199; e[101] = 201; e[102] = 209; e[103] = 214; e[104] = 220; e[105] = 225; e[106] = 224; e[107] = 226; e[108] = 228; e[109] = 227; e[110] = 229; e[111] = 231; e[112] = 233; e[113] = 232; e[114] = 234; e[115] = 235; e[116] = 237; e[117] = 236; e[118] = 238; e[119] = 239; e[120] = 241; e[121] = 243; e[122] = 242; e[123] = 244; e[124] = 246; e[125] = 245; e[126] = 250; e[127] = 249; e[128] = 251; e[129] = 252; e[130] = 8224; e[131] = 176; e[132] = 162; e[133] = 163; e[134] = 167; e[135] = 8226; e[136] = 182; e[137] = 223; e[138] = 174; e[139] = 169; e[140] = 8482; e[141] = 180; e[142] = 168; e[143] = 8800; e[144] = 198; e[145] = 216; e[146] = 8734; e[147] = 177; e[148] = 8804; e[149] = 8805; e[150] = 165; e[151] = 181; e[152] = 8706; e[153] = 8721; e[154] = 8719; e[156] = 8747; e[157] = 170; e[158] = 186; e[159] = 8486; e[160] = 230; e[161] = 248; e[162] = 191; e[163] = 161; e[164] = 172; e[165] = 8730; e[166] = 402; e[167] = 8776; e[168] = 8710; e[169] = 171; e[170] = 187; e[171] = 8230; e[210] = 218; e[223] = 711; e[224] = 321; e[225] = 322; e[227] = 353; e[229] = 382; e[234] = 253; e[252] = 263; e[253] = 268; e[254] = 269; e[258] = 258; e[260] = 260; e[261] = 261; e[265] = 280; e[266] = 281; e[268] = 283; e[269] = 313; e[275] = 323; e[276] = 324; e[278] = 328; e[284] = 345; e[285] = 346; e[286] = 347; e[292] = 367; e[295] = 377; e[296] = 378; e[298] = 380; e[305] = 963; e[306] = 964; e[307] = 966; e[308] = 8215; e[309] = 8252; e[310] = 8319; e[311] = 8359; e[312] = 8592; e[313] = 8593; e[337] = 9552; e[493] = 1039; e[494] = 1040; e[705] = 1524; e[706] = 8362; e[710] = 64288; e[711] = 64298; e[759] = 1617; e[761] = 1776; e[763] = 1778; e[775] = 1652; e[777] = 1764; e[778] = 1780; e[779] = 1781; e[780] = 1782; e[782] = 771; e[783] = 64726; e[786] = 8363; e[788] = 8532; e[790] = 768; e[791] = 769; e[792] = 768; e[795] = 803; e[797] = 64336; e[798] = 64337; e[799] = 64342; e[800] = 64343; e[801] = 64344; e[802] = 64345; e[803] = 64362; e[804] = 64363; e[805] = 64364; e[2424] = 7821; e[2425] = 7822; e[2426] = 7823; e[2427] = 7824; e[2428] = 7825; e[2429] = 7826; e[2430] = 7827; e[2433] = 7682; e[2678] = 8045; e[2679] = 8046; e[2830] = 1552; e[2838] = 686; e[2840] = 751; e[2842] = 753; e[2843] = 754; e[2844] = 755; e[2846] = 757; e[2856] = 767; e[2857] = 848; e[2858] = 849; e[2862] = 853; e[2863] = 854; e[2864] = 855; e[2865] = 861; e[2866] = 862; e[2906] = 7460; e[2908] = 7462; e[2909] = 7463; e[2910] = 7464; e[2912] = 7466; e[2913] = 7467; e[2914] = 7468; e[2916] = 7470; e[2917] = 7471; e[2918] = 7472; e[2920] = 7474; e[2921] = 7475; e[2922] = 7476; e[2924] = 7478; e[2925] = 7479; e[2926] = 7480; e[2928] = 7482; e[2929] = 7483; e[2930] = 7484; e[2932] = 7486; e[2933] = 7487; e[2934] = 7488; e[2936] = 7490; e[2937] = 7491; e[2938] = 7492; e[2940] = 7494; e[2941] = 7495; e[2942] = 7496; e[2944] = 7498; e[2946] = 7500; e[2948] = 7502; e[2950] = 7504; e[2951] = 7505; e[2952] = 7506; e[2954] = 7508; e[2955] = 7509; e[2956] = 7510; e[2958] = 7512; e[2959] = 7513; e[2960] = 7514; e[2962] = 7516; e[2963] = 7517; e[2964] = 7518; e[2966] = 7520; e[2967] = 7521; e[2968] = 7522; e[2970] = 7524; e[2971] = 7525; e[2972] = 7526; e[2974] = 7528; e[2975] = 7529; e[2976] = 7530; e[2978] = 1537; e[2979] = 1538; e[2980] = 1539; e[2982] = 1549; e[2983] = 1551; e[2984] = 1552; e[2986] = 1554; e[2987] = 1555; e[2988] = 1556; e[2990] = 1623; e[2991] = 1624; e[2995] = 1775; e[2999] = 1791; e[3002] = 64290; e[3003] = 64291; e[3004] = 64292; e[3006] = 64294; e[3007] = 64295; e[3008] = 64296; e[3011] = 1900; e[3014] = 8223; e[3015] = 8244; e[3017] = 7532; e[3018] = 7533; e[3019] = 7534; e[3075] = 7590; e[3076] = 7591; e[3079] = 7594; e[3080] = 7595; e[3083] = 7598; e[3084] = 7599; e[3087] = 7602; e[3088] = 7603; e[3091] = 7606; e[3092] = 7607; e[3095] = 7610; e[3096] = 7611; e[3099] = 7614; e[3100] = 7615; e[3103] = 7618; e[3104] = 7619; e[3107] = 8337; e[3108] = 8338; e[3116] = 1884; e[3119] = 1885; e[3120] = 1885; e[3123] = 1886; e[3124] = 1886; e[3127] = 1887; e[3128] = 1887; e[3131] = 1888; e[3132] = 1888; e[3135] = 1889; e[3136] = 1889; e[3139] = 1890; e[3140] = 1890; e[3143] = 1891; e[3144] = 1891; e[3147] = 1892; e[3148] = 1892; e[3153] = 580; e[3154] = 581; e[3157] = 584; e[3158] = 585; e[3161] = 588; e[3162] = 589; e[3165] = 891; e[3166] = 892; e[3169] = 1274; e[3170] = 1275; e[3173] = 1278; e[3174] = 1279; e[3181] = 7622; e[3182] = 7623; e[3282] = 11799; e[3316] = 578; e[3379] = 42785; e[3393] = 1159; e[3416] = 8377 })); t.getGlyphMapForStandardFonts = c; const l = (0, r.getLookupTableFactory)((function (e) { e[227] = 322; e[264] = 261; e[291] = 346 })); t.getSupplementalGlyphMapForArialBlack = l; const h = (0, r.getLookupTableFactory)((function (e) { e[1] = 32; e[4] = 65; e[17] = 66; e[18] = 67; e[24] = 68; e[28] = 69; e[38] = 70; e[39] = 71; e[44] = 72; e[47] = 73; e[58] = 74; e[60] = 75; e[62] = 76; e[68] = 77; e[69] = 78; e[75] = 79; e[87] = 80; e[89] = 81; e[90] = 82; e[94] = 83; e[100] = 84; e[104] = 85; e[115] = 86; e[116] = 87; e[121] = 88; e[122] = 89; e[127] = 90; e[258] = 97; e[268] = 261; e[271] = 98; e[272] = 99; e[273] = 263; e[282] = 100; e[286] = 101; e[295] = 281; e[296] = 102; e[336] = 103; e[346] = 104; e[349] = 105; e[361] = 106; e[364] = 107; e[367] = 108; e[371] = 322; e[373] = 109; e[374] = 110; e[381] = 111; e[383] = 243; e[393] = 112; e[395] = 113; e[396] = 114; e[400] = 115; e[401] = 347; e[410] = 116; e[437] = 117; e[448] = 118; e[449] = 119; e[454] = 120; e[455] = 121; e[460] = 122; e[463] = 380; e[853] = 44; e[855] = 58; e[856] = 46; e[876] = 47; e[878] = 45; e[882] = 45; e[894] = 40; e[895] = 41; e[896] = 91; e[897] = 93; e[923] = 64; e[1004] = 48; e[1005] = 49; e[1006] = 50; e[1007] = 51; e[1008] = 52; e[1009] = 53; e[1010] = 54; e[1011] = 55; e[1012] = 56; e[1013] = 57; e[1081] = 37; e[1085] = 43; e[1086] = 45 })); t.getSupplementalGlyphMapForCalibri = h }, function (e, t, a) { var r = a(7).getLookupTableFactory, i = r((function (e) { e[63721] = 169; e[63193] = 169; e[63720] = 174; e[63194] = 174; e[63722] = 8482; e[63195] = 8482; e[63729] = 9127; e[63730] = 9128; e[63731] = 9129; e[63740] = 9131; e[63741] = 9132; e[63742] = 9133; e[63726] = 9121; e[63727] = 9122; e[63728] = 9123; e[63737] = 9124; e[63738] = 9125; e[63739] = 9126; e[63723] = 9115; e[63724] = 9116; e[63725] = 9117; e[63734] = 9118; e[63735] = 9119; e[63736] = 9120 })); var n = [{ begin: 0, end: 127 }, { begin: 128, end: 255 }, { begin: 256, end: 383 }, { begin: 384, end: 591 }, { begin: 592, end: 687 }, { begin: 688, end: 767 }, { begin: 768, end: 879 }, { begin: 880, end: 1023 }, { begin: 11392, end: 11519 }, { begin: 1024, end: 1279 }, { begin: 1328, end: 1423 }, { begin: 1424, end: 1535 }, { begin: 42240, end: 42559 }, { begin: 1536, end: 1791 }, { begin: 1984, end: 2047 }, { begin: 2304, end: 2431 }, { begin: 2432, end: 2559 }, { begin: 2560, end: 2687 }, { begin: 2688, end: 2815 }, { begin: 2816, end: 2943 }, { begin: 2944, end: 3071 }, { begin: 3072, end: 3199 }, { begin: 3200, end: 3327 }, { begin: 3328, end: 3455 }, { begin: 3584, end: 3711 }, { begin: 3712, end: 3839 }, { begin: 4256, end: 4351 }, { begin: 6912, end: 7039 }, { begin: 4352, end: 4607 }, { begin: 7680, end: 7935 }, { begin: 7936, end: 8191 }, { begin: 8192, end: 8303 }, { begin: 8304, end: 8351 }, { begin: 8352, end: 8399 }, { begin: 8400, end: 8447 }, { begin: 8448, end: 8527 }, { begin: 8528, end: 8591 }, { begin: 8592, end: 8703 }, { begin: 8704, end: 8959 }, { begin: 8960, end: 9215 }, { begin: 9216, end: 9279 }, { begin: 9280, end: 9311 }, { begin: 9312, end: 9471 }, { begin: 9472, end: 9599 }, { begin: 9600, end: 9631 }, { begin: 9632, end: 9727 }, { begin: 9728, end: 9983 }, { begin: 9984, end: 10175 }, { begin: 12288, end: 12351 }, { begin: 12352, end: 12447 }, { begin: 12448, end: 12543 }, { begin: 12544, end: 12591 }, { begin: 12592, end: 12687 }, { begin: 43072, end: 43135 }, { begin: 12800, end: 13055 }, { begin: 13056, end: 13311 }, { begin: 44032, end: 55215 }, { begin: 55296, end: 57343 }, { begin: 67840, end: 67871 }, { begin: 19968, end: 40959 }, { begin: 57344, end: 63743 }, { begin: 12736, end: 12783 }, { begin: 64256, end: 64335 }, { begin: 64336, end: 65023 }, { begin: 65056, end: 65071 }, { begin: 65040, end: 65055 }, { begin: 65104, end: 65135 }, { begin: 65136, end: 65279 }, { begin: 65280, end: 65519 }, { begin: 65520, end: 65535 }, { begin: 3840, end: 4095 }, { begin: 1792, end: 1871 }, { begin: 1920, end: 1983 }, { begin: 3456, end: 3583 }, { begin: 4096, end: 4255 }, { begin: 4608, end: 4991 }, { begin: 5024, end: 5119 }, { begin: 5120, end: 5759 }, { begin: 5760, end: 5791 }, { begin: 5792, end: 5887 }, { begin: 6016, end: 6143 }, { begin: 6144, end: 6319 }, { begin: 10240, end: 10495 }, { begin: 40960, end: 42127 }, { begin: 5888, end: 5919 }, { begin: 66304, end: 66351 }, { begin: 66352, end: 66383 }, { begin: 66560, end: 66639 }, { begin: 118784, end: 119039 }, { begin: 119808, end: 120831 }, { begin: 1044480, end: 1048573 }, { begin: 65024, end: 65039 }, { begin: 917504, end: 917631 }, { begin: 6400, end: 6479 }, { begin: 6480, end: 6527 }, { begin: 6528, end: 6623 }, { begin: 6656, end: 6687 }, { begin: 11264, end: 11359 }, { begin: 11568, end: 11647 }, { begin: 19904, end: 19967 }, { begin: 43008, end: 43055 }, { begin: 65536, end: 65663 }, { begin: 65856, end: 65935 }, { begin: 66432, end: 66463 }, { begin: 66464, end: 66527 }, { begin: 66640, end: 66687 }, { begin: 66688, end: 66735 }, { begin: 67584, end: 67647 }, { begin: 68096, end: 68191 }, { begin: 119552, end: 119647 }, { begin: 73728, end: 74751 }, { begin: 119648, end: 119679 }, { begin: 7040, end: 7103 }, { begin: 7168, end: 7247 }, { begin: 7248, end: 7295 }, { begin: 43136, end: 43231 }, { begin: 43264, end: 43311 }, { begin: 43312, end: 43359 }, { begin: 43520, end: 43615 }, { begin: 65936, end: 65999 }, { begin: 66e3, end: 66047 }, { begin: 66208, end: 66271 }, { begin: 127024, end: 127135 }]; var s = r((function (e) { e["¨"] = " ̈"; e["¯"] = " ̄"; e["´"] = " ́"; e["µ"] = "μ"; e["¸"] = " ̧"; e["Ĳ"] = "IJ"; e["ĳ"] = "ij"; e["Ŀ"] = "L·"; e["ŀ"] = "l·"; e["ŉ"] = "ʼn"; e["ſ"] = "s"; e["Ǆ"] = "DŽ"; e["ǅ"] = "Dž"; e["ǆ"] = "dž"; e["Ǉ"] = "LJ"; e["ǈ"] = "Lj"; e["ǉ"] = "lj"; e["Ǌ"] = "NJ"; e["ǋ"] = "Nj"; e["ǌ"] = "nj"; e["Ǳ"] = "DZ"; e["ǲ"] = "Dz"; e["ǳ"] = "dz"; e["˘"] = " ̆"; e["˙"] = " ̇"; e["˚"] = " ̊"; e["˛"] = " ̨"; e["˜"] = " ̃"; e["˝"] = " ̋"; e["ͺ"] = " ͅ"; e["΄"] = " ́"; e["ϐ"] = "β"; e["ϑ"] = "θ"; e["ϒ"] = "Υ"; e["ϕ"] = "φ"; e["ϖ"] = "π"; e["ϰ"] = "κ"; e["ϱ"] = "ρ"; e["ϲ"] = "ς"; e["ϴ"] = "Θ"; e["ϵ"] = "ε"; e["Ϲ"] = "Σ"; e["և"] = "եւ"; e["ٵ"] = "اٴ"; e["ٶ"] = "وٴ"; e["ٷ"] = "ۇٴ"; e["ٸ"] = "يٴ"; e["ำ"] = "ํา"; e["ຳ"] = "ໍາ"; e["ໜ"] = "ຫນ"; e["ໝ"] = "ຫມ"; e["ཷ"] = "ྲཱྀ"; e["ཹ"] = "ླཱྀ"; e["ẚ"] = "aʾ"; e["᾽"] = " ̓"; e["᾿"] = " ̓"; e["῀"] = " ͂"; e["῾"] = " ̔"; e[" "] = " "; e[" "] = " "; e[" "] = " "; e[" "] = " "; e[" "] = " "; e[" "] = " "; e[" "] = " "; e[" "] = " "; e["‗"] = " ̳"; e["․"] = "."; e["‥"] = ".."; e["…"] = "..."; e["″"] = "′′"; e["‴"] = "′′′"; e["‶"] = "‵‵"; e["‷"] = "‵‵‵"; e["‼"] = "!!"; e["‾"] = " ̅"; e["⁇"] = "??"; e["⁈"] = "?!"; e["⁉"] = "!?"; e["⁗"] = "′′′′"; e[" "] = " "; e["₨"] = "Rs"; e["℀"] = "a/c"; e["℁"] = "a/s"; e["℃"] = "°C"; e["℅"] = "c/o"; e["℆"] = "c/u"; e["ℇ"] = "Ɛ"; e["℉"] = "°F"; e["№"] = "No"; e["℡"] = "TEL"; e["ℵ"] = "א"; e["ℶ"] = "ב"; e["ℷ"] = "ג"; e["ℸ"] = "ד"; e["℻"] = "FAX"; e["Ⅰ"] = "I"; e["Ⅱ"] = "II"; e["Ⅲ"] = "III"; e["Ⅳ"] = "IV"; e["Ⅴ"] = "V"; e["Ⅵ"] = "VI"; e["Ⅶ"] = "VII"; e["Ⅷ"] = "VIII"; e["Ⅸ"] = "IX"; e["Ⅹ"] = "X"; e["Ⅺ"] = "XI"; e["Ⅻ"] = "XII"; e["Ⅼ"] = "L"; e["Ⅽ"] = "C"; e["Ⅾ"] = "D"; e["Ⅿ"] = "M"; e["ⅰ"] = "i"; e["ⅱ"] = "ii"; e["ⅲ"] = "iii"; e["ⅳ"] = "iv"; e["ⅴ"] = "v"; e["ⅵ"] = "vi"; e["ⅶ"] = "vii"; e["ⅷ"] = "viii"; e["ⅸ"] = "ix"; e["ⅹ"] = "x"; e["ⅺ"] = "xi"; e["ⅻ"] = "xii"; e["ⅼ"] = "l"; e["ⅽ"] = "c"; e["ⅾ"] = "d"; e["ⅿ"] = "m"; e["∬"] = "∫∫"; e["∭"] = "∫∫∫"; e["∯"] = "∮∮"; e["∰"] = "∮∮∮"; e["⑴"] = "(1)"; e["⑵"] = "(2)"; e["⑶"] = "(3)"; e["⑷"] = "(4)"; e["⑸"] = "(5)"; e["⑹"] = "(6)"; e["⑺"] = "(7)"; e["⑻"] = "(8)"; e["⑼"] = "(9)"; e["⑽"] = "(10)"; e["⑾"] = "(11)"; e["⑿"] = "(12)"; e["⒀"] = "(13)"; e["⒁"] = "(14)"; e["⒂"] = "(15)"; e["⒃"] = "(16)"; e["⒄"] = "(17)"; e["⒅"] = "(18)"; e["⒆"] = "(19)"; e["⒇"] = "(20)"; e["⒈"] = "1."; e["⒉"] = "2."; e["⒊"] = "3."; e["⒋"] = "4."; e["⒌"] = "5."; e["⒍"] = "6."; e["⒎"] = "7."; e["⒏"] = "8."; e["⒐"] = "9."; e["⒑"] = "10."; e["⒒"] = "11."; e["⒓"] = "12."; e["⒔"] = "13."; e["⒕"] = "14."; e["⒖"] = "15."; e["⒗"] = "16."; e["⒘"] = "17."; e["⒙"] = "18."; e["⒚"] = "19."; e["⒛"] = "20."; e["⒜"] = "(a)"; e["⒝"] = "(b)"; e["⒞"] = "(c)"; e["⒟"] = "(d)"; e["⒠"] = "(e)"; e["⒡"] = "(f)"; e["⒢"] = "(g)"; e["⒣"] = "(h)"; e["⒤"] = "(i)"; e["⒥"] = "(j)"; e["⒦"] = "(k)"; e["⒧"] = "(l)"; e["⒨"] = "(m)"; e["⒩"] = "(n)"; e["⒪"] = "(o)"; e["⒫"] = "(p)"; e["⒬"] = "(q)"; e["⒭"] = "(r)"; e["⒮"] = "(s)"; e["⒯"] = "(t)"; e["⒰"] = "(u)"; e["⒱"] = "(v)"; e["⒲"] = "(w)"; e["⒳"] = "(x)"; e["⒴"] = "(y)"; e["⒵"] = "(z)"; e["⨌"] = "∫∫∫∫"; e["⩴"] = "::="; e["⩵"] = "=="; e["⩶"] = "==="; e["⺟"] = "母"; e["⻳"] = "龟"; e["⼀"] = "一"; e["⼁"] = "丨"; e["⼂"] = "丶"; e["⼃"] = "丿"; e["⼄"] = "乙"; e["⼅"] = "亅"; e["⼆"] = "二"; e["⼇"] = "亠"; e["⼈"] = "人"; e["⼉"] = "儿"; e["⼊"] = "入"; e["⼋"] = "八"; e["⼌"] = "冂"; e["⼍"] = "冖"; e["⼎"] = "冫"; e["⼏"] = "几"; e["⼐"] = "凵"; e["⼑"] = "刀"; e["⼒"] = "力"; e["⼓"] = "勹"; e["⼔"] = "匕"; e["⼕"] = "匚"; e["⼖"] = "匸"; e["⼗"] = "十"; e["⼘"] = "卜"; e["⼙"] = "卩"; e["⼚"] = "厂"; e["⼛"] = "厶"; e["⼜"] = "又"; e["⼝"] = "口"; e["⼞"] = "囗"; e["⼟"] = "土"; e["⼠"] = "士"; e["⼡"] = "夂"; e["⼢"] = "夊"; e["⼣"] = "夕"; e["⼤"] = "大"; e["⼥"] = "女"; e["⼦"] = "子"; e["⼧"] = "宀"; e["⼨"] = "寸"; e["⼩"] = "小"; e["⼪"] = "尢"; e["⼫"] = "尸"; e["⼬"] = "屮"; e["⼭"] = "山"; e["⼮"] = "巛"; e["⼯"] = "工"; e["⼰"] = "己"; e["⼱"] = "巾"; e["⼲"] = "干"; e["⼳"] = "幺"; e["⼴"] = "广"; e["⼵"] = "廴"; e["⼶"] = "廾"; e["⼷"] = "弋"; e["⼸"] = "弓"; e["⼹"] = "彐"; e["⼺"] = "彡"; e["⼻"] = "彳"; e["⼼"] = "心"; e["⼽"] = "戈"; e["⼾"] = "戶"; e["⼿"] = "手"; e["⽀"] = "支"; e["⽁"] = "攴"; e["⽂"] = "文"; e["⽃"] = "斗"; e["⽄"] = "斤"; e["⽅"] = "方"; e["⽆"] = "无"; e["⽇"] = "日"; e["⽈"] = "曰"; e["⽉"] = "月"; e["⽊"] = "木"; e["⽋"] = "欠"; e["⽌"] = "止"; e["⽍"] = "歹"; e["⽎"] = "殳"; e["⽏"] = "毋"; e["⽐"] = "比"; e["⽑"] = "毛"; e["⽒"] = "氏"; e["⽓"] = "气"; e["⽔"] = "水"; e["⽕"] = "火"; e["⽖"] = "爪"; e["⽗"] = "父"; e["⽘"] = "爻"; e["⽙"] = "爿"; e["⽚"] = "片"; e["⽛"] = "牙"; e["⽜"] = "牛"; e["⽝"] = "犬"; e["⽞"] = "玄"; e["⽟"] = "玉"; e["⽠"] = "瓜"; e["⽡"] = "瓦"; e["⽢"] = "甘"; e["⽣"] = "生"; e["⽤"] = "用"; e["⽥"] = "田"; e["⽦"] = "疋"; e["⽧"] = "疒"; e["⽨"] = "癶"; e["⽩"] = "白"; e["⽪"] = "皮"; e["⽫"] = "皿"; e["⽬"] = "目"; e["⽭"] = "矛"; e["⽮"] = "矢"; e["⽯"] = "石"; e["⽰"] = "示"; e["⽱"] = "禸"; e["⽲"] = "禾"; e["⽳"] = "穴"; e["⽴"] = "立"; e["⽵"] = "竹"; e["⽶"] = "米"; e["⽷"] = "糸"; e["⽸"] = "缶"; e["⽹"] = "网"; e["⽺"] = "羊"; e["⽻"] = "羽"; e["⽼"] = "老"; e["⽽"] = "而"; e["⽾"] = "耒"; e["⽿"] = "耳"; e["⾀"] = "聿"; e["⾁"] = "肉"; e["⾂"] = "臣"; e["⾃"] = "自"; e["⾄"] = "至"; e["⾅"] = "臼"; e["⾆"] = "舌"; e["⾇"] = "舛"; e["⾈"] = "舟"; e["⾉"] = "艮"; e["⾊"] = "色"; e["⾋"] = "艸"; e["⾌"] = "虍"; e["⾍"] = "虫"; e["⾎"] = "血"; e["⾏"] = "行"; e["⾐"] = "衣"; e["⾑"] = "襾"; e["⾒"] = "見"; e["⾓"] = "角"; e["⾔"] = "言"; e["⾕"] = "谷"; e["⾖"] = "豆"; e["⾗"] = "豕"; e["⾘"] = "豸"; e["⾙"] = "貝"; e["⾚"] = "赤"; e["⾛"] = "走"; e["⾜"] = "足"; e["⾝"] = "身"; e["⾞"] = "車"; e["⾟"] = "辛"; e["⾠"] = "辰"; e["⾡"] = "辵"; e["⾢"] = "邑"; e["⾣"] = "酉"; e["⾤"] = "釆"; e["⾥"] = "里"; e["⾦"] = "金"; e["⾧"] = "長"; e["⾨"] = "門"; e["⾩"] = "阜"; e["⾪"] = "隶"; e["⾫"] = "隹"; e["⾬"] = "雨"; e["⾭"] = "靑"; e["⾮"] = "非"; e["⾯"] = "面"; e["⾰"] = "革"; e["⾱"] = "韋"; e["⾲"] = "韭"; e["⾳"] = "音"; e["⾴"] = "頁"; e["⾵"] = "風"; e["⾶"] = "飛"; e["⾷"] = "食"; e["⾸"] = "首"; e["⾹"] = "香"; e["⾺"] = "馬"; e["⾻"] = "骨"; e["⾼"] = "高"; e["⾽"] = "髟"; e["⾾"] = "鬥"; e["⾿"] = "鬯"; e["⿀"] = "鬲"; e["⿁"] = "鬼"; e["⿂"] = "魚"; e["⿃"] = "鳥"; e["⿄"] = "鹵"; e["⿅"] = "鹿"; e["⿆"] = "麥"; e["⿇"] = "麻"; e["⿈"] = "黃"; e["⿉"] = "黍"; e["⿊"] = "黑"; e["⿋"] = "黹"; e["⿌"] = "黽"; e["⿍"] = "鼎"; e["⿎"] = "鼓"; e["⿏"] = "鼠"; e["⿐"] = "鼻"; e["⿑"] = "齊"; e["⿒"] = "齒"; e["⿓"] = "龍"; e["⿔"] = "龜"; e["⿕"] = "龠"; e["〶"] = "〒"; e["〸"] = "十"; e["〹"] = "卄"; e["〺"] = "卅"; e["゛"] = " ゙"; e["゜"] = " ゚"; e["ㄱ"] = "ᄀ"; e["ㄲ"] = "ᄁ"; e["ㄳ"] = "ᆪ"; e["ㄴ"] = "ᄂ"; e["ㄵ"] = "ᆬ"; e["ㄶ"] = "ᆭ"; e["ㄷ"] = "ᄃ"; e["ㄸ"] = "ᄄ"; e["ㄹ"] = "ᄅ"; e["ㄺ"] = "ᆰ"; e["ㄻ"] = "ᆱ"; e["ㄼ"] = "ᆲ"; e["ㄽ"] = "ᆳ"; e["ㄾ"] = "ᆴ"; e["ㄿ"] = "ᆵ"; e["ㅀ"] = "ᄚ"; e["ㅁ"] = "ᄆ"; e["ㅂ"] = "ᄇ"; e["ㅃ"] = "ᄈ"; e["ㅄ"] = "ᄡ"; e["ㅅ"] = "ᄉ"; e["ㅆ"] = "ᄊ"; e["ㅇ"] = "ᄋ"; e["ㅈ"] = "ᄌ"; e["ㅉ"] = "ᄍ"; e["ㅊ"] = "ᄎ"; e["ㅋ"] = "ᄏ"; e["ㅌ"] = "ᄐ"; e["ㅍ"] = "ᄑ"; e["ㅎ"] = "ᄒ"; e["ㅏ"] = "ᅡ"; e["ㅐ"] = "ᅢ"; e["ㅑ"] = "ᅣ"; e["ㅒ"] = "ᅤ"; e["ㅓ"] = "ᅥ"; e["ㅔ"] = "ᅦ"; e["ㅕ"] = "ᅧ"; e["ㅖ"] = "ᅨ"; e["ㅗ"] = "ᅩ"; e["ㅘ"] = "ᅪ"; e["ㅙ"] = "ᅫ"; e["ㅚ"] = "ᅬ"; e["ㅛ"] = "ᅭ"; e["ㅜ"] = "ᅮ"; e["ㅝ"] = "ᅯ"; e["ㅞ"] = "ᅰ"; e["ㅟ"] = "ᅱ"; e["ㅠ"] = "ᅲ"; e["ㅡ"] = "ᅳ"; e["ㅢ"] = "ᅴ"; e["ㅣ"] = "ᅵ"; e["ㅤ"] = "ᅠ"; e["ㅥ"] = "ᄔ"; e["ㅦ"] = "ᄕ"; e["ㅧ"] = "ᇇ"; e["ㅨ"] = "ᇈ"; e["ㅩ"] = "ᇌ"; e["ㅪ"] = "ᇎ"; e["ㅫ"] = "ᇓ"; e["ㅬ"] = "ᇗ"; e["ㅭ"] = "ᇙ"; e["ㅮ"] = "ᄜ"; e["ㅯ"] = "ᇝ"; e["ㅰ"] = "ᇟ"; e["ㅱ"] = "ᄝ"; e["ㅲ"] = "ᄞ"; e["ㅳ"] = "ᄠ"; e["ㅴ"] = "ᄢ"; e["ㅵ"] = "ᄣ"; e["ㅶ"] = "ᄧ"; e["ㅷ"] = "ᄩ"; e["ㅸ"] = "ᄫ"; e["ㅹ"] = "ᄬ"; e["ㅺ"] = "ᄭ"; e["ㅻ"] = "ᄮ"; e["ㅼ"] = "ᄯ"; e["ㅽ"] = "ᄲ"; e["ㅾ"] = "ᄶ"; e["ㅿ"] = "ᅀ"; e["ㆀ"] = "ᅇ"; e["ㆁ"] = "ᅌ"; e["ㆂ"] = "ᇱ"; e["ㆃ"] = "ᇲ"; e["ㆄ"] = "ᅗ"; e["ㆅ"] = "ᅘ"; e["ㆆ"] = "ᅙ"; e["ㆇ"] = "ᆄ"; e["ㆈ"] = "ᆅ"; e["ㆉ"] = "ᆈ"; e["ㆊ"] = "ᆑ"; e["ㆋ"] = "ᆒ"; e["ㆌ"] = "ᆔ"; e["ㆍ"] = "ᆞ"; e["ㆎ"] = "ᆡ"; e["㈀"] = "(ᄀ)"; e["㈁"] = "(ᄂ)"; e["㈂"] = "(ᄃ)"; e["㈃"] = "(ᄅ)"; e["㈄"] = "(ᄆ)"; e["㈅"] = "(ᄇ)"; e["㈆"] = "(ᄉ)"; e["㈇"] = "(ᄋ)"; e["㈈"] = "(ᄌ)"; e["㈉"] = "(ᄎ)"; e["㈊"] = "(ᄏ)"; e["㈋"] = "(ᄐ)"; e["㈌"] = "(ᄑ)"; e["㈍"] = "(ᄒ)"; e["㈎"] = "(가)"; e["㈏"] = "(나)"; e["㈐"] = "(다)"; e["㈑"] = "(라)"; e["㈒"] = "(마)"; e["㈓"] = "(바)"; e["㈔"] = "(사)"; e["㈕"] = "(아)"; e["㈖"] = "(자)"; e["㈗"] = "(차)"; e["㈘"] = "(카)"; e["㈙"] = "(타)"; e["㈚"] = "(파)"; e["㈛"] = "(하)"; e["㈜"] = "(주)"; e["㈝"] = "(오전)"; e["㈞"] = "(오후)"; e["㈠"] = "(一)"; e["㈡"] = "(二)"; e["㈢"] = "(三)"; e["㈣"] = "(四)"; e["㈤"] = "(五)"; e["㈥"] = "(六)"; e["㈦"] = "(七)"; e["㈧"] = "(八)"; e["㈨"] = "(九)"; e["㈩"] = "(十)"; e["㈪"] = "(月)"; e["㈫"] = "(火)"; e["㈬"] = "(水)"; e["㈭"] = "(木)"; e["㈮"] = "(金)"; e["㈯"] = "(土)"; e["㈰"] = "(日)"; e["㈱"] = "(株)"; e["㈲"] = "(有)"; e["㈳"] = "(社)"; e["㈴"] = "(名)"; e["㈵"] = "(特)"; e["㈶"] = "(財)"; e["㈷"] = "(祝)"; e["㈸"] = "(労)"; e["㈹"] = "(代)"; e["㈺"] = "(呼)"; e["㈻"] = "(学)"; e["㈼"] = "(監)"; e["㈽"] = "(企)"; e["㈾"] = "(資)"; e["㈿"] = "(協)"; e["㉀"] = "(祭)"; e["㉁"] = "(休)"; e["㉂"] = "(自)"; e["㉃"] = "(至)"; e["㋀"] = "1月"; e["㋁"] = "2月"; e["㋂"] = "3月"; e["㋃"] = "4月"; e["㋄"] = "5月"; e["㋅"] = "6月"; e["㋆"] = "7月"; e["㋇"] = "8月"; e["㋈"] = "9月"; e["㋉"] = "10月"; e["㋊"] = "11月"; e["㋋"] = "12月"; e["㍘"] = "0点"; e["㍙"] = "1点"; e["㍚"] = "2点"; e["㍛"] = "3点"; e["㍜"] = "4点"; e["㍝"] = "5点"; e["㍞"] = "6点"; e["㍟"] = "7点"; e["㍠"] = "8点"; e["㍡"] = "9点"; e["㍢"] = "10点"; e["㍣"] = "11点"; e["㍤"] = "12点"; e["㍥"] = "13点"; e["㍦"] = "14点"; e["㍧"] = "15点"; e["㍨"] = "16点"; e["㍩"] = "17点"; e["㍪"] = "18点"; e["㍫"] = "19点"; e["㍬"] = "20点"; e["㍭"] = "21点"; e["㍮"] = "22点"; e["㍯"] = "23点"; e["㍰"] = "24点"; e["㏠"] = "1日"; e["㏡"] = "2日"; e["㏢"] = "3日"; e["㏣"] = "4日"; e["㏤"] = "5日"; e["㏥"] = "6日"; e["㏦"] = "7日"; e["㏧"] = "8日"; e["㏨"] = "9日"; e["㏩"] = "10日"; e["㏪"] = "11日"; e["㏫"] = "12日"; e["㏬"] = "13日"; e["㏭"] = "14日"; e["㏮"] = "15日"; e["㏯"] = "16日"; e["㏰"] = "17日"; e["㏱"] = "18日"; e["㏲"] = "19日"; e["㏳"] = "20日"; e["㏴"] = "21日"; e["㏵"] = "22日"; e["㏶"] = "23日"; e["㏷"] = "24日"; e["㏸"] = "25日"; e["㏹"] = "26日"; e["㏺"] = "27日"; e["㏻"] = "28日"; e["㏼"] = "29日"; e["㏽"] = "30日"; e["㏾"] = "31日"; e["ﬀ"] = "ff"; e["ﬁ"] = "fi"; e["ﬂ"] = "fl"; e["ﬃ"] = "ffi"; e["ﬄ"] = "ffl"; e["ﬅ"] = "ſt"; e["ﬆ"] = "st"; e["ﬓ"] = "մն"; e["ﬔ"] = "մե"; e["ﬕ"] = "մի"; e["ﬖ"] = "վն"; e["ﬗ"] = "մխ"; e["ﭏ"] = "אל"; e["ﭐ"] = "ٱ"; e["ﭑ"] = "ٱ"; e["ﭒ"] = "ٻ"; e["ﭓ"] = "ٻ"; e["ﭔ"] = "ٻ"; e["ﭕ"] = "ٻ"; e["ﭖ"] = "پ"; e["ﭗ"] = "پ"; e["ﭘ"] = "پ"; e["ﭙ"] = "پ"; e["ﭚ"] = "ڀ"; e["ﭛ"] = "ڀ"; e["ﭜ"] = "ڀ"; e["ﭝ"] = "ڀ"; e["ﭞ"] = "ٺ"; e["ﭟ"] = "ٺ"; e["ﭠ"] = "ٺ"; e["ﭡ"] = "ٺ"; e["ﭢ"] = "ٿ"; e["ﭣ"] = "ٿ"; e["ﭤ"] = "ٿ"; e["ﭥ"] = "ٿ"; e["ﭦ"] = "ٹ"; e["ﭧ"] = "ٹ"; e["ﭨ"] = "ٹ"; e["ﭩ"] = "ٹ"; e["ﭪ"] = "ڤ"; e["ﭫ"] = "ڤ"; e["ﭬ"] = "ڤ"; e["ﭭ"] = "ڤ"; e["ﭮ"] = "ڦ"; e["ﭯ"] = "ڦ"; e["ﭰ"] = "ڦ"; e["ﭱ"] = "ڦ"; e["ﭲ"] = "ڄ"; e["ﭳ"] = "ڄ"; e["ﭴ"] = "ڄ"; e["ﭵ"] = "ڄ"; e["ﭶ"] = "ڃ"; e["ﭷ"] = "ڃ"; e["ﭸ"] = "ڃ"; e["ﭹ"] = "ڃ"; e["ﭺ"] = "چ"; e["ﭻ"] = "چ"; e["ﭼ"] = "چ"; e["ﭽ"] = "چ"; e["ﭾ"] = "ڇ"; e["ﭿ"] = "ڇ"; e["ﮀ"] = "ڇ"; e["ﮁ"] = "ڇ"; e["ﮂ"] = "ڍ"; e["ﮃ"] = "ڍ"; e["ﮄ"] = "ڌ"; e["ﮅ"] = "ڌ"; e["ﮆ"] = "ڎ"; e["ﮇ"] = "ڎ"; e["ﮈ"] = "ڈ"; e["ﮉ"] = "ڈ"; e["ﮊ"] = "ژ"; e["ﮋ"] = "ژ"; e["ﮌ"] = "ڑ"; e["ﮍ"] = "ڑ"; e["ﮎ"] = "ک"; e["ﮏ"] = "ک"; e["ﮐ"] = "ک"; e["ﮑ"] = "ک"; e["ﮒ"] = "گ"; e["ﮓ"] = "گ"; e["ﮔ"] = "گ"; e["ﮕ"] = "گ"; e["ﮖ"] = "ڳ"; e["ﮗ"] = "ڳ"; e["ﮘ"] = "ڳ"; e["ﮙ"] = "ڳ"; e["ﮚ"] = "ڱ"; e["ﮛ"] = "ڱ"; e["ﮜ"] = "ڱ"; e["ﮝ"] = "ڱ"; e["ﮞ"] = "ں"; e["ﮟ"] = "ں"; e["ﮠ"] = "ڻ"; e["ﮡ"] = "ڻ"; e["ﮢ"] = "ڻ"; e["ﮣ"] = "ڻ"; e["ﮤ"] = "ۀ"; e["ﮥ"] = "ۀ"; e["ﮦ"] = "ہ"; e["ﮧ"] = "ہ"; e["ﮨ"] = "ہ"; e["ﮩ"] = "ہ"; e["ﮪ"] = "ھ"; e["ﮫ"] = "ھ"; e["ﮬ"] = "ھ"; e["ﮭ"] = "ھ"; e["ﮮ"] = "ے"; e["ﮯ"] = "ے"; e["ﮰ"] = "ۓ"; e["ﮱ"] = "ۓ"; e["ﯓ"] = "ڭ"; e["ﯔ"] = "ڭ"; e["ﯕ"] = "ڭ"; e["ﯖ"] = "ڭ"; e["ﯗ"] = "ۇ"; e["ﯘ"] = "ۇ"; e["ﯙ"] = "ۆ"; e["ﯚ"] = "ۆ"; e["ﯛ"] = "ۈ"; e["ﯜ"] = "ۈ"; e["ﯝ"] = "ٷ"; e["ﯞ"] = "ۋ"; e["ﯟ"] = "ۋ"; e["ﯠ"] = "ۅ"; e["ﯡ"] = "ۅ"; e["ﯢ"] = "ۉ"; e["ﯣ"] = "ۉ"; e["ﯤ"] = "ې"; e["ﯥ"] = "ې"; e["ﯦ"] = "ې"; e["ﯧ"] = "ې"; e["ﯨ"] = "ى"; e["ﯩ"] = "ى"; e["ﯪ"] = "ئا"; e["ﯫ"] = "ئا"; e["ﯬ"] = "ئە"; e["ﯭ"] = "ئە"; e["ﯮ"] = "ئو"; e["ﯯ"] = "ئو"; e["ﯰ"] = "ئۇ"; e["ﯱ"] = "ئۇ"; e["ﯲ"] = "ئۆ"; e["ﯳ"] = "ئۆ"; e["ﯴ"] = "ئۈ"; e["ﯵ"] = "ئۈ"; e["ﯶ"] = "ئې"; e["ﯷ"] = "ئې"; e["ﯸ"] = "ئې"; e["ﯹ"] = "ئى"; e["ﯺ"] = "ئى"; e["ﯻ"] = "ئى"; e["ﯼ"] = "ی"; e["ﯽ"] = "ی"; e["ﯾ"] = "ی"; e["ﯿ"] = "ی"; e["ﰀ"] = "ئج"; e["ﰁ"] = "ئح"; e["ﰂ"] = "ئم"; e["ﰃ"] = "ئى"; e["ﰄ"] = "ئي"; e["ﰅ"] = "بج"; e["ﰆ"] = "بح"; e["ﰇ"] = "بخ"; e["ﰈ"] = "بم"; e["ﰉ"] = "بى"; e["ﰊ"] = "بي"; e["ﰋ"] = "تج"; e["ﰌ"] = "تح"; e["ﰍ"] = "تخ"; e["ﰎ"] = "تم"; e["ﰏ"] = "تى"; e["ﰐ"] = "تي"; e["ﰑ"] = "ثج"; e["ﰒ"] = "ثم"; e["ﰓ"] = "ثى"; e["ﰔ"] = "ثي"; e["ﰕ"] = "جح"; e["ﰖ"] = "جم"; e["ﰗ"] = "حج"; e["ﰘ"] = "حم"; e["ﰙ"] = "خج"; e["ﰚ"] = "خح"; e["ﰛ"] = "خم"; e["ﰜ"] = "سج"; e["ﰝ"] = "سح"; e["ﰞ"] = "سخ"; e["ﰟ"] = "سم"; e["ﰠ"] = "صح"; e["ﰡ"] = "صم"; e["ﰢ"] = "ضج"; e["ﰣ"] = "ضح"; e["ﰤ"] = "ضخ"; e["ﰥ"] = "ضم"; e["ﰦ"] = "طح"; e["ﰧ"] = "طم"; e["ﰨ"] = "ظم"; e["ﰩ"] = "عج"; e["ﰪ"] = "عم"; e["ﰫ"] = "غج"; e["ﰬ"] = "غم"; e["ﰭ"] = "فج"; e["ﰮ"] = "فح"; e["ﰯ"] = "فخ"; e["ﰰ"] = "فم"; e["ﰱ"] = "فى"; e["ﰲ"] = "في"; e["ﰳ"] = "قح"; e["ﰴ"] = "قم"; e["ﰵ"] = "قى"; e["ﰶ"] = "قي"; e["ﰷ"] = "كا"; e["ﰸ"] = "كج"; e["ﰹ"] = "كح"; e["ﰺ"] = "كخ"; e["ﰻ"] = "كل"; e["ﰼ"] = "كم"; e["ﰽ"] = "كى"; e["ﰾ"] = "كي"; e["ﰿ"] = "لج"; e["ﱀ"] = "لح"; e["ﱁ"] = "لخ"; e["ﱂ"] = "لم"; e["ﱃ"] = "لى"; e["ﱄ"] = "لي"; e["ﱅ"] = "مج"; e["ﱆ"] = "مح"; e["ﱇ"] = "مخ"; e["ﱈ"] = "مم"; e["ﱉ"] = "مى"; e["ﱊ"] = "مي"; e["ﱋ"] = "نج"; e["ﱌ"] = "نح"; e["ﱍ"] = "نخ"; e["ﱎ"] = "نم"; e["ﱏ"] = "نى"; e["ﱐ"] = "ني"; e["ﱑ"] = "هج"; e["ﱒ"] = "هم"; e["ﱓ"] = "هى"; e["ﱔ"] = "هي"; e["ﱕ"] = "يج"; e["ﱖ"] = "يح"; e["ﱗ"] = "يخ"; e["ﱘ"] = "يم"; e["ﱙ"] = "يى"; e["ﱚ"] = "يي"; e["ﱛ"] = "ذٰ"; e["ﱜ"] = "رٰ"; e["ﱝ"] = "ىٰ"; e["ﱞ"] = " ٌّ"; e["ﱟ"] = " ٍّ"; e["ﱠ"] = " َّ"; e["ﱡ"] = " ُّ"; e["ﱢ"] = " ِّ"; e["ﱣ"] = " ّٰ"; e["ﱤ"] = "ئر"; e["ﱥ"] = "ئز"; e["ﱦ"] = "ئم"; e["ﱧ"] = "ئن"; e["ﱨ"] = "ئى"; e["ﱩ"] = "ئي"; e["ﱪ"] = "بر"; e["ﱫ"] = "بز"; e["ﱬ"] = "بم"; e["ﱭ"] = "بن"; e["ﱮ"] = "بى"; e["ﱯ"] = "بي"; e["ﱰ"] = "تر"; e["ﱱ"] = "تز"; e["ﱲ"] = "تم"; e["ﱳ"] = "تن"; e["ﱴ"] = "تى"; e["ﱵ"] = "تي"; e["ﱶ"] = "ثر"; e["ﱷ"] = "ثز"; e["ﱸ"] = "ثم"; e["ﱹ"] = "ثن"; e["ﱺ"] = "ثى"; e["ﱻ"] = "ثي"; e["ﱼ"] = "فى"; e["ﱽ"] = "في"; e["ﱾ"] = "قى"; e["ﱿ"] = "قي"; e["ﲀ"] = "كا"; e["ﲁ"] = "كل"; e["ﲂ"] = "كم"; e["ﲃ"] = "كى"; e["ﲄ"] = "كي"; e["ﲅ"] = "لم"; e["ﲆ"] = "لى"; e["ﲇ"] = "لي"; e["ﲈ"] = "ما"; e["ﲉ"] = "مم"; e["ﲊ"] = "نر"; e["ﲋ"] = "نز"; e["ﲌ"] = "نم"; e["ﲍ"] = "نن"; e["ﲎ"] = "نى"; e["ﲏ"] = "ني"; e["ﲐ"] = "ىٰ"; e["ﲑ"] = "ير"; e["ﲒ"] = "يز"; e["ﲓ"] = "يم"; e["ﲔ"] = "ين"; e["ﲕ"] = "يى"; e["ﲖ"] = "يي"; e["ﲗ"] = "ئج"; e["ﲘ"] = "ئح"; e["ﲙ"] = "ئخ"; e["ﲚ"] = "ئم"; e["ﲛ"] = "ئه"; e["ﲜ"] = "بج"; e["ﲝ"] = "بح"; e["ﲞ"] = "بخ"; e["ﲟ"] = "بم"; e["ﲠ"] = "به"; e["ﲡ"] = "تج"; e["ﲢ"] = "تح"; e["ﲣ"] = "تخ"; e["ﲤ"] = "تم"; e["ﲥ"] = "ته"; e["ﲦ"] = "ثم"; e["ﲧ"] = "جح"; e["ﲨ"] = "جم"; e["ﲩ"] = "حج"; e["ﲪ"] = "حم"; e["ﲫ"] = "خج"; e["ﲬ"] = "خم"; e["ﲭ"] = "سج"; e["ﲮ"] = "سح"; e["ﲯ"] = "سخ"; e["ﲰ"] = "سم"; e["ﲱ"] = "صح"; e["ﲲ"] = "صخ"; e["ﲳ"] = "صم"; e["ﲴ"] = "ضج"; e["ﲵ"] = "ضح"; e["ﲶ"] = "ضخ"; e["ﲷ"] = "ضم"; e["ﲸ"] = "طح"; e["ﲹ"] = "ظم"; e["ﲺ"] = "عج"; e["ﲻ"] = "عم"; e["ﲼ"] = "غج"; e["ﲽ"] = "غم"; e["ﲾ"] = "فج"; e["ﲿ"] = "فح"; e["ﳀ"] = "فخ"; e["ﳁ"] = "فم"; e["ﳂ"] = "قح"; e["ﳃ"] = "قم"; e["ﳄ"] = "كج"; e["ﳅ"] = "كح"; e["ﳆ"] = "كخ"; e["ﳇ"] = "كل"; e["ﳈ"] = "كم"; e["ﳉ"] = "لج"; e["ﳊ"] = "لح"; e["ﳋ"] = "لخ"; e["ﳌ"] = "لم"; e["ﳍ"] = "له"; e["ﳎ"] = "مج"; e["ﳏ"] = "مح"; e["ﳐ"] = "مخ"; e["ﳑ"] = "مم"; e["ﳒ"] = "نج"; e["ﳓ"] = "نح"; e["ﳔ"] = "نخ"; e["ﳕ"] = "نم"; e["ﳖ"] = "نه"; e["ﳗ"] = "هج"; e["ﳘ"] = "هم"; e["ﳙ"] = "هٰ"; e["ﳚ"] = "يج"; e["ﳛ"] = "يح"; e["ﳜ"] = "يخ"; e["ﳝ"] = "يم"; e["ﳞ"] = "يه"; e["ﳟ"] = "ئم"; e["ﳠ"] = "ئه"; e["ﳡ"] = "بم"; e["ﳢ"] = "به"; e["ﳣ"] = "تم"; e["ﳤ"] = "ته"; e["ﳥ"] = "ثم"; e["ﳦ"] = "ثه"; e["ﳧ"] = "سم"; e["ﳨ"] = "سه"; e["ﳩ"] = "شم"; e["ﳪ"] = "شه"; e["ﳫ"] = "كل"; e["ﳬ"] = "كم"; e["ﳭ"] = "لم"; e["ﳮ"] = "نم"; e["ﳯ"] = "نه"; e["ﳰ"] = "يم"; e["ﳱ"] = "يه"; e["ﳲ"] = "ـَّ"; e["ﳳ"] = "ـُّ"; e["ﳴ"] = "ـِّ"; e["ﳵ"] = "طى"; e["ﳶ"] = "طي"; e["ﳷ"] = "عى"; e["ﳸ"] = "عي"; e["ﳹ"] = "غى"; e["ﳺ"] = "غي"; e["ﳻ"] = "سى"; e["ﳼ"] = "سي"; e["ﳽ"] = "شى"; e["ﳾ"] = "شي"; e["ﳿ"] = "حى"; e["ﴀ"] = "حي"; e["ﴁ"] = "جى"; e["ﴂ"] = "جي"; e["ﴃ"] = "خى"; e["ﴄ"] = "خي"; e["ﴅ"] = "صى"; e["ﴆ"] = "صي"; e["ﴇ"] = "ضى"; e["ﴈ"] = "ضي"; e["ﴉ"] = "شج"; e["ﴊ"] = "شح"; e["ﴋ"] = "شخ"; e["ﴌ"] = "شم"; e["ﴍ"] = "شر"; e["ﴎ"] = "سر"; e["ﴏ"] = "صر"; e["ﴐ"] = "ضر"; e["ﴑ"] = "طى"; e["ﴒ"] = "طي"; e["ﴓ"] = "عى"; e["ﴔ"] = "عي"; e["ﴕ"] = "غى"; e["ﴖ"] = "غي"; e["ﴗ"] = "سى"; e["ﴘ"] = "سي"; e["ﴙ"] = "شى"; e["ﴚ"] = "شي"; e["ﴛ"] = "حى"; e["ﴜ"] = "حي"; e["ﴝ"] = "جى"; e["ﴞ"] = "جي"; e["ﴟ"] = "خى"; e["ﴠ"] = "خي"; e["ﴡ"] = "صى"; e["ﴢ"] = "صي"; e["ﴣ"] = "ضى"; e["ﴤ"] = "ضي"; e["ﴥ"] = "شج"; e["ﴦ"] = "شح"; e["ﴧ"] = "شخ"; e["ﴨ"] = "شم"; e["ﴩ"] = "شر"; e["ﴪ"] = "سر"; e["ﴫ"] = "صر"; e["ﴬ"] = "ضر"; e["ﴭ"] = "شج"; e["ﴮ"] = "شح"; e["ﴯ"] = "شخ"; e["ﴰ"] = "شم"; e["ﴱ"] = "سه"; e["ﴲ"] = "شه"; e["ﴳ"] = "طم"; e["ﴴ"] = "سج"; e["ﴵ"] = "سح"; e["ﴶ"] = "سخ"; e["ﴷ"] = "شج"; e["ﴸ"] = "شح"; e["ﴹ"] = "شخ"; e["ﴺ"] = "طم"; e["ﴻ"] = "ظم"; e["ﴼ"] = "اً"; e["ﴽ"] = "اً"; e["ﵐ"] = "تجم"; e["ﵑ"] = "تحج"; e["ﵒ"] = "تحج"; e["ﵓ"] = "تحم"; e["ﵔ"] = "تخم"; e["ﵕ"] = "تمج"; e["ﵖ"] = "تمح"; e["ﵗ"] = "تمخ"; e["ﵘ"] = "جمح"; e["ﵙ"] = "جمح"; e["ﵚ"] = "حمي"; e["ﵛ"] = "حمى"; e["ﵜ"] = "سحج"; e["ﵝ"] = "سجح"; e["ﵞ"] = "سجى"; e["ﵟ"] = "سمح"; e["ﵠ"] = "سمح"; e["ﵡ"] = "سمج"; e["ﵢ"] = "سمم"; e["ﵣ"] = "سمم"; e["ﵤ"] = "صحح"; e["ﵥ"] = "صحح"; e["ﵦ"] = "صمم"; e["ﵧ"] = "شحم"; e["ﵨ"] = "شحم"; e["ﵩ"] = "شجي"; e["ﵪ"] = "شمخ"; e["ﵫ"] = "شمخ"; e["ﵬ"] = "شمم"; e["ﵭ"] = "شمم"; e["ﵮ"] = "ضحى"; e["ﵯ"] = "ضخم"; e["ﵰ"] = "ضخم"; e["ﵱ"] = "طمح"; e["ﵲ"] = "طمح"; e["ﵳ"] = "طمم"; e["ﵴ"] = "طمي"; e["ﵵ"] = "عجم"; e["ﵶ"] = "عمم"; e["ﵷ"] = "عمم"; e["ﵸ"] = "عمى"; e["ﵹ"] = "غمم"; e["ﵺ"] = "غمي"; e["ﵻ"] = "غمى"; e["ﵼ"] = "فخم"; e["ﵽ"] = "فخم"; e["ﵾ"] = "قمح"; e["ﵿ"] = "قمم"; e["ﶀ"] = "لحم"; e["ﶁ"] = "لحي"; e["ﶂ"] = "لحى"; e["ﶃ"] = "لجج"; e["ﶄ"] = "لجج"; e["ﶅ"] = "لخم"; e["ﶆ"] = "لخم"; e["ﶇ"] = "لمح"; e["ﶈ"] = "لمح"; e["ﶉ"] = "محج"; e["ﶊ"] = "محم"; e["ﶋ"] = "محي"; e["ﶌ"] = "مجح"; e["ﶍ"] = "مجم"; e["ﶎ"] = "مخج"; e["ﶏ"] = "مخم"; e["ﶒ"] = "مجخ"; e["ﶓ"] = "همج"; e["ﶔ"] = "همم"; e["ﶕ"] = "نحم"; e["ﶖ"] = "نحى"; e["ﶗ"] = "نجم"; e["ﶘ"] = "نجم"; e["ﶙ"] = "نجى"; e["ﶚ"] = "نمي"; e["ﶛ"] = "نمى"; e["ﶜ"] = "يمم"; e["ﶝ"] = "يمم"; e["ﶞ"] = "بخي"; e["ﶟ"] = "تجي"; e["ﶠ"] = "تجى"; e["ﶡ"] = "تخي"; e["ﶢ"] = "تخى"; e["ﶣ"] = "تمي"; e["ﶤ"] = "تمى"; e["ﶥ"] = "جمي"; e["ﶦ"] = "جحى"; e["ﶧ"] = "جمى"; e["ﶨ"] = "سخى"; e["ﶩ"] = "صحي"; e["ﶪ"] = "شحي"; e["ﶫ"] = "ضحي"; e["ﶬ"] = "لجي"; e["ﶭ"] = "لمي"; e["ﶮ"] = "يحي"; e["ﶯ"] = "يجي"; e["ﶰ"] = "يمي"; e["ﶱ"] = "ممي"; e["ﶲ"] = "قمي"; e["ﶳ"] = "نحي"; e["ﶴ"] = "قمح"; e["ﶵ"] = "لحم"; e["ﶶ"] = "عمي"; e["ﶷ"] = "كمي"; e["ﶸ"] = "نجح"; e["ﶹ"] = "مخي"; e["ﶺ"] = "لجم"; e["ﶻ"] = "كمم"; e["ﶼ"] = "لجم"; e["ﶽ"] = "نجح"; e["ﶾ"] = "جحي"; e["ﶿ"] = "حجي"; e["ﷀ"] = "مجي"; e["ﷁ"] = "فمي"; e["ﷂ"] = "بحي"; e["ﷃ"] = "كمم"; e["ﷄ"] = "عجم"; e["ﷅ"] = "صمم"; e["ﷆ"] = "سخي"; e["ﷇ"] = "نجي"; e["﹉"] = "‾"; e["﹊"] = "‾"; e["﹋"] = "‾"; e["﹌"] = "‾"; e["﹍"] = "_"; e["﹎"] = "_"; e["﹏"] = "_"; e["ﺀ"] = "ء"; e["ﺁ"] = "آ"; e["ﺂ"] = "آ"; e["ﺃ"] = "أ"; e["ﺄ"] = "أ"; e["ﺅ"] = "ؤ"; e["ﺆ"] = "ؤ"; e["ﺇ"] = "إ"; e["ﺈ"] = "إ"; e["ﺉ"] = "ئ"; e["ﺊ"] = "ئ"; e["ﺋ"] = "ئ"; e["ﺌ"] = "ئ"; e["ﺍ"] = "ا"; e["ﺎ"] = "ا"; e["ﺏ"] = "ب"; e["ﺐ"] = "ب"; e["ﺑ"] = "ب"; e["ﺒ"] = "ب"; e["ﺓ"] = "ة"; e["ﺔ"] = "ة"; e["ﺕ"] = "ت"; e["ﺖ"] = "ت"; e["ﺗ"] = "ت"; e["ﺘ"] = "ت"; e["ﺙ"] = "ث"; e["ﺚ"] = "ث"; e["ﺛ"] = "ث"; e["ﺜ"] = "ث"; e["ﺝ"] = "ج"; e["ﺞ"] = "ج"; e["ﺟ"] = "ج"; e["ﺠ"] = "ج"; e["ﺡ"] = "ح"; e["ﺢ"] = "ح"; e["ﺣ"] = "ح"; e["ﺤ"] = "ح"; e["ﺥ"] = "خ"; e["ﺦ"] = "خ"; e["ﺧ"] = "خ"; e["ﺨ"] = "خ"; e["ﺩ"] = "د"; e["ﺪ"] = "د"; e["ﺫ"] = "ذ"; e["ﺬ"] = "ذ"; e["ﺭ"] = "ر"; e["ﺮ"] = "ر"; e["ﺯ"] = "ز"; e["ﺰ"] = "ز"; e["ﺱ"] = "س"; e["ﺲ"] = "س"; e["ﺳ"] = "س"; e["ﺴ"] = "س"; e["ﺵ"] = "ش"; e["ﺶ"] = "ش"; e["ﺷ"] = "ش"; e["ﺸ"] = "ش"; e["ﺹ"] = "ص"; e["ﺺ"] = "ص"; e["ﺻ"] = "ص"; e["ﺼ"] = "ص"; e["ﺽ"] = "ض"; e["ﺾ"] = "ض"; e["ﺿ"] = "ض"; e["ﻀ"] = "ض"; e["ﻁ"] = "ط"; e["ﻂ"] = "ط"; e["ﻃ"] = "ط"; e["ﻄ"] = "ط"; e["ﻅ"] = "ظ"; e["ﻆ"] = "ظ"; e["ﻇ"] = "ظ"; e["ﻈ"] = "ظ"; e["ﻉ"] = "ع"; e["ﻊ"] = "ع"; e["ﻋ"] = "ع"; e["ﻌ"] = "ع"; e["ﻍ"] = "غ"; e["ﻎ"] = "غ"; e["ﻏ"] = "غ"; e["ﻐ"] = "غ"; e["ﻑ"] = "ف"; e["ﻒ"] = "ف"; e["ﻓ"] = "ف"; e["ﻔ"] = "ف"; e["ﻕ"] = "ق"; e["ﻖ"] = "ق"; e["ﻗ"] = "ق"; e["ﻘ"] = "ق"; e["ﻙ"] = "ك"; e["ﻚ"] = "ك"; e["ﻛ"] = "ك"; e["ﻜ"] = "ك"; e["ﻝ"] = "ل"; e["ﻞ"] = "ل"; e["ﻟ"] = "ل"; e["ﻠ"] = "ل"; e["ﻡ"] = "م"; e["ﻢ"] = "م"; e["ﻣ"] = "م"; e["ﻤ"] = "م"; e["ﻥ"] = "ن"; e["ﻦ"] = "ن"; e["ﻧ"] = "ن"; e["ﻨ"] = "ن"; e["ﻩ"] = "ه"; e["ﻪ"] = "ه"; e["ﻫ"] = "ه"; e["ﻬ"] = "ه"; e["ﻭ"] = "و"; e["ﻮ"] = "و"; e["ﻯ"] = "ى"; e["ﻰ"] = "ى"; e["ﻱ"] = "ي"; e["ﻲ"] = "ي"; e["ﻳ"] = "ي"; e["ﻴ"] = "ي"; e["ﻵ"] = "لآ"; e["ﻶ"] = "لآ"; e["ﻷ"] = "لأ"; e["ﻸ"] = "لأ"; e["ﻹ"] = "لإ"; e["ﻺ"] = "لإ"; e["ﻻ"] = "لا"; e["ﻼ"] = "لا" })); t.mapSpecialUnicodeValues = function (e) { return e >= 65520 && e <= 65535 ? 0 : e >= 62976 && e <= 63743 ? i()[e] || e : 173 === e ? 45 : e }; t.reverseIfRtl = function (e) { var t, a, r = e.length; if (r <= 1 || !(t = e.charCodeAt(0), a = n[13], t >= a.begin && t < a.end || t >= (a = n[11]).begin && t < a.end)) return e; for (var i = "", s = r - 1; s >= 0; s--)i += e[s]; return i }; t.getUnicodeRangeFor = function (e) { for (var t = 0, a = n.length; t < a; t++) { var r = n[t]; if (e >= r.begin && e < r.end) return t } return -1 }; t.getNormalizedUnicodes = s; t.getUnicodeForGlyph = function (e, t) { var a = t[e]; if (void 0 !== a) return a; if (!e) return -1; if ("u" === e[0]) { var r, i = e.length; if (7 === i && "n" === e[1] && "i" === e[2]) r = e.substring(3); else { if (!(i >= 5 && i <= 7)) return -1; r = e.substring(1) } if (r === r.toUpperCase() && (a = parseInt(r, 16)) >= 0) return a } return -1 } }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.FontRendererFactory = void 0; var r = a(2), i = a(28), n = a(31), s = a(30), o = a(11), c = function () { function e(e, t) { return e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3] } function t(e, t) { return e[t] << 8 | e[t + 1] } function a(e) { const t = e.length; let a = 32768; t < 1240 ? a = 107 : t < 33900 && (a = 1131); return a } function c(a, i, n) { var s, o, c, l = 1 === t(a, i + 2) ? e(a, i + 8) : e(a, i + 16), h = t(a, i + l); if (4 === h) { t(a, i + l + 2); var u = t(a, i + l + 6) >> 1; o = i + l + 14; s = []; for (c = 0; c < u; c++, o += 2)s[c] = { end: t(a, o) }; o += 2; for (c = 0; c < u; c++, o += 2)s[c].start = t(a, o); for (c = 0; c < u; c++, o += 2)s[c].idDelta = t(a, o); for (c = 0; c < u; c++, o += 2) { var d = t(a, o); if (0 !== d) { s[c].ids = []; for (var f = 0, g = s[c].end - s[c].start + 1; f < g; f++) { s[c].ids[f] = t(a, o + d); d += 2 } } } return s } if (12 === h) { e(a, i + l + 4); var m = e(a, i + l + 12); o = i + l + 16; s = []; for (c = 0; c < m; c++) { s.push({ start: e(a, o), end: e(a, o + 4), idDelta: e(a, o + 8) - e(a, o) }); o += 12 } return s } throw new r.FormatError(`unsupported cmap: ${h}`) } function l(e, t, a, r) { var n = new i.CFFParser(new o.Stream(e, t, a - t), {}, r).parse(); return { glyphs: n.charStrings.objects, subrs: n.topDict.privateDict && n.topDict.privateDict.subrsIndex && n.topDict.privateDict.subrsIndex.objects, gsubrs: n.globalSubrIndex && n.globalSubrIndex.objects, isCFFCIDFont: n.isCIDFont, fdSelect: n.fdSelect, fdArray: n.fdArray } } function h(e, t) { for (var a = t.codePointAt(0), r = 0, i = 0, n = e.length - 1; i < n;) { var s = i + n + 1 >> 1; a < e[s].start ? n = s - 1 : i = s } e[i].start <= a && a <= e[i].end && (r = e[i].idDelta + (e[i].ids ? e[i].ids[a - e[i].start] : a) & 65535); return { charCode: a, glyphId: r } } const u = []; class d { constructor(e) { this.constructor === d && (0, r.unreachable)("Cannot initialize CompiledFont."); this.fontMatrix = e; this.compiledGlyphs = Object.create(null); this.compiledCharCodeToGlyphId = Object.create(null) } getPathJs(e) { const t = h(this.cmap, e); let a = this.compiledGlyphs[t.glyphId]; if (!a) { a = this.compileGlyph(this.glyphs[t.glyphId], t.glyphId); this.compiledGlyphs[t.glyphId] = a } void 0 === this.compiledCharCodeToGlyphId[t.charCode] && (this.compiledCharCodeToGlyphId[t.charCode] = t.glyphId); return a } compileGlyph(e, t) { if (!e || 0 === e.length || 14 === e[0]) return u; let a = this.fontMatrix; if (this.isCFFCIDFont) { const e = this.fdSelect.getFDIndex(t); if (e >= 0 && e < this.fdArray.length) { a = this.fdArray[e].getByName("FontMatrix") || r.FONT_IDENTITY_MATRIX } else (0, r.warn)("Invalid fd index for glyph index.") } const i = []; i.push({ cmd: "save" }); i.push({ cmd: "transform", args: a.slice() }); i.push({ cmd: "scale", args: ["size", "-size"] }); this.compileGlyphImpl(e, i, t); i.push({ cmd: "restore" }); return i } compileGlyphImpl() { (0, r.unreachable)("Children classes should implement this.") } hasBuiltPath(e) { const t = h(this.cmap, e); return void 0 !== this.compiledGlyphs[t.glyphId] && void 0 !== this.compiledCharCodeToGlyphId[t.charCode] } } class f extends d { constructor(e, t, a) { super(a || [488e-6, 0, 0, 488e-6, 0, 0]); this.glyphs = e; this.cmap = t } compileGlyphImpl(e, t) { !function e(t, a, r) { function i(e, t) { a.push({ cmd: "moveTo", args: [e, t] }) } function n(e, t) { a.push({ cmd: "lineTo", args: [e, t] }) } function s(e, t, r, i) { a.push({ cmd: "quadraticCurveTo", args: [e, t, r, i] }) } var o, c = 0, l = (t[c] << 24 | t[c + 1] << 16) >> 16, h = 0, u = 0; c += 10; if (l < 0) do { o = t[c] << 8 | t[c + 1]; var d, f, g = t[c + 2] << 8 | t[c + 3]; c += 4; if (1 & o) { d = (t[c] << 24 | t[c + 1] << 16) >> 16; f = (t[c + 2] << 24 | t[c + 3] << 16) >> 16; c += 4 } else { d = t[c++]; f = t[c++] } if (2 & o) { h = d; u = f } else { h = 0; u = 0 } var m = 1, p = 1, b = 0, y = 0; if (8 & o) { m = p = (t[c] << 24 | t[c + 1] << 16) / 1073741824; c += 2 } else if (64 & o) { m = (t[c] << 24 | t[c + 1] << 16) / 1073741824; p = (t[c + 2] << 24 | t[c + 3] << 16) / 1073741824; c += 4 } else if (128 & o) { m = (t[c] << 24 | t[c + 1] << 16) / 1073741824; b = (t[c + 2] << 24 | t[c + 3] << 16) / 1073741824; y = (t[c + 4] << 24 | t[c + 5] << 16) / 1073741824; p = (t[c + 6] << 24 | t[c + 7] << 16) / 1073741824; c += 8 } var v = r.glyphs[g]; if (v) { a.push({ cmd: "save" }); a.push({ cmd: "transform", args: [m, b, y, p, h, u] }); e(v, a, r); a.push({ cmd: "restore" }) } } while (32 & o); else { var w, k, S = []; for (w = 0; w < l; w++) { S.push(t[c] << 8 | t[c + 1]); c += 2 } c += 2 + (t[c] << 8 | t[c + 1]); for (var C = S[S.length - 1] + 1, x = []; x.length < C;) { var A = 1; 8 & (o = t[c++]) && (A += t[c++]); for (; A-- > 0;)x.push({ flags: o }) } for (w = 0; w < C; w++) { switch (18 & x[w].flags) { case 0: h += (t[c] << 24 | t[c + 1] << 16) >> 16; c += 2; break; case 2: h -= t[c++]; break; case 18: h += t[c++] }x[w].x = h } for (w = 0; w < C; w++) { switch (36 & x[w].flags) { case 0: u += (t[c] << 24 | t[c + 1] << 16) >> 16; c += 2; break; case 4: u -= t[c++]; break; case 36: u += t[c++] }x[w].y = u } var I = 0; for (c = 0; c < l; c++) { var F = S[c], T = x.slice(I, F + 1); if (1 & T[0].flags) T.push(T[0]); else if (1 & T[T.length - 1].flags) T.unshift(T[T.length - 1]); else { var E = { flags: 1, x: (T[0].x + T[T.length - 1].x) / 2, y: (T[0].y + T[T.length - 1].y) / 2 }; T.unshift(E); T.push(E) } i(T[0].x, T[0].y); for (w = 1, k = T.length; w < k; w++)if (1 & T[w].flags) n(T[w].x, T[w].y); else if (1 & T[w + 1].flags) { s(T[w].x, T[w].y, T[w + 1].x, T[w + 1].y); w++ } else s(T[w].x, T[w].y, (T[w].x + T[w + 1].x) / 2, (T[w].y + T[w + 1].y) / 2); I = F + 1 } } }(e, t, this) } } class g extends d { constructor(e, t, r, i) { super(r || [.001, 0, 0, .001, 0, 0]); this.glyphs = e.glyphs; this.gsubrs = e.gsubrs || []; this.subrs = e.subrs || []; this.cmap = t; this.glyphNameMap = i || (0, n.getGlyphsUnicode)(); this.gsubrsBias = a(this.gsubrs); this.subrsBias = a(this.subrs); this.isCFFCIDFont = e.isCFFCIDFont; this.fdSelect = e.fdSelect; this.fdArray = e.fdArray } compileGlyphImpl(e, t, i) { !function e(t, i, n, o) { var c = [], l = 0, u = 0, d = 0; function f(e, t) { i.push({ cmd: "moveTo", args: [e, t] }) } function g(e, t) { i.push({ cmd: "lineTo", args: [e, t] }) } function m(e, t, a, r, n, s) { i.push({ cmd: "bezierCurveTo", args: [e, t, a, r, n, s] }) } !function t(p) { for (var b = 0; b < p.length;) { var y, v, w, k, S, C, x, A, I = !1, F = p[b++]; switch (F) { case 1: case 3: d += c.length >> 1; I = !0; break; case 4: u += c.pop(); f(l, u); I = !0; break; case 5: for (; c.length > 0;) { l += c.shift(); u += c.shift(); g(l, u) } break; case 6: for (; c.length > 0;) { g(l += c.shift(), u); if (0 === c.length) break; u += c.shift(); g(l, u) } break; case 7: for (; c.length > 0;) { u += c.shift(); g(l, u); if (0 === c.length) break; g(l += c.shift(), u) } break; case 8: for (; c.length > 0;) { y = l + c.shift(); w = u + c.shift(); v = y + c.shift(); k = w + c.shift(); l = v + c.shift(); u = k + c.shift(); m(y, w, v, k, l, u) } break; case 10: x = c.pop(); A = null; if (n.isCFFCIDFont) { const e = n.fdSelect.getFDIndex(o); if (e >= 0 && e < n.fdArray.length) { const t = n.fdArray[e]; let r; t.privateDict && t.privateDict.subrsIndex && (r = t.privateDict.subrsIndex.objects); r && (A = r[x += a(r)]) } else (0, r.warn)("Invalid fd index for glyph index.") } else A = n.subrs[x + n.subrsBias]; A && t(A); break; case 11: return; case 12: switch (F = p[b++]) { case 34: v = (y = l + c.shift()) + c.shift(); S = u + c.shift(); l = v + c.shift(); m(y, u, v, S, l, S); v = (y = l + c.shift()) + c.shift(); l = v + c.shift(); m(y, S, v, u, l, u); break; case 35: y = l + c.shift(); w = u + c.shift(); v = y + c.shift(); k = w + c.shift(); l = v + c.shift(); u = k + c.shift(); m(y, w, v, k, l, u); y = l + c.shift(); w = u + c.shift(); v = y + c.shift(); k = w + c.shift(); l = v + c.shift(); u = k + c.shift(); m(y, w, v, k, l, u); c.pop(); break; case 36: m(y = l + c.shift(), S = u + c.shift(), v = y + c.shift(), C = S + c.shift(), l = v + c.shift(), C); m(y = l + c.shift(), C, v = y + c.shift(), C + c.shift(), l = v + c.shift(), u); break; case 37: var T = l, E = u; y = l + c.shift(); w = u + c.shift(); v = y + c.shift(); k = w + c.shift(); l = v + c.shift(); u = k + c.shift(); m(y, w, v, k, l, u); y = l + c.shift(); w = u + c.shift(); v = y + c.shift(); k = w + c.shift(); l = v; u = k; Math.abs(l - T) > Math.abs(u - E) ? l += c.shift() : u += c.shift(); m(y, w, v, k, l, u); break; default: throw new r.FormatError(`unknown operator: 12 ${F}`) }break; case 14: if (c.length >= 4) { var O = c.pop(), P = c.pop(); u = c.pop(); l = c.pop(); i.push({ cmd: "save" }); i.push({ cmd: "translate", args: [l, u] }); var B = h(n.cmap, String.fromCharCode(n.glyphNameMap[s.StandardEncoding[O]])); e(n.glyphs[B.glyphId], i, n, B.glyphId); i.push({ cmd: "restore" }); B = h(n.cmap, String.fromCharCode(n.glyphNameMap[s.StandardEncoding[P]])); e(n.glyphs[B.glyphId], i, n, B.glyphId) } return; case 18: d += c.length >> 1; I = !0; break; case 19: case 20: b += (d += c.length >> 1) + 7 >> 3; I = !0; break; case 21: u += c.pop(); f(l += c.pop(), u); I = !0; break; case 22: f(l += c.pop(), u); I = !0; break; case 23: d += c.length >> 1; I = !0; break; case 24: for (; c.length > 2;) { y = l + c.shift(); w = u + c.shift(); v = y + c.shift(); k = w + c.shift(); l = v + c.shift(); u = k + c.shift(); m(y, w, v, k, l, u) } l += c.shift(); u += c.shift(); g(l, u); break; case 25: for (; c.length > 6;) { l += c.shift(); u += c.shift(); g(l, u) } y = l + c.shift(); w = u + c.shift(); v = y + c.shift(); k = w + c.shift(); l = v + c.shift(); u = k + c.shift(); m(y, w, v, k, l, u); break; case 26: c.length % 2 && (l += c.shift()); for (; c.length > 0;) { y = l; w = u + c.shift(); v = y + c.shift(); k = w + c.shift(); l = v; u = k + c.shift(); m(y, w, v, k, l, u) } break; case 27: c.length % 2 && (u += c.shift()); for (; c.length > 0;)m(y = l + c.shift(), w = u, v = y + c.shift(), k = w + c.shift(), l = v + c.shift(), u = k); break; case 28: c.push((p[b] << 24 | p[b + 1] << 16) >> 16); b += 2; break; case 29: x = c.pop() + n.gsubrsBias; (A = n.gsubrs[x]) && t(A); break; case 30: for (; c.length > 0;) { y = l; w = u + c.shift(); v = y + c.shift(); k = w + c.shift(); l = v + c.shift(); u = k + (1 === c.length ? c.shift() : 0); m(y, w, v, k, l, u); if (0 === c.length) break; y = l + c.shift(); w = u; v = y + c.shift(); k = w + c.shift(); u = k + c.shift(); m(y, w, v, k, l = v + (1 === c.length ? c.shift() : 0), u) } break; case 31: for (; c.length > 0;) { y = l + c.shift(); w = u; v = y + c.shift(); k = w + c.shift(); u = k + c.shift(); m(y, w, v, k, l = v + (1 === c.length ? c.shift() : 0), u); if (0 === c.length) break; y = l; w = u + c.shift(); v = y + c.shift(); k = w + c.shift(); l = v + c.shift(); u = k + (1 === c.length ? c.shift() : 0); m(y, w, v, k, l, u) } break; default: if (F < 32) throw new r.FormatError(`unknown operator: ${F}`); if (F < 247) c.push(F - 139); else if (F < 251) c.push(256 * (F - 247) + p[b++] + 108); else if (F < 255) c.push(256 * -(F - 251) - p[b++] - 108); else { c.push((p[b] << 24 | p[b + 1] << 16 | p[b + 2] << 8 | p[b + 3]) / 65536); b += 4 } }I && (c.length = 0) } }(t) }(e, t, this, i) } } return { create: function (a, i) { for (var n, s, o, h, u, d, m = new Uint8Array(a.data), p = t(m, 4), b = 0, y = 12; b < p; b++, y += 16) { var v = (0, r.bytesToString)(m.subarray(y, y + 4)), w = e(m, y + 8), k = e(m, y + 12); switch (v) { case "cmap": n = c(m, w); break; case "glyf": s = m.subarray(w, w + k); break; case "loca": o = m.subarray(w, w + k); break; case "head": d = t(m, w + 18); u = t(m, w + 50); break; case "CFF ": h = l(m, w, w + k, i) } } if (s) { var S = d ? [1 / d, 0, 0, 1 / d, 0, 0] : a.fontMatrix; return new f(function (e, t, a) { var r, i; if (a) { r = 4; i = function (e, t) { return e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3] } } else { r = 2; i = function (e, t) { return e[t] << 9 | e[t + 1] << 1 } } for (var n = [], s = i(t, 0), o = r; o < t.length; o += r) { var c = i(t, o); n.push(e.subarray(s, c)); s = c } return n }(s, o, u), n, S) } return new g(h, n, a.fontMatrix, a.glyphNameMap) } } }(); t.FontRendererFactory = c }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.Type1Parser = void 0; var r = a(30), i = a(7), n = a(11), s = a(2), o = function () { var e = [4], t = [5], a = [6], r = [7], i = [8], n = [12, 35], o = [14], c = [21], l = [22], h = [30], u = [31]; function d() { this.width = 0; this.lsb = 0; this.flexing = !1; this.output = []; this.stack = [] } d.prototype = { convert: function (d, f, g) { for (var m, p, b, y = d.length, v = !1, w = 0; w < y; w++) { var k = d[w]; if (k < 32) { 12 === k && (k = (k << 8) + d[++w]); switch (k) { case 1: case 3: this.stack = []; break; case 4: if (this.flexing) { if (this.stack.length < 1) { v = !0; break } var S = this.stack.pop(); this.stack.push(0, S); break } v = this.executeCommand(1, e); break; case 5: v = this.executeCommand(2, t); break; case 6: v = this.executeCommand(1, a); break; case 7: v = this.executeCommand(1, r); break; case 8: v = this.executeCommand(6, i); break; case 9: this.stack = []; break; case 10: if (this.stack.length < 1) { v = !0; break } if (!f[b = this.stack.pop()]) { v = !0; break } v = this.convert(f[b], f, g); break; case 11: return v; case 13: if (this.stack.length < 2) { v = !0; break } m = this.stack.pop(); p = this.stack.pop(); this.lsb = p; this.width = m; this.stack.push(m, p); v = this.executeCommand(2, l); break; case 14: this.output.push(o[0]); break; case 21: if (this.flexing) break; v = this.executeCommand(2, c); break; case 22: if (this.flexing) { this.stack.push(0); break } v = this.executeCommand(1, l); break; case 30: v = this.executeCommand(4, h); break; case 31: v = this.executeCommand(4, u); break; case 3072: case 3073: case 3074: this.stack = []; break; case 3078: if (g) { this.seac = this.stack.splice(-4, 4); v = this.executeCommand(0, o) } else v = this.executeCommand(4, o); break; case 3079: if (this.stack.length < 4) { v = !0; break } this.stack.pop(); m = this.stack.pop(); var C = this.stack.pop(); p = this.stack.pop(); this.lsb = p; this.width = m; this.stack.push(m, p, C); v = this.executeCommand(3, c); break; case 3084: if (this.stack.length < 2) { v = !0; break } var x = this.stack.pop(), A = this.stack.pop(); this.stack.push(A / x); break; case 3088: if (this.stack.length < 2) { v = !0; break } b = this.stack.pop(); var I = this.stack.pop(); if (0 === b && 3 === I) { var F = this.stack.splice(this.stack.length - 17, 17); this.stack.push(F[2] + F[0], F[3] + F[1], F[4], F[5], F[6], F[7], F[8], F[9], F[10], F[11], F[12], F[13], F[14]); v = this.executeCommand(13, n, !0); this.flexing = !1; this.stack.push(F[15], F[16]) } else 1 === b && 0 === I && (this.flexing = !0); break; case 3089: break; case 3105: this.stack = []; break; default: (0, s.warn)('Unknown type 1 charstring command of "' + k + '"') }if (v) break } else { k <= 246 ? k -= 139 : k = k <= 250 ? 256 * (k - 247) + d[++w] + 108 : k <= 254 ? -256 * (k - 251) - d[++w] - 108 : (255 & d[++w]) << 24 | (255 & d[++w]) << 16 | (255 & d[++w]) << 8 | (255 & d[++w]) << 0; this.stack.push(k) } } return v }, executeCommand(e, t, a) { var r = this.stack.length; if (e > r) return !0; for (var i = r - e, n = i; n < r; n++) { var s = this.stack[n]; if (Number.isInteger(s)) this.output.push(28, s >> 8 & 255, 255 & s); else { s = 65536 * s | 0; this.output.push(255, s >> 24 & 255, s >> 16 & 255, s >> 8 & 255, 255 & s) } } this.output.push.apply(this.output, t); a ? this.stack.splice(i, e) : this.stack.length = 0; return !1 } }; return d }(), c = function () { function e(e) { return e >= 48 && e <= 57 || e >= 65 && e <= 70 || e >= 97 && e <= 102 } function t(e, t, a) { if (a >= e.length) return new Uint8Array(0); var r, i, n = 0 | t; for (r = 0; r < a; r++)n = 52845 * (e[r] + n) + 22719 & 65535; var s = e.length - a, o = new Uint8Array(s); for (r = a, i = 0; i < s; r++, i++) { var c = e[r]; o[i] = c ^ n >> 8; n = 52845 * (c + n) + 22719 & 65535 } return o } function a(e) { return 47 === e || 91 === e || 93 === e || 123 === e || 125 === e || 40 === e || 41 === e } function s(a, r, i) { if (r) { var s = a.getBytes(), o = !(e(s[0]) && e(s[1]) && e(s[2]) && e(s[3])); a = new n.Stream(o ? t(s, 55665, 4) : function (t, a, r) { var i, n, s = 0 | a, o = t.length, c = new Uint8Array(o >>> 1); for (i = 0, n = 0; i < o; i++) { var l = t[i]; if (e(l)) { i++; for (var h; i < o && !e(h = t[i]);)i++; if (i < o) { var u = parseInt(String.fromCharCode(l, h), 16); c[n++] = u ^ s >> 8; s = 52845 * (u + s) + 22719 & 65535 } } } return Array.prototype.slice.call(c, r, n) }(s, 55665, 4)) } this.seacAnalysisEnabled = !!i; this.stream = a; this.nextChar() } s.prototype = { readNumberArray: function () { this.getToken(); for (var e = []; ;) { var t = this.getToken(); if (null === t || "]" === t || "}" === t) break; e.push(parseFloat(t || 0)) } return e }, readNumber: function () { var e = this.getToken(); return parseFloat(e || 0) }, readInt: function () { var e = this.getToken(); return 0 | parseInt(e || 0, 10) }, readBoolean: function () { return "true" === this.getToken() ? 1 : 0 }, nextChar: function () { return this.currentChar = this.stream.getByte() }, getToken: function () { for (var e = !1, t = this.currentChar; ;) { if (-1 === t) return null; if (e) 10 !== t && 13 !== t || (e = !1); else if (37 === t) e = !0; else if (!(0, i.isWhiteSpace)(t)) break; t = this.nextChar() } if (a(t)) { this.nextChar(); return String.fromCharCode(t) } var r = ""; do { r += String.fromCharCode(t); t = this.nextChar() } while (t >= 0 && !(0, i.isWhiteSpace)(t) && !a(t)); return r }, readCharStrings: function (e, a) { return -1 === a ? e : t(e, 4330, a) }, extractFontProgram: function (e) { var t = this.stream, a = [], r = [], i = Object.create(null); i.lenIV = 4; for (var n, s, c, l, h, u = { subrs: [], charstrings: [], properties: { privateData: i } }; null !== (n = this.getToken());)if ("/" === n) switch (n = this.getToken()) { case "CharStrings": this.getToken(); this.getToken(); this.getToken(); this.getToken(); for (; null !== (n = this.getToken()) && "end" !== n;)if ("/" === n) { var d = this.getToken(); s = this.readInt(); this.getToken(); c = s > 0 ? t.getBytes(s) : new Uint8Array(0); l = u.properties.privateData.lenIV; h = this.readCharStrings(c, l); this.nextChar(); "noaccess" === (n = this.getToken()) && this.getToken(); r.push({ glyph: d, encoded: h }) } break; case "Subrs": this.readInt(); this.getToken(); for (; "dup" === this.getToken();) { var f = this.readInt(); s = this.readInt(); this.getToken(); c = s > 0 ? t.getBytes(s) : new Uint8Array(0); l = u.properties.privateData.lenIV; h = this.readCharStrings(c, l); this.nextChar(); "noaccess" === (n = this.getToken()) && this.getToken(); a[f] = h } break; case "BlueValues": case "OtherBlues": case "FamilyBlues": case "FamilyOtherBlues": var g = this.readNumberArray(); g.length > 0 && g.length, 0; break; case "StemSnapH": case "StemSnapV": u.properties.privateData[n] = this.readNumberArray(); break; case "StdHW": case "StdVW": u.properties.privateData[n] = this.readNumberArray()[0]; break; case "BlueShift": case "lenIV": case "BlueFuzz": case "BlueScale": case "LanguageGroup": case "ExpansionFactor": u.properties.privateData[n] = this.readNumber(); break; case "ForceBold": u.properties.privateData[n] = this.readBoolean() }for (var m = 0; m < r.length; m++) { d = r[m].glyph; h = r[m].encoded; var p = new o, b = p.convert(h, a, this.seacAnalysisEnabled), y = p.output; b && (y = [14]); const t = { glyphName: d, charstring: y, width: p.width, lsb: p.lsb, seac: p.seac }; ".notdef" === d ? u.charstrings.unshift(t) : u.charstrings.push(t); if (e.builtInEncoding) { const t = e.builtInEncoding.indexOf(d); t > -1 && void 0 === e.widths[t] && t >= e.firstChar && t <= e.lastChar && (e.widths[t] = p.width) } } return u }, extractFontHeader: function (e) { for (var t; null !== (t = this.getToken());)if ("/" === t) switch (t = this.getToken()) { case "FontMatrix": var a = this.readNumberArray(); e.fontMatrix = a; break; case "Encoding": var i, n = this.getToken(); if (/^\d+$/.test(n)) { i = []; var s = 0 | parseInt(n, 10); this.getToken(); for (var o = 0; o < s; o++) { t = this.getToken(); for (; "dup" !== t && "def" !== t;)if (null === (t = this.getToken())) return; if ("def" === t) break; var c = this.readInt(); this.getToken(); var l = this.getToken(); i[c] = l; this.getToken() } } else i = (0, r.getEncoding)(n); e.builtInEncoding = i; break; case "FontBBox": var h = this.readNumberArray(); e.ascent = Math.max(h[3], h[1]); e.descent = Math.min(h[1], h[3]); e.ascentScaled = !0 } } }; return s }(); t.Type1Parser = c }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.getTilingPatternIR = function (e, t, a) { const i = t.getArray("Matrix"), n = r.Util.normalizeRect(t.getArray("BBox")), s = t.get("XStep"), o = t.get("YStep"), c = t.get("PaintType"), l = t.get("TilingType"); if (n[2] - n[0] == 0 || n[3] - n[1] == 0) throw new r.FormatError(`Invalid getTilingPatternIR /BBox array: [${n}].`); return ["TilingPattern", a, e, i, n, s, o, c, l] }; t.Pattern = void 0; var r = a(2), i = a(22), n = a(4), s = a(7), o = 2, c = 3, l = 4, h = 5, u = 6, d = 7, f = function () { function e() { (0, r.unreachable)("should not call Pattern constructor") } e.prototype = { getPattern: function (e) { (0, r.unreachable)(`Should not call Pattern.getStyle: ${e}`) } }; e.parseShading = function (e, t, a, i, f, m) { var p = (0, n.isStream)(e) ? e.dict : e, b = p.get("ShadingType"); try { switch (b) { case o: case c: return new g.RadialAxial(p, t, a, i, m); case l: case h: case u: case d: return new g.Mesh(e, t, a, i, m); default: throw new r.FormatError("Unsupported ShadingType: " + b) } } catch (e) { if (e instanceof s.MissingDataException) throw e; f.send("UnsupportedFeature", { featureId: r.UNSUPPORTED_FEATURES.shadingPattern }); (0, r.warn)(e); return new g.Dummy } }; return e }(); t.Pattern = f; var g = { SMALL_NUMBER: 1e-6 }; g.RadialAxial = function () { function e(e, t, a, n, s) { this.matrix = t; this.coordsArr = e.getArray("Coords"); this.shadingType = e.get("ShadingType"); this.type = "Pattern"; var o = e.get("ColorSpace", "CS"); o = i.ColorSpace.parse(o, a, n, s); this.cs = o; const l = e.getArray("BBox"); Array.isArray(l) && 4 === l.length ? this.bbox = r.Util.normalizeRect(l) : this.bbox = null; var h = 0, u = 1; if (e.has("Domain")) { var d = e.getArray("Domain"); h = d[0]; u = d[1] } var f = !1, m = !1; if (e.has("Extend")) { var p = e.getArray("Extend"); f = p[0]; m = p[1] } if (!(this.shadingType !== c || f && m)) { var b = this.coordsArr[0], y = this.coordsArr[1], v = this.coordsArr[2], w = this.coordsArr[3], k = this.coordsArr[4], S = this.coordsArr[5], C = Math.sqrt((b - w) * (b - w) + (y - k) * (y - k)); v <= S + C && S <= v + C && (0, r.warn)("Unsupported radial gradient.") } this.extendStart = f; this.extendEnd = m; var x = e.get("Function"), A = s.createFromArray(x); const I = (u - h) / 10; var F = this.colorStops = []; if (h >= u || I <= 0) (0, r.info)("Bad shading domain."); else { var T, E = new Float32Array(o.numComps), O = new Float32Array(1); for (let e = 0; e <= 10; e++) { O[0] = h + e * I; A(O, 0, E, 0); T = o.getRgb(E, 0); var P = r.Util.makeCssRgb(T[0], T[1], T[2]); F.push([e / 10, P]) } var B = "transparent"; if (e.has("Background")) { T = o.getRgb(e.get("Background"), 0); B = r.Util.makeCssRgb(T[0], T[1], T[2]) } if (!f) { F.unshift([0, B]); F[1][0] += g.SMALL_NUMBER } if (!m) { F[F.length - 1][0] -= g.SMALL_NUMBER; F.push([1, B]) } this.colorStops = F } } e.prototype = { getIR: function () { var e, t, a, i, n, s = this.coordsArr, l = this.shadingType; if (l === o) { t = [s[0], s[1]]; a = [s[2], s[3]]; i = null; n = null; e = "axial" } else if (l === c) { t = [s[0], s[1]]; a = [s[3], s[4]]; i = s[2]; n = s[5]; e = "radial" } else (0, r.unreachable)(`getPattern type unknown: ${l}`); var h = this.matrix; if (h) { t = r.Util.applyTransform(t, h); a = r.Util.applyTransform(a, h); if (l === c) { var u = r.Util.singularValueDecompose2dScale(h); i *= u[0]; n *= u[1] } } return ["RadialAxial", e, this.bbox, this.colorStops, t, a, i, n] } }; return e }(); g.Mesh = function () { function e(e, t) { this.stream = e; this.context = t; this.buffer = 0; this.bufferLength = 0; var a = t.numComps; this.tmpCompsBuf = new Float32Array(a); var r = t.colorSpace.numComps; this.tmpCsCompsBuf = t.colorFn ? new Float32Array(r) : this.tmpCompsBuf } e.prototype = { get hasData() { if (this.stream.end) return this.stream.pos < this.stream.end; if (this.bufferLength > 0) return !0; var e = this.stream.getByte(); if (e < 0) return !1; this.buffer = e; this.bufferLength = 8; return !0 }, readBits: function (e) { var t = this.buffer, a = this.bufferLength; if (32 === e) { if (0 === a) return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0; t = t << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte(); var r = this.stream.getByte(); this.buffer = r & (1 << a) - 1; return (t << 8 - a | (255 & r) >> a) >>> 0 } if (8 === e && 0 === a) return this.stream.getByte(); for (; a < e;) { t = t << 8 | this.stream.getByte(); a += 8 } a -= e; this.bufferLength = a; this.buffer = t & (1 << a) - 1; return t >> a }, align: function () { this.buffer = 0; this.bufferLength = 0 }, readFlag: function () { return this.readBits(this.context.bitsPerFlag) }, readCoordinate: function () { var e = this.context.bitsPerCoordinate, t = this.readBits(e), a = this.readBits(e), r = this.context.decode, i = e < 32 ? 1 / ((1 << e) - 1) : 2.3283064365386963e-10; return [t * i * (r[1] - r[0]) + r[0], a * i * (r[3] - r[2]) + r[2]] }, readComponents: function () { for (var e = this.context.numComps, t = this.context.bitsPerComponent, a = t < 32 ? 1 / ((1 << t) - 1) : 2.3283064365386963e-10, r = this.context.decode, i = this.tmpCompsBuf, n = 0, s = 4; n < e; n++, s += 2) { var o = this.readBits(t); i[n] = o * a * (r[s + 1] - r[s]) + r[s] } var c = this.tmpCsCompsBuf; this.context.colorFn && this.context.colorFn(i, 0, c, 0); return this.context.colorSpace.getRgb(c, 0) } }; var t, a = (t = [], function (e) { t[e] || (t[e] = function (e) { for (var t = [], a = 0; a <= e; a++) { var r = a / e, i = 1 - r; t.push(new Float32Array([i * i * i, 3 * r * i * i, 3 * r * r * i, r * r * r])) } return t }(e)); return t[e] }); function s(e, t) { var i = e.figures[t]; (0, r.assert)("patch" === i.type, "Unexpected patch mesh figure"); var n = e.coords, s = e.colors, o = i.coords, c = i.colors, l = Math.min(n[o[0]][0], n[o[3]][0], n[o[12]][0], n[o[15]][0]), h = Math.min(n[o[0]][1], n[o[3]][1], n[o[12]][1], n[o[15]][1]), u = Math.max(n[o[0]][0], n[o[3]][0], n[o[12]][0], n[o[15]][0]), d = Math.max(n[o[0]][1], n[o[3]][1], n[o[12]][1], n[o[15]][1]), f = Math.ceil(20 * (u - l) / (e.bounds[2] - e.bounds[0])); f = Math.max(3, Math.min(20, f)); var g = Math.ceil(20 * (d - h) / (e.bounds[3] - e.bounds[1])); g = Math.max(3, Math.min(20, g)); for (var m = f + 1, p = new Int32Array((g + 1) * m), b = new Int32Array((g + 1) * m), y = 0, v = new Uint8Array(3), w = new Uint8Array(3), k = s[c[0]], S = s[c[1]], C = s[c[2]], x = s[c[3]], A = a(g), I = a(f), F = 0; F <= g; F++) { v[0] = (k[0] * (g - F) + C[0] * F) / g | 0; v[1] = (k[1] * (g - F) + C[1] * F) / g | 0; v[2] = (k[2] * (g - F) + C[2] * F) / g | 0; w[0] = (S[0] * (g - F) + x[0] * F) / g | 0; w[1] = (S[1] * (g - F) + x[1] * F) / g | 0; w[2] = (S[2] * (g - F) + x[2] * F) / g | 0; for (var T = 0; T <= f; T++, y++)if (0 !== F && F !== g || 0 !== T && T !== f) { for (var E = 0, O = 0, P = 0, B = 0; B <= 3; B++)for (var D = 0; D <= 3; D++, P++) { var N = A[F][B] * I[T][D]; E += n[o[P]][0] * N; O += n[o[P]][1] * N } p[y] = n.length; n.push([E, O]); b[y] = s.length; var M = new Uint8Array(3); M[0] = (v[0] * (f - T) + w[0] * T) / f | 0; M[1] = (v[1] * (f - T) + w[1] * T) / f | 0; M[2] = (v[2] * (f - T) + w[2] * T) / f | 0; s.push(M) } } p[0] = o[0]; b[0] = c[0]; p[f] = o[3]; b[f] = c[1]; p[m * g] = o[12]; b[m * g] = c[2]; p[m * g + f] = o[15]; b[m * g + f] = c[3]; e.figures[t] = { type: "lattice", coords: p, colors: b, verticesPerRow: m } } function o(e) { for (var t = e.coords[0][0], a = e.coords[0][1], r = t, i = a, n = 1, s = e.coords.length; n < s; n++) { var o = e.coords[n][0], c = e.coords[n][1]; t = t > o ? o : t; a = a > c ? c : a; r = r < o ? o : r; i = i < c ? c : i } e.bounds = [t, a, r, i] } function c(t, a, c, f, g) { if (!(0, n.isStream)(t)) throw new r.FormatError("Mesh data is not a stream"); var m = t.dict; this.matrix = a; this.shadingType = m.get("ShadingType"); this.type = "Pattern"; const p = m.getArray("BBox"); Array.isArray(p) && 4 === p.length ? this.bbox = r.Util.normalizeRect(p) : this.bbox = null; var b = m.get("ColorSpace", "CS"); b = i.ColorSpace.parse(b, c, f, g); this.cs = b; this.background = m.has("Background") ? b.getRgb(m.get("Background"), 0) : null; var y = m.get("Function"), v = y ? g.createFromArray(y) : null; this.coords = []; this.colors = []; this.figures = []; var w = new e(t, { bitsPerCoordinate: m.get("BitsPerCoordinate"), bitsPerComponent: m.get("BitsPerComponent"), bitsPerFlag: m.get("BitsPerFlag"), decode: m.getArray("Decode"), colorFn: v, colorSpace: b, numComps: v ? 1 : b.numComps }), k = !1; switch (this.shadingType) { case l: !function (e, t) { for (var a = e.coords, i = e.colors, n = [], s = [], o = 0; t.hasData;) { var c = t.readFlag(), l = t.readCoordinate(), h = t.readComponents(); if (0 === o) { if (!(0 <= c && c <= 2)) throw new r.FormatError("Unknown type4 flag"); switch (c) { case 0: o = 3; break; case 1: s.push(s[s.length - 2], s[s.length - 1]); o = 1; break; case 2: s.push(s[s.length - 3], s[s.length - 1]); o = 1 }n.push(c) } s.push(a.length); a.push(l); i.push(h); o--; t.align() } e.figures.push({ type: "triangles", coords: new Int32Array(s), colors: new Int32Array(s) }) }(this, w); break; case h: var S = 0 | m.get("VerticesPerRow"); if (S < 2) throw new r.FormatError("Invalid VerticesPerRow"); !function (e, t, a) { for (var r = e.coords, i = e.colors, n = []; t.hasData;) { var s = t.readCoordinate(), o = t.readComponents(); n.push(r.length); r.push(s); i.push(o) } e.figures.push({ type: "lattice", coords: new Int32Array(n), colors: new Int32Array(n), verticesPerRow: a }) }(this, w, S); break; case u: !function (e, t) { for (var a = e.coords, i = e.colors, n = new Int32Array(16), s = new Int32Array(4); t.hasData;) { var o, c, l = t.readFlag(); if (!(0 <= l && l <= 3)) throw new r.FormatError("Unknown type6 flag"); var h = a.length; for (o = 0, c = 0 !== l ? 8 : 12; o < c; o++)a.push(t.readCoordinate()); var u, d, f, g, m = i.length; for (o = 0, c = 0 !== l ? 2 : 4; o < c; o++)i.push(t.readComponents()); switch (l) { case 0: n[12] = h + 3; n[13] = h + 4; n[14] = h + 5; n[15] = h + 6; n[8] = h + 2; n[11] = h + 7; n[4] = h + 1; n[7] = h + 8; n[0] = h; n[1] = h + 11; n[2] = h + 10; n[3] = h + 9; s[2] = m + 1; s[3] = m + 2; s[0] = m; s[1] = m + 3; break; case 1: u = n[12]; d = n[13]; f = n[14]; g = n[15]; n[12] = g; n[13] = h + 0; n[14] = h + 1; n[15] = h + 2; n[8] = f; n[11] = h + 3; n[4] = d; n[7] = h + 4; n[0] = u; n[1] = h + 7; n[2] = h + 6; n[3] = h + 5; u = s[2]; d = s[3]; s[2] = d; s[3] = m; s[0] = u; s[1] = m + 1; break; case 2: u = n[15]; d = n[11]; n[12] = n[3]; n[13] = h + 0; n[14] = h + 1; n[15] = h + 2; n[8] = n[7]; n[11] = h + 3; n[4] = d; n[7] = h + 4; n[0] = u; n[1] = h + 7; n[2] = h + 6; n[3] = h + 5; u = s[3]; s[2] = s[1]; s[3] = m; s[0] = u; s[1] = m + 1; break; case 3: n[12] = n[0]; n[13] = h + 0; n[14] = h + 1; n[15] = h + 2; n[8] = n[1]; n[11] = h + 3; n[4] = n[2]; n[7] = h + 4; n[0] = n[3]; n[1] = h + 7; n[2] = h + 6; n[3] = h + 5; s[2] = s[0]; s[3] = m; s[0] = s[1]; s[1] = m + 1 }n[5] = a.length; a.push([(-4 * a[n[0]][0] - a[n[15]][0] + 6 * (a[n[4]][0] + a[n[1]][0]) - 2 * (a[n[12]][0] + a[n[3]][0]) + 3 * (a[n[13]][0] + a[n[7]][0])) / 9, (-4 * a[n[0]][1] - a[n[15]][1] + 6 * (a[n[4]][1] + a[n[1]][1]) - 2 * (a[n[12]][1] + a[n[3]][1]) + 3 * (a[n[13]][1] + a[n[7]][1])) / 9]); n[6] = a.length; a.push([(-4 * a[n[3]][0] - a[n[12]][0] + 6 * (a[n[2]][0] + a[n[7]][0]) - 2 * (a[n[0]][0] + a[n[15]][0]) + 3 * (a[n[4]][0] + a[n[14]][0])) / 9, (-4 * a[n[3]][1] - a[n[12]][1] + 6 * (a[n[2]][1] + a[n[7]][1]) - 2 * (a[n[0]][1] + a[n[15]][1]) + 3 * (a[n[4]][1] + a[n[14]][1])) / 9]); n[9] = a.length; a.push([(-4 * a[n[12]][0] - a[n[3]][0] + 6 * (a[n[8]][0] + a[n[13]][0]) - 2 * (a[n[0]][0] + a[n[15]][0]) + 3 * (a[n[11]][0] + a[n[1]][0])) / 9, (-4 * a[n[12]][1] - a[n[3]][1] + 6 * (a[n[8]][1] + a[n[13]][1]) - 2 * (a[n[0]][1] + a[n[15]][1]) + 3 * (a[n[11]][1] + a[n[1]][1])) / 9]); n[10] = a.length; a.push([(-4 * a[n[15]][0] - a[n[0]][0] + 6 * (a[n[11]][0] + a[n[14]][0]) - 2 * (a[n[12]][0] + a[n[3]][0]) + 3 * (a[n[2]][0] + a[n[8]][0])) / 9, (-4 * a[n[15]][1] - a[n[0]][1] + 6 * (a[n[11]][1] + a[n[14]][1]) - 2 * (a[n[12]][1] + a[n[3]][1]) + 3 * (a[n[2]][1] + a[n[8]][1])) / 9]); e.figures.push({ type: "patch", coords: new Int32Array(n), colors: new Int32Array(s) }) } }(this, w); k = !0; break; case d: !function (e, t) { for (var a = e.coords, i = e.colors, n = new Int32Array(16), s = new Int32Array(4); t.hasData;) { var o, c, l = t.readFlag(); if (!(0 <= l && l <= 3)) throw new r.FormatError("Unknown type7 flag"); var h = a.length; for (o = 0, c = 0 !== l ? 12 : 16; o < c; o++)a.push(t.readCoordinate()); var u, d, f, g, m = i.length; for (o = 0, c = 0 !== l ? 2 : 4; o < c; o++)i.push(t.readComponents()); switch (l) { case 0: n[12] = h + 3; n[13] = h + 4; n[14] = h + 5; n[15] = h + 6; n[8] = h + 2; n[9] = h + 13; n[10] = h + 14; n[11] = h + 7; n[4] = h + 1; n[5] = h + 12; n[6] = h + 15; n[7] = h + 8; n[0] = h; n[1] = h + 11; n[2] = h + 10; n[3] = h + 9; s[2] = m + 1; s[3] = m + 2; s[0] = m; s[1] = m + 3; break; case 1: u = n[12]; d = n[13]; f = n[14]; g = n[15]; n[12] = g; n[13] = h + 0; n[14] = h + 1; n[15] = h + 2; n[8] = f; n[9] = h + 9; n[10] = h + 10; n[11] = h + 3; n[4] = d; n[5] = h + 8; n[6] = h + 11; n[7] = h + 4; n[0] = u; n[1] = h + 7; n[2] = h + 6; n[3] = h + 5; u = s[2]; d = s[3]; s[2] = d; s[3] = m; s[0] = u; s[1] = m + 1; break; case 2: u = n[15]; d = n[11]; n[12] = n[3]; n[13] = h + 0; n[14] = h + 1; n[15] = h + 2; n[8] = n[7]; n[9] = h + 9; n[10] = h + 10; n[11] = h + 3; n[4] = d; n[5] = h + 8; n[6] = h + 11; n[7] = h + 4; n[0] = u; n[1] = h + 7; n[2] = h + 6; n[3] = h + 5; u = s[3]; s[2] = s[1]; s[3] = m; s[0] = u; s[1] = m + 1; break; case 3: n[12] = n[0]; n[13] = h + 0; n[14] = h + 1; n[15] = h + 2; n[8] = n[1]; n[9] = h + 9; n[10] = h + 10; n[11] = h + 3; n[4] = n[2]; n[5] = h + 8; n[6] = h + 11; n[7] = h + 4; n[0] = n[3]; n[1] = h + 7; n[2] = h + 6; n[3] = h + 5; s[2] = s[0]; s[3] = m; s[0] = s[1]; s[1] = m + 1 }e.figures.push({ type: "patch", coords: new Int32Array(n), colors: new Int32Array(s) }) } }(this, w); k = !0; break; default: (0, r.unreachable)("Unsupported mesh type.") }if (k) { o(this); for (var C = 0, x = this.figures.length; C < x; C++)s(this, C) } o(this); !function (e) { var t, a, r, i, n = e.coords, s = new Float32Array(2 * n.length); for (t = 0, r = 0, a = n.length; t < a; t++) { var o = n[t]; s[r++] = o[0]; s[r++] = o[1] } e.coords = s; var c = e.colors, l = new Uint8Array(3 * c.length); for (t = 0, r = 0, a = c.length; t < a; t++) { var h = c[t]; l[r++] = h[0]; l[r++] = h[1]; l[r++] = h[2] } e.colors = l; var u = e.figures; for (t = 0, a = u.length; t < a; t++) { var d = u[t], f = d.coords, g = d.colors; for (r = 0, i = f.length; r < i; r++) { f[r] *= 2; g[r] *= 3 } } }(this) } c.prototype = { getIR: function () { return ["Mesh", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.matrix, this.bbox, this.background] } }; return c }(); g.Dummy = function () { function e() { this.type = "Pattern" } e.prototype = { getIR: function () { return ["Dummy"] } }; return e }() }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.bidi = function (e, t, a) { var g = !0, m = e.length; if (0 === m || a) return u(e, g, a); d.length = m; f.length = m; var p, b, y = 0; for (p = 0; p < m; ++p) { d[p] = e.charAt(p); var v = e.charCodeAt(p), w = "L"; v <= 255 ? w = i[v] : 1424 <= v && v <= 1524 ? w = "R" : 1536 <= v && v <= 1791 ? (w = n[255 & v]) || (0, r.warn)("Bidi: invalid Unicode character " + v.toString(16)) : 1792 <= v && v <= 2220 && (w = "AL"); "R" !== w && "AL" !== w && "AN" !== w || y++; f[p] = w } if (0 === y) return u(e, g = !0); if (-1 === t) if (y / m < .3) { g = !0; t = 0 } else { g = !1; t = 1 } var k = []; for (p = 0; p < m; ++p)k[p] = t; var S, C = s(t) ? "R" : "L", x = C, A = x, I = x; for (p = 0; p < m; ++p)"NSM" === f[p] ? f[p] = I : I = f[p]; I = x; for (p = 0; p < m; ++p)"EN" === (S = f[p]) ? f[p] = "AL" === I ? "AN" : "EN" : "R" !== S && "L" !== S && "AL" !== S || (I = S); for (p = 0; p < m; ++p)"AL" === (S = f[p]) && (f[p] = "R"); for (p = 1; p < m - 1; ++p) { "ES" === f[p] && "EN" === f[p - 1] && "EN" === f[p + 1] && (f[p] = "EN"); "CS" !== f[p] || "EN" !== f[p - 1] && "AN" !== f[p - 1] || f[p + 1] !== f[p - 1] || (f[p] = f[p - 1]) } for (p = 0; p < m; ++p)if ("EN" === f[p]) { var F; for (F = p - 1; F >= 0 && "ET" === f[F]; --F)f[F] = "EN"; for (F = p + 1; F < m && "ET" === f[F]; ++F)f[F] = "EN" } for (p = 0; p < m; ++p)"WS" !== (S = f[p]) && "ES" !== S && "ET" !== S && "CS" !== S || (f[p] = "ON"); I = x; for (p = 0; p < m; ++p)"EN" === (S = f[p]) ? f[p] = "L" === I ? "L" : "EN" : "R" !== S && "L" !== S || (I = S); for (p = 0; p < m; ++p)if ("ON" === f[p]) { var T = c(f, p + 1, "ON"), E = x; p > 0 && (E = f[p - 1]); var O = A; T + 1 < m && (O = f[T + 1]); "L" !== E && (E = "R"); "L" !== O && (O = "R"); E === O && l(f, p, T, E); p = T - 1 } for (p = 0; p < m; ++p)"ON" === f[p] && (f[p] = C); for (p = 0; p < m; ++p) { S = f[p]; o(k[p]) ? "R" === S ? k[p] += 1 : "AN" !== S && "EN" !== S || (k[p] += 2) : "L" !== S && "AN" !== S && "EN" !== S || (k[p] += 1) } var P, B = -1, D = 99; for (p = 0, b = k.length; p < b; ++p) { P = k[p]; B < P && (B = P); D > P && s(P) && (D = P) } for (P = B; P >= D; --P) { var N = -1; for (p = 0, b = k.length; p < b; ++p)if (k[p] < P) { if (N >= 0) { h(d, N, p); N = -1 } } else N < 0 && (N = p); N >= 0 && h(d, N, k.length) } for (p = 0, b = d.length; p < b; ++p) { var M = d[p]; "<" !== M && ">" !== M || (d[p] = "") } return u(d.join(""), g) }; var r = a(2), i = ["BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "S", "B", "S", "WS", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "B", "B", "B", "S", "WS", "ON", "ON", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "ON", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "BN", "BN", "BN", "BN", "BN", "BN", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "CS", "ON", "ET", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "L", "ON", "ON", "BN", "ON", "ON", "ET", "ET", "EN", "EN", "ON", "L", "ON", "ON", "ON", "EN", "L", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L"], n = ["AN", "AN", "AN", "AN", "AN", "AN", "ON", "ON", "AL", "ET", "ET", "AL", "CS", "AL", "ON", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "ET", "AN", "AN", "AL", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "ON", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL"]; function s(e) { return 0 != (1 & e) } function o(e) { return 0 == (1 & e) } function c(e, t, a) { for (var r = t, i = e.length; r < i; ++r)if (e[r] !== a) return r; return r } function l(e, t, a, r) { for (var i = t; i < a; ++i)e[i] = r } function h(e, t, a) { for (var r = t, i = a - 1; r < i; ++r, --i) { var n = e[r]; e[r] = e[i]; e[i] = n } } function u(e, t, a = !1) { let r = "ltr"; a ? r = "ttb" : t || (r = "rtl"); return { str: e, dir: r } } var d = [], f = [] }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.getMetrics = void 0; var r = a(7), i = (0, r.getLookupTableFactory)((function (e) { e.Courier = 600; e["Courier-Bold"] = 600; e["Courier-BoldOblique"] = 600; e["Courier-Oblique"] = 600; e.Helvetica = (0, r.getLookupTableFactory)((function (e) { e.space = 278; e.exclam = 278; e.quotedbl = 355; e.numbersign = 556; e.dollar = 556; e.percent = 889; e.ampersand = 667; e.quoteright = 222; e.parenleft = 333; e.parenright = 333; e.asterisk = 389; e.plus = 584; e.comma = 278; e.hyphen = 333; e.period = 278; e.slash = 278; e.zero = 556; e.one = 556; e.two = 556; e.three = 556; e.four = 556; e.five = 556; e.six = 556; e.seven = 556; e.eight = 556; e.nine = 556; e.colon = 278; e.semicolon = 278; e.less = 584; e.equal = 584; e.greater = 584; e.question = 556; e.at = 1015; e.A = 667; e.B = 667; e.C = 722; e.D = 722; e.E = 667; e.F = 611; e.G = 778; e.H = 722; e.I = 278; e.J = 500; e.K = 667; e.L = 556; e.M = 833; e.N = 722; e.O = 778; e.P = 667; e.Q = 778; e.R = 722; e.S = 667; e.T = 611; e.U = 722; e.V = 667; e.W = 944; e.X = 667; e.Y = 667; e.Z = 611; e.bracketleft = 278; e.backslash = 278; e.bracketright = 278; e.asciicircum = 469; e.underscore = 556; e.quoteleft = 222; e.a = 556; e.b = 556; e.c = 500; e.d = 556; e.e = 556; e.f = 278; e.g = 556; e.h = 556; e.i = 222; e.j = 222; e.k = 500; e.l = 222; e.m = 833; e.n = 556; e.o = 556; e.p = 556; e.q = 556; e.r = 333; e.s = 500; e.t = 278; e.u = 556; e.v = 500; e.w = 722; e.x = 500; e.y = 500; e.z = 500; e.braceleft = 334; e.bar = 260; e.braceright = 334; e.asciitilde = 584; e.exclamdown = 333; e.cent = 556; e.sterling = 556; e.fraction = 167; e.yen = 556; e.florin = 556; e.section = 556; e.currency = 556; e.quotesingle = 191; e.quotedblleft = 333; e.guillemotleft = 556; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 500; e.fl = 500; e.endash = 556; e.dagger = 556; e.daggerdbl = 556; e.periodcentered = 278; e.paragraph = 537; e.bullet = 350; e.quotesinglbase = 222; e.quotedblbase = 333; e.quotedblright = 333; e.guillemotright = 556; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 611; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 1e3; e.ordfeminine = 370; e.Lslash = 556; e.Oslash = 778; e.OE = 1e3; e.ordmasculine = 365; e.ae = 889; e.dotlessi = 278; e.lslash = 222; e.oslash = 611; e.oe = 944; e.germandbls = 611; e.Idieresis = 278; e.eacute = 556; e.abreve = 556; e.uhungarumlaut = 556; e.ecaron = 556; e.Ydieresis = 667; e.divide = 584; e.Yacute = 667; e.Acircumflex = 667; e.aacute = 556; e.Ucircumflex = 722; e.yacute = 500; e.scommaaccent = 500; e.ecircumflex = 556; e.Uring = 722; e.Udieresis = 722; e.aogonek = 556; e.Uacute = 722; e.uogonek = 556; e.Edieresis = 667; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 737; e.Emacron = 667; e.ccaron = 500; e.aring = 556; e.Ncommaaccent = 722; e.lacute = 222; e.agrave = 556; e.Tcommaaccent = 611; e.Cacute = 722; e.atilde = 556; e.Edotaccent = 667; e.scaron = 500; e.scedilla = 500; e.iacute = 278; e.lozenge = 471; e.Rcaron = 722; e.Gcommaaccent = 778; e.ucircumflex = 556; e.acircumflex = 556; e.Amacron = 667; e.rcaron = 333; e.ccedilla = 500; e.Zdotaccent = 611; e.Thorn = 667; e.Omacron = 778; e.Racute = 722; e.Sacute = 667; e.dcaron = 643; e.Umacron = 722; e.uring = 556; e.threesuperior = 333; e.Ograve = 778; e.Agrave = 667; e.Abreve = 667; e.multiply = 584; e.uacute = 556; e.Tcaron = 611; e.partialdiff = 476; e.ydieresis = 500; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 667; e.adieresis = 556; e.edieresis = 556; e.cacute = 500; e.nacute = 556; e.umacron = 556; e.Ncaron = 722; e.Iacute = 278; e.plusminus = 584; e.brokenbar = 260; e.registered = 737; e.Gbreve = 778; e.Idotaccent = 278; e.summation = 600; e.Egrave = 667; e.racute = 333; e.omacron = 556; e.Zacute = 611; e.Zcaron = 611; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 722; e.lcommaaccent = 222; e.tcaron = 317; e.eogonek = 556; e.Uogonek = 722; e.Aacute = 667; e.Adieresis = 667; e.egrave = 556; e.zacute = 500; e.iogonek = 222; e.Oacute = 778; e.oacute = 556; e.amacron = 556; e.sacute = 500; e.idieresis = 278; e.Ocircumflex = 778; e.Ugrave = 722; e.Delta = 612; e.thorn = 556; e.twosuperior = 333; e.Odieresis = 778; e.mu = 556; e.igrave = 278; e.ohungarumlaut = 556; e.Eogonek = 667; e.dcroat = 556; e.threequarters = 834; e.Scedilla = 667; e.lcaron = 299; e.Kcommaaccent = 667; e.Lacute = 556; e.trademark = 1e3; e.edotaccent = 556; e.Igrave = 278; e.Imacron = 278; e.Lcaron = 556; e.onehalf = 834; e.lessequal = 549; e.ocircumflex = 556; e.ntilde = 556; e.Uhungarumlaut = 722; e.Eacute = 667; e.emacron = 556; e.gbreve = 556; e.onequarter = 834; e.Scaron = 667; e.Scommaaccent = 667; e.Ohungarumlaut = 778; e.degree = 400; e.ograve = 556; e.Ccaron = 722; e.ugrave = 556; e.radical = 453; e.Dcaron = 722; e.rcommaaccent = 333; e.Ntilde = 722; e.otilde = 556; e.Rcommaaccent = 722; e.Lcommaaccent = 556; e.Atilde = 667; e.Aogonek = 667; e.Aring = 667; e.Otilde = 778; e.zdotaccent = 500; e.Ecaron = 667; e.Iogonek = 278; e.kcommaaccent = 500; e.minus = 584; e.Icircumflex = 278; e.ncaron = 556; e.tcommaaccent = 278; e.logicalnot = 584; e.odieresis = 556; e.udieresis = 556; e.notequal = 549; e.gcommaaccent = 556; e.eth = 556; e.zcaron = 500; e.ncommaaccent = 556; e.onesuperior = 333; e.imacron = 278; e.Euro = 556 })); e["Helvetica-Bold"] = (0, r.getLookupTableFactory)((function (e) { e.space = 278; e.exclam = 333; e.quotedbl = 474; e.numbersign = 556; e.dollar = 556; e.percent = 889; e.ampersand = 722; e.quoteright = 278; e.parenleft = 333; e.parenright = 333; e.asterisk = 389; e.plus = 584; e.comma = 278; e.hyphen = 333; e.period = 278; e.slash = 278; e.zero = 556; e.one = 556; e.two = 556; e.three = 556; e.four = 556; e.five = 556; e.six = 556; e.seven = 556; e.eight = 556; e.nine = 556; e.colon = 333; e.semicolon = 333; e.less = 584; e.equal = 584; e.greater = 584; e.question = 611; e.at = 975; e.A = 722; e.B = 722; e.C = 722; e.D = 722; e.E = 667; e.F = 611; e.G = 778; e.H = 722; e.I = 278; e.J = 556; e.K = 722; e.L = 611; e.M = 833; e.N = 722; e.O = 778; e.P = 667; e.Q = 778; e.R = 722; e.S = 667; e.T = 611; e.U = 722; e.V = 667; e.W = 944; e.X = 667; e.Y = 667; e.Z = 611; e.bracketleft = 333; e.backslash = 278; e.bracketright = 333; e.asciicircum = 584; e.underscore = 556; e.quoteleft = 278; e.a = 556; e.b = 611; e.c = 556; e.d = 611; e.e = 556; e.f = 333; e.g = 611; e.h = 611; e.i = 278; e.j = 278; e.k = 556; e.l = 278; e.m = 889; e.n = 611; e.o = 611; e.p = 611; e.q = 611; e.r = 389; e.s = 556; e.t = 333; e.u = 611; e.v = 556; e.w = 778; e.x = 556; e.y = 556; e.z = 500; e.braceleft = 389; e.bar = 280; e.braceright = 389; e.asciitilde = 584; e.exclamdown = 333; e.cent = 556; e.sterling = 556; e.fraction = 167; e.yen = 556; e.florin = 556; e.section = 556; e.currency = 556; e.quotesingle = 238; e.quotedblleft = 500; e.guillemotleft = 556; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 611; e.fl = 611; e.endash = 556; e.dagger = 556; e.daggerdbl = 556; e.periodcentered = 278; e.paragraph = 556; e.bullet = 350; e.quotesinglbase = 278; e.quotedblbase = 500; e.quotedblright = 500; e.guillemotright = 556; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 611; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 1e3; e.ordfeminine = 370; e.Lslash = 611; e.Oslash = 778; e.OE = 1e3; e.ordmasculine = 365; e.ae = 889; e.dotlessi = 278; e.lslash = 278; e.oslash = 611; e.oe = 944; e.germandbls = 611; e.Idieresis = 278; e.eacute = 556; e.abreve = 556; e.uhungarumlaut = 611; e.ecaron = 556; e.Ydieresis = 667; e.divide = 584; e.Yacute = 667; e.Acircumflex = 722; e.aacute = 556; e.Ucircumflex = 722; e.yacute = 556; e.scommaaccent = 556; e.ecircumflex = 556; e.Uring = 722; e.Udieresis = 722; e.aogonek = 556; e.Uacute = 722; e.uogonek = 611; e.Edieresis = 667; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 737; e.Emacron = 667; e.ccaron = 556; e.aring = 556; e.Ncommaaccent = 722; e.lacute = 278; e.agrave = 556; e.Tcommaaccent = 611; e.Cacute = 722; e.atilde = 556; e.Edotaccent = 667; e.scaron = 556; e.scedilla = 556; e.iacute = 278; e.lozenge = 494; e.Rcaron = 722; e.Gcommaaccent = 778; e.ucircumflex = 611; e.acircumflex = 556; e.Amacron = 722; e.rcaron = 389; e.ccedilla = 556; e.Zdotaccent = 611; e.Thorn = 667; e.Omacron = 778; e.Racute = 722; e.Sacute = 667; e.dcaron = 743; e.Umacron = 722; e.uring = 611; e.threesuperior = 333; e.Ograve = 778; e.Agrave = 722; e.Abreve = 722; e.multiply = 584; e.uacute = 611; e.Tcaron = 611; e.partialdiff = 494; e.ydieresis = 556; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 667; e.adieresis = 556; e.edieresis = 556; e.cacute = 556; e.nacute = 611; e.umacron = 611; e.Ncaron = 722; e.Iacute = 278; e.plusminus = 584; e.brokenbar = 280; e.registered = 737; e.Gbreve = 778; e.Idotaccent = 278; e.summation = 600; e.Egrave = 667; e.racute = 389; e.omacron = 611; e.Zacute = 611; e.Zcaron = 611; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 722; e.lcommaaccent = 278; e.tcaron = 389; e.eogonek = 556; e.Uogonek = 722; e.Aacute = 722; e.Adieresis = 722; e.egrave = 556; e.zacute = 500; e.iogonek = 278; e.Oacute = 778; e.oacute = 611; e.amacron = 556; e.sacute = 556; e.idieresis = 278; e.Ocircumflex = 778; e.Ugrave = 722; e.Delta = 612; e.thorn = 611; e.twosuperior = 333; e.Odieresis = 778; e.mu = 611; e.igrave = 278; e.ohungarumlaut = 611; e.Eogonek = 667; e.dcroat = 611; e.threequarters = 834; e.Scedilla = 667; e.lcaron = 400; e.Kcommaaccent = 722; e.Lacute = 611; e.trademark = 1e3; e.edotaccent = 556; e.Igrave = 278; e.Imacron = 278; e.Lcaron = 611; e.onehalf = 834; e.lessequal = 549; e.ocircumflex = 611; e.ntilde = 611; e.Uhungarumlaut = 722; e.Eacute = 667; e.emacron = 556; e.gbreve = 611; e.onequarter = 834; e.Scaron = 667; e.Scommaaccent = 667; e.Ohungarumlaut = 778; e.degree = 400; e.ograve = 611; e.Ccaron = 722; e.ugrave = 611; e.radical = 549; e.Dcaron = 722; e.rcommaaccent = 389; e.Ntilde = 722; e.otilde = 611; e.Rcommaaccent = 722; e.Lcommaaccent = 611; e.Atilde = 722; e.Aogonek = 722; e.Aring = 722; e.Otilde = 778; e.zdotaccent = 500; e.Ecaron = 667; e.Iogonek = 278; e.kcommaaccent = 556; e.minus = 584; e.Icircumflex = 278; e.ncaron = 611; e.tcommaaccent = 333; e.logicalnot = 584; e.odieresis = 611; e.udieresis = 611; e.notequal = 549; e.gcommaaccent = 611; e.eth = 611; e.zcaron = 500; e.ncommaaccent = 611; e.onesuperior = 333; e.imacron = 278; e.Euro = 556 })); e["Helvetica-BoldOblique"] = (0, r.getLookupTableFactory)((function (e) { e.space = 278; e.exclam = 333; e.quotedbl = 474; e.numbersign = 556; e.dollar = 556; e.percent = 889; e.ampersand = 722; e.quoteright = 278; e.parenleft = 333; e.parenright = 333; e.asterisk = 389; e.plus = 584; e.comma = 278; e.hyphen = 333; e.period = 278; e.slash = 278; e.zero = 556; e.one = 556; e.two = 556; e.three = 556; e.four = 556; e.five = 556; e.six = 556; e.seven = 556; e.eight = 556; e.nine = 556; e.colon = 333; e.semicolon = 333; e.less = 584; e.equal = 584; e.greater = 584; e.question = 611; e.at = 975; e.A = 722; e.B = 722; e.C = 722; e.D = 722; e.E = 667; e.F = 611; e.G = 778; e.H = 722; e.I = 278; e.J = 556; e.K = 722; e.L = 611; e.M = 833; e.N = 722; e.O = 778; e.P = 667; e.Q = 778; e.R = 722; e.S = 667; e.T = 611; e.U = 722; e.V = 667; e.W = 944; e.X = 667; e.Y = 667; e.Z = 611; e.bracketleft = 333; e.backslash = 278; e.bracketright = 333; e.asciicircum = 584; e.underscore = 556; e.quoteleft = 278; e.a = 556; e.b = 611; e.c = 556; e.d = 611; e.e = 556; e.f = 333; e.g = 611; e.h = 611; e.i = 278; e.j = 278; e.k = 556; e.l = 278; e.m = 889; e.n = 611; e.o = 611; e.p = 611; e.q = 611; e.r = 389; e.s = 556; e.t = 333; e.u = 611; e.v = 556; e.w = 778; e.x = 556; e.y = 556; e.z = 500; e.braceleft = 389; e.bar = 280; e.braceright = 389; e.asciitilde = 584; e.exclamdown = 333; e.cent = 556; e.sterling = 556; e.fraction = 167; e.yen = 556; e.florin = 556; e.section = 556; e.currency = 556; e.quotesingle = 238; e.quotedblleft = 500; e.guillemotleft = 556; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 611; e.fl = 611; e.endash = 556; e.dagger = 556; e.daggerdbl = 556; e.periodcentered = 278; e.paragraph = 556; e.bullet = 350; e.quotesinglbase = 278; e.quotedblbase = 500; e.quotedblright = 500; e.guillemotright = 556; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 611; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 1e3; e.ordfeminine = 370; e.Lslash = 611; e.Oslash = 778; e.OE = 1e3; e.ordmasculine = 365; e.ae = 889; e.dotlessi = 278; e.lslash = 278; e.oslash = 611; e.oe = 944; e.germandbls = 611; e.Idieresis = 278; e.eacute = 556; e.abreve = 556; e.uhungarumlaut = 611; e.ecaron = 556; e.Ydieresis = 667; e.divide = 584; e.Yacute = 667; e.Acircumflex = 722; e.aacute = 556; e.Ucircumflex = 722; e.yacute = 556; e.scommaaccent = 556; e.ecircumflex = 556; e.Uring = 722; e.Udieresis = 722; e.aogonek = 556; e.Uacute = 722; e.uogonek = 611; e.Edieresis = 667; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 737; e.Emacron = 667; e.ccaron = 556; e.aring = 556; e.Ncommaaccent = 722; e.lacute = 278; e.agrave = 556; e.Tcommaaccent = 611; e.Cacute = 722; e.atilde = 556; e.Edotaccent = 667; e.scaron = 556; e.scedilla = 556; e.iacute = 278; e.lozenge = 494; e.Rcaron = 722; e.Gcommaaccent = 778; e.ucircumflex = 611; e.acircumflex = 556; e.Amacron = 722; e.rcaron = 389; e.ccedilla = 556; e.Zdotaccent = 611; e.Thorn = 667; e.Omacron = 778; e.Racute = 722; e.Sacute = 667; e.dcaron = 743; e.Umacron = 722; e.uring = 611; e.threesuperior = 333; e.Ograve = 778; e.Agrave = 722; e.Abreve = 722; e.multiply = 584; e.uacute = 611; e.Tcaron = 611; e.partialdiff = 494; e.ydieresis = 556; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 667; e.adieresis = 556; e.edieresis = 556; e.cacute = 556; e.nacute = 611; e.umacron = 611; e.Ncaron = 722; e.Iacute = 278; e.plusminus = 584; e.brokenbar = 280; e.registered = 737; e.Gbreve = 778; e.Idotaccent = 278; e.summation = 600; e.Egrave = 667; e.racute = 389; e.omacron = 611; e.Zacute = 611; e.Zcaron = 611; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 722; e.lcommaaccent = 278; e.tcaron = 389; e.eogonek = 556; e.Uogonek = 722; e.Aacute = 722; e.Adieresis = 722; e.egrave = 556; e.zacute = 500; e.iogonek = 278; e.Oacute = 778; e.oacute = 611; e.amacron = 556; e.sacute = 556; e.idieresis = 278; e.Ocircumflex = 778; e.Ugrave = 722; e.Delta = 612; e.thorn = 611; e.twosuperior = 333; e.Odieresis = 778; e.mu = 611; e.igrave = 278; e.ohungarumlaut = 611; e.Eogonek = 667; e.dcroat = 611; e.threequarters = 834; e.Scedilla = 667; e.lcaron = 400; e.Kcommaaccent = 722; e.Lacute = 611; e.trademark = 1e3; e.edotaccent = 556; e.Igrave = 278; e.Imacron = 278; e.Lcaron = 611; e.onehalf = 834; e.lessequal = 549; e.ocircumflex = 611; e.ntilde = 611; e.Uhungarumlaut = 722; e.Eacute = 667; e.emacron = 556; e.gbreve = 611; e.onequarter = 834; e.Scaron = 667; e.Scommaaccent = 667; e.Ohungarumlaut = 778; e.degree = 400; e.ograve = 611; e.Ccaron = 722; e.ugrave = 611; e.radical = 549; e.Dcaron = 722; e.rcommaaccent = 389; e.Ntilde = 722; e.otilde = 611; e.Rcommaaccent = 722; e.Lcommaaccent = 611; e.Atilde = 722; e.Aogonek = 722; e.Aring = 722; e.Otilde = 778; e.zdotaccent = 500; e.Ecaron = 667; e.Iogonek = 278; e.kcommaaccent = 556; e.minus = 584; e.Icircumflex = 278; e.ncaron = 611; e.tcommaaccent = 333; e.logicalnot = 584; e.odieresis = 611; e.udieresis = 611; e.notequal = 549; e.gcommaaccent = 611; e.eth = 611; e.zcaron = 500; e.ncommaaccent = 611; e.onesuperior = 333; e.imacron = 278; e.Euro = 556 })); e["Helvetica-Oblique"] = (0, r.getLookupTableFactory)((function (e) { e.space = 278; e.exclam = 278; e.quotedbl = 355; e.numbersign = 556; e.dollar = 556; e.percent = 889; e.ampersand = 667; e.quoteright = 222; e.parenleft = 333; e.parenright = 333; e.asterisk = 389; e.plus = 584; e.comma = 278; e.hyphen = 333; e.period = 278; e.slash = 278; e.zero = 556; e.one = 556; e.two = 556; e.three = 556; e.four = 556; e.five = 556; e.six = 556; e.seven = 556; e.eight = 556; e.nine = 556; e.colon = 278; e.semicolon = 278; e.less = 584; e.equal = 584; e.greater = 584; e.question = 556; e.at = 1015; e.A = 667; e.B = 667; e.C = 722; e.D = 722; e.E = 667; e.F = 611; e.G = 778; e.H = 722; e.I = 278; e.J = 500; e.K = 667; e.L = 556; e.M = 833; e.N = 722; e.O = 778; e.P = 667; e.Q = 778; e.R = 722; e.S = 667; e.T = 611; e.U = 722; e.V = 667; e.W = 944; e.X = 667; e.Y = 667; e.Z = 611; e.bracketleft = 278; e.backslash = 278; e.bracketright = 278; e.asciicircum = 469; e.underscore = 556; e.quoteleft = 222; e.a = 556; e.b = 556; e.c = 500; e.d = 556; e.e = 556; e.f = 278; e.g = 556; e.h = 556; e.i = 222; e.j = 222; e.k = 500; e.l = 222; e.m = 833; e.n = 556; e.o = 556; e.p = 556; e.q = 556; e.r = 333; e.s = 500; e.t = 278; e.u = 556; e.v = 500; e.w = 722; e.x = 500; e.y = 500; e.z = 500; e.braceleft = 334; e.bar = 260; e.braceright = 334; e.asciitilde = 584; e.exclamdown = 333; e.cent = 556; e.sterling = 556; e.fraction = 167; e.yen = 556; e.florin = 556; e.section = 556; e.currency = 556; e.quotesingle = 191; e.quotedblleft = 333; e.guillemotleft = 556; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 500; e.fl = 500; e.endash = 556; e.dagger = 556; e.daggerdbl = 556; e.periodcentered = 278; e.paragraph = 537; e.bullet = 350; e.quotesinglbase = 222; e.quotedblbase = 333; e.quotedblright = 333; e.guillemotright = 556; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 611; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 1e3; e.ordfeminine = 370; e.Lslash = 556; e.Oslash = 778; e.OE = 1e3; e.ordmasculine = 365; e.ae = 889; e.dotlessi = 278; e.lslash = 222; e.oslash = 611; e.oe = 944; e.germandbls = 611; e.Idieresis = 278; e.eacute = 556; e.abreve = 556; e.uhungarumlaut = 556; e.ecaron = 556; e.Ydieresis = 667; e.divide = 584; e.Yacute = 667; e.Acircumflex = 667; e.aacute = 556; e.Ucircumflex = 722; e.yacute = 500; e.scommaaccent = 500; e.ecircumflex = 556; e.Uring = 722; e.Udieresis = 722; e.aogonek = 556; e.Uacute = 722; e.uogonek = 556; e.Edieresis = 667; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 737; e.Emacron = 667; e.ccaron = 500; e.aring = 556; e.Ncommaaccent = 722; e.lacute = 222; e.agrave = 556; e.Tcommaaccent = 611; e.Cacute = 722; e.atilde = 556; e.Edotaccent = 667; e.scaron = 500; e.scedilla = 500; e.iacute = 278; e.lozenge = 471; e.Rcaron = 722; e.Gcommaaccent = 778; e.ucircumflex = 556; e.acircumflex = 556; e.Amacron = 667; e.rcaron = 333; e.ccedilla = 500; e.Zdotaccent = 611; e.Thorn = 667; e.Omacron = 778; e.Racute = 722; e.Sacute = 667; e.dcaron = 643; e.Umacron = 722; e.uring = 556; e.threesuperior = 333; e.Ograve = 778; e.Agrave = 667; e.Abreve = 667; e.multiply = 584; e.uacute = 556; e.Tcaron = 611; e.partialdiff = 476; e.ydieresis = 500; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 667; e.adieresis = 556; e.edieresis = 556; e.cacute = 500; e.nacute = 556; e.umacron = 556; e.Ncaron = 722; e.Iacute = 278; e.plusminus = 584; e.brokenbar = 260; e.registered = 737; e.Gbreve = 778; e.Idotaccent = 278; e.summation = 600; e.Egrave = 667; e.racute = 333; e.omacron = 556; e.Zacute = 611; e.Zcaron = 611; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 722; e.lcommaaccent = 222; e.tcaron = 317; e.eogonek = 556; e.Uogonek = 722; e.Aacute = 667; e.Adieresis = 667; e.egrave = 556; e.zacute = 500; e.iogonek = 222; e.Oacute = 778; e.oacute = 556; e.amacron = 556; e.sacute = 500; e.idieresis = 278; e.Ocircumflex = 778; e.Ugrave = 722; e.Delta = 612; e.thorn = 556; e.twosuperior = 333; e.Odieresis = 778; e.mu = 556; e.igrave = 278; e.ohungarumlaut = 556; e.Eogonek = 667; e.dcroat = 556; e.threequarters = 834; e.Scedilla = 667; e.lcaron = 299; e.Kcommaaccent = 667; e.Lacute = 556; e.trademark = 1e3; e.edotaccent = 556; e.Igrave = 278; e.Imacron = 278; e.Lcaron = 556; e.onehalf = 834; e.lessequal = 549; e.ocircumflex = 556; e.ntilde = 556; e.Uhungarumlaut = 722; e.Eacute = 667; e.emacron = 556; e.gbreve = 556; e.onequarter = 834; e.Scaron = 667; e.Scommaaccent = 667; e.Ohungarumlaut = 778; e.degree = 400; e.ograve = 556; e.Ccaron = 722; e.ugrave = 556; e.radical = 453; e.Dcaron = 722; e.rcommaaccent = 333; e.Ntilde = 722; e.otilde = 556; e.Rcommaaccent = 722; e.Lcommaaccent = 556; e.Atilde = 667; e.Aogonek = 667; e.Aring = 667; e.Otilde = 778; e.zdotaccent = 500; e.Ecaron = 667; e.Iogonek = 278; e.kcommaaccent = 500; e.minus = 584; e.Icircumflex = 278; e.ncaron = 556; e.tcommaaccent = 278; e.logicalnot = 584; e.odieresis = 556; e.udieresis = 556; e.notequal = 549; e.gcommaaccent = 556; e.eth = 556; e.zcaron = 500; e.ncommaaccent = 556; e.onesuperior = 333; e.imacron = 278; e.Euro = 556 })); e.Symbol = (0, r.getLookupTableFactory)((function (e) { e.space = 250; e.exclam = 333; e.universal = 713; e.numbersign = 500; e.existential = 549; e.percent = 833; e.ampersand = 778; e.suchthat = 439; e.parenleft = 333; e.parenright = 333; e.asteriskmath = 500; e.plus = 549; e.comma = 250; e.minus = 549; e.period = 250; e.slash = 278; e.zero = 500; e.one = 500; e.two = 500; e.three = 500; e.four = 500; e.five = 500; e.six = 500; e.seven = 500; e.eight = 500; e.nine = 500; e.colon = 278; e.semicolon = 278; e.less = 549; e.equal = 549; e.greater = 549; e.question = 444; e.congruent = 549; e.Alpha = 722; e.Beta = 667; e.Chi = 722; e.Delta = 612; e.Epsilon = 611; e.Phi = 763; e.Gamma = 603; e.Eta = 722; e.Iota = 333; e.theta1 = 631; e.Kappa = 722; e.Lambda = 686; e.Mu = 889; e.Nu = 722; e.Omicron = 722; e.Pi = 768; e.Theta = 741; e.Rho = 556; e.Sigma = 592; e.Tau = 611; e.Upsilon = 690; e.sigma1 = 439; e.Omega = 768; e.Xi = 645; e.Psi = 795; e.Zeta = 611; e.bracketleft = 333; e.therefore = 863; e.bracketright = 333; e.perpendicular = 658; e.underscore = 500; e.radicalex = 500; e.alpha = 631; e.beta = 549; e.chi = 549; e.delta = 494; e.epsilon = 439; e.phi = 521; e.gamma = 411; e.eta = 603; e.iota = 329; e.phi1 = 603; e.kappa = 549; e.lambda = 549; e.mu = 576; e.nu = 521; e.omicron = 549; e.pi = 549; e.theta = 521; e.rho = 549; e.sigma = 603; e.tau = 439; e.upsilon = 576; e.omega1 = 713; e.omega = 686; e.xi = 493; e.psi = 686; e.zeta = 494; e.braceleft = 480; e.bar = 200; e.braceright = 480; e.similar = 549; e.Euro = 750; e.Upsilon1 = 620; e.minute = 247; e.lessequal = 549; e.fraction = 167; e.infinity = 713; e.florin = 500; e.club = 753; e.diamond = 753; e.heart = 753; e.spade = 753; e.arrowboth = 1042; e.arrowleft = 987; e.arrowup = 603; e.arrowright = 987; e.arrowdown = 603; e.degree = 400; e.plusminus = 549; e.second = 411; e.greaterequal = 549; e.multiply = 549; e.proportional = 713; e.partialdiff = 494; e.bullet = 460; e.divide = 549; e.notequal = 549; e.equivalence = 549; e.approxequal = 549; e.ellipsis = 1e3; e.arrowvertex = 603; e.arrowhorizex = 1e3; e.carriagereturn = 658; e.aleph = 823; e.Ifraktur = 686; e.Rfraktur = 795; e.weierstrass = 987; e.circlemultiply = 768; e.circleplus = 768; e.emptyset = 823; e.intersection = 768; e.union = 768; e.propersuperset = 713; e.reflexsuperset = 713; e.notsubset = 713; e.propersubset = 713; e.reflexsubset = 713; e.element = 713; e.notelement = 713; e.angle = 768; e.gradient = 713; e.registerserif = 790; e.copyrightserif = 790; e.trademarkserif = 890; e.product = 823; e.radical = 549; e.dotmath = 250; e.logicalnot = 713; e.logicaland = 603; e.logicalor = 603; e.arrowdblboth = 1042; e.arrowdblleft = 987; e.arrowdblup = 603; e.arrowdblright = 987; e.arrowdbldown = 603; e.lozenge = 494; e.angleleft = 329; e.registersans = 790; e.copyrightsans = 790; e.trademarksans = 786; e.summation = 713; e.parenlefttp = 384; e.parenleftex = 384; e.parenleftbt = 384; e.bracketlefttp = 384; e.bracketleftex = 384; e.bracketleftbt = 384; e.bracelefttp = 494; e.braceleftmid = 494; e.braceleftbt = 494; e.braceex = 494; e.angleright = 329; e.integral = 274; e.integraltp = 686; e.integralex = 686; e.integralbt = 686; e.parenrighttp = 384; e.parenrightex = 384; e.parenrightbt = 384; e.bracketrighttp = 384; e.bracketrightex = 384; e.bracketrightbt = 384; e.bracerighttp = 494; e.bracerightmid = 494; e.bracerightbt = 494; e.apple = 790 })); e["Times-Roman"] = (0, r.getLookupTableFactory)((function (e) { e.space = 250; e.exclam = 333; e.quotedbl = 408; e.numbersign = 500; e.dollar = 500; e.percent = 833; e.ampersand = 778; e.quoteright = 333; e.parenleft = 333; e.parenright = 333; e.asterisk = 500; e.plus = 564; e.comma = 250; e.hyphen = 333; e.period = 250; e.slash = 278; e.zero = 500; e.one = 500; e.two = 500; e.three = 500; e.four = 500; e.five = 500; e.six = 500; e.seven = 500; e.eight = 500; e.nine = 500; e.colon = 278; e.semicolon = 278; e.less = 564; e.equal = 564; e.greater = 564; e.question = 444; e.at = 921; e.A = 722; e.B = 667; e.C = 667; e.D = 722; e.E = 611; e.F = 556; e.G = 722; e.H = 722; e.I = 333; e.J = 389; e.K = 722; e.L = 611; e.M = 889; e.N = 722; e.O = 722; e.P = 556; e.Q = 722; e.R = 667; e.S = 556; e.T = 611; e.U = 722; e.V = 722; e.W = 944; e.X = 722; e.Y = 722; e.Z = 611; e.bracketleft = 333; e.backslash = 278; e.bracketright = 333; e.asciicircum = 469; e.underscore = 500; e.quoteleft = 333; e.a = 444; e.b = 500; e.c = 444; e.d = 500; e.e = 444; e.f = 333; e.g = 500; e.h = 500; e.i = 278; e.j = 278; e.k = 500; e.l = 278; e.m = 778; e.n = 500; e.o = 500; e.p = 500; e.q = 500; e.r = 333; e.s = 389; e.t = 278; e.u = 500; e.v = 500; e.w = 722; e.x = 500; e.y = 500; e.z = 444; e.braceleft = 480; e.bar = 200; e.braceright = 480; e.asciitilde = 541; e.exclamdown = 333; e.cent = 500; e.sterling = 500; e.fraction = 167; e.yen = 500; e.florin = 500; e.section = 500; e.currency = 500; e.quotesingle = 180; e.quotedblleft = 444; e.guillemotleft = 500; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 556; e.fl = 556; e.endash = 500; e.dagger = 500; e.daggerdbl = 500; e.periodcentered = 250; e.paragraph = 453; e.bullet = 350; e.quotesinglbase = 333; e.quotedblbase = 444; e.quotedblright = 444; e.guillemotright = 500; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 444; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 889; e.ordfeminine = 276; e.Lslash = 611; e.Oslash = 722; e.OE = 889; e.ordmasculine = 310; e.ae = 667; e.dotlessi = 278; e.lslash = 278; e.oslash = 500; e.oe = 722; e.germandbls = 500; e.Idieresis = 333; e.eacute = 444; e.abreve = 444; e.uhungarumlaut = 500; e.ecaron = 444; e.Ydieresis = 722; e.divide = 564; e.Yacute = 722; e.Acircumflex = 722; e.aacute = 444; e.Ucircumflex = 722; e.yacute = 500; e.scommaaccent = 389; e.ecircumflex = 444; e.Uring = 722; e.Udieresis = 722; e.aogonek = 444; e.Uacute = 722; e.uogonek = 500; e.Edieresis = 611; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 760; e.Emacron = 611; e.ccaron = 444; e.aring = 444; e.Ncommaaccent = 722; e.lacute = 278; e.agrave = 444; e.Tcommaaccent = 611; e.Cacute = 667; e.atilde = 444; e.Edotaccent = 611; e.scaron = 389; e.scedilla = 389; e.iacute = 278; e.lozenge = 471; e.Rcaron = 667; e.Gcommaaccent = 722; e.ucircumflex = 500; e.acircumflex = 444; e.Amacron = 722; e.rcaron = 333; e.ccedilla = 444; e.Zdotaccent = 611; e.Thorn = 556; e.Omacron = 722; e.Racute = 667; e.Sacute = 556; e.dcaron = 588; e.Umacron = 722; e.uring = 500; e.threesuperior = 300; e.Ograve = 722; e.Agrave = 722; e.Abreve = 722; e.multiply = 564; e.uacute = 500; e.Tcaron = 611; e.partialdiff = 476; e.ydieresis = 500; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 611; e.adieresis = 444; e.edieresis = 444; e.cacute = 444; e.nacute = 500; e.umacron = 500; e.Ncaron = 722; e.Iacute = 333; e.plusminus = 564; e.brokenbar = 200; e.registered = 760; e.Gbreve = 722; e.Idotaccent = 333; e.summation = 600; e.Egrave = 611; e.racute = 333; e.omacron = 500; e.Zacute = 611; e.Zcaron = 611; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 667; e.lcommaaccent = 278; e.tcaron = 326; e.eogonek = 444; e.Uogonek = 722; e.Aacute = 722; e.Adieresis = 722; e.egrave = 444; e.zacute = 444; e.iogonek = 278; e.Oacute = 722; e.oacute = 500; e.amacron = 444; e.sacute = 389; e.idieresis = 278; e.Ocircumflex = 722; e.Ugrave = 722; e.Delta = 612; e.thorn = 500; e.twosuperior = 300; e.Odieresis = 722; e.mu = 500; e.igrave = 278; e.ohungarumlaut = 500; e.Eogonek = 611; e.dcroat = 500; e.threequarters = 750; e.Scedilla = 556; e.lcaron = 344; e.Kcommaaccent = 722; e.Lacute = 611; e.trademark = 980; e.edotaccent = 444; e.Igrave = 333; e.Imacron = 333; e.Lcaron = 611; e.onehalf = 750; e.lessequal = 549; e.ocircumflex = 500; e.ntilde = 500; e.Uhungarumlaut = 722; e.Eacute = 611; e.emacron = 444; e.gbreve = 500; e.onequarter = 750; e.Scaron = 556; e.Scommaaccent = 556; e.Ohungarumlaut = 722; e.degree = 400; e.ograve = 500; e.Ccaron = 667; e.ugrave = 500; e.radical = 453; e.Dcaron = 722; e.rcommaaccent = 333; e.Ntilde = 722; e.otilde = 500; e.Rcommaaccent = 667; e.Lcommaaccent = 611; e.Atilde = 722; e.Aogonek = 722; e.Aring = 722; e.Otilde = 722; e.zdotaccent = 444; e.Ecaron = 611; e.Iogonek = 333; e.kcommaaccent = 500; e.minus = 564; e.Icircumflex = 333; e.ncaron = 500; e.tcommaaccent = 278; e.logicalnot = 564; e.odieresis = 500; e.udieresis = 500; e.notequal = 549; e.gcommaaccent = 500; e.eth = 500; e.zcaron = 444; e.ncommaaccent = 500; e.onesuperior = 300; e.imacron = 278; e.Euro = 500 })); e["Times-Bold"] = (0, r.getLookupTableFactory)((function (e) { e.space = 250; e.exclam = 333; e.quotedbl = 555; e.numbersign = 500; e.dollar = 500; e.percent = 1e3; e.ampersand = 833; e.quoteright = 333; e.parenleft = 333; e.parenright = 333; e.asterisk = 500; e.plus = 570; e.comma = 250; e.hyphen = 333; e.period = 250; e.slash = 278; e.zero = 500; e.one = 500; e.two = 500; e.three = 500; e.four = 500; e.five = 500; e.six = 500; e.seven = 500; e.eight = 500; e.nine = 500; e.colon = 333; e.semicolon = 333; e.less = 570; e.equal = 570; e.greater = 570; e.question = 500; e.at = 930; e.A = 722; e.B = 667; e.C = 722; e.D = 722; e.E = 667; e.F = 611; e.G = 778; e.H = 778; e.I = 389; e.J = 500; e.K = 778; e.L = 667; e.M = 944; e.N = 722; e.O = 778; e.P = 611; e.Q = 778; e.R = 722; e.S = 556; e.T = 667; e.U = 722; e.V = 722; e.W = 1e3; e.X = 722; e.Y = 722; e.Z = 667; e.bracketleft = 333; e.backslash = 278; e.bracketright = 333; e.asciicircum = 581; e.underscore = 500; e.quoteleft = 333; e.a = 500; e.b = 556; e.c = 444; e.d = 556; e.e = 444; e.f = 333; e.g = 500; e.h = 556; e.i = 278; e.j = 333; e.k = 556; e.l = 278; e.m = 833; e.n = 556; e.o = 500; e.p = 556; e.q = 556; e.r = 444; e.s = 389; e.t = 333; e.u = 556; e.v = 500; e.w = 722; e.x = 500; e.y = 500; e.z = 444; e.braceleft = 394; e.bar = 220; e.braceright = 394; e.asciitilde = 520; e.exclamdown = 333; e.cent = 500; e.sterling = 500; e.fraction = 167; e.yen = 500; e.florin = 500; e.section = 500; e.currency = 500; e.quotesingle = 278; e.quotedblleft = 500; e.guillemotleft = 500; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 556; e.fl = 556; e.endash = 500; e.dagger = 500; e.daggerdbl = 500; e.periodcentered = 250; e.paragraph = 540; e.bullet = 350; e.quotesinglbase = 333; e.quotedblbase = 500; e.quotedblright = 500; e.guillemotright = 500; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 500; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 1e3; e.ordfeminine = 300; e.Lslash = 667; e.Oslash = 778; e.OE = 1e3; e.ordmasculine = 330; e.ae = 722; e.dotlessi = 278; e.lslash = 278; e.oslash = 500; e.oe = 722; e.germandbls = 556; e.Idieresis = 389; e.eacute = 444; e.abreve = 500; e.uhungarumlaut = 556; e.ecaron = 444; e.Ydieresis = 722; e.divide = 570; e.Yacute = 722; e.Acircumflex = 722; e.aacute = 500; e.Ucircumflex = 722; e.yacute = 500; e.scommaaccent = 389; e.ecircumflex = 444; e.Uring = 722; e.Udieresis = 722; e.aogonek = 500; e.Uacute = 722; e.uogonek = 556; e.Edieresis = 667; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 747; e.Emacron = 667; e.ccaron = 444; e.aring = 500; e.Ncommaaccent = 722; e.lacute = 278; e.agrave = 500; e.Tcommaaccent = 667; e.Cacute = 722; e.atilde = 500; e.Edotaccent = 667; e.scaron = 389; e.scedilla = 389; e.iacute = 278; e.lozenge = 494; e.Rcaron = 722; e.Gcommaaccent = 778; e.ucircumflex = 556; e.acircumflex = 500; e.Amacron = 722; e.rcaron = 444; e.ccedilla = 444; e.Zdotaccent = 667; e.Thorn = 611; e.Omacron = 778; e.Racute = 722; e.Sacute = 556; e.dcaron = 672; e.Umacron = 722; e.uring = 556; e.threesuperior = 300; e.Ograve = 778; e.Agrave = 722; e.Abreve = 722; e.multiply = 570; e.uacute = 556; e.Tcaron = 667; e.partialdiff = 494; e.ydieresis = 500; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 667; e.adieresis = 500; e.edieresis = 444; e.cacute = 444; e.nacute = 556; e.umacron = 556; e.Ncaron = 722; e.Iacute = 389; e.plusminus = 570; e.brokenbar = 220; e.registered = 747; e.Gbreve = 778; e.Idotaccent = 389; e.summation = 600; e.Egrave = 667; e.racute = 444; e.omacron = 500; e.Zacute = 667; e.Zcaron = 667; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 722; e.lcommaaccent = 278; e.tcaron = 416; e.eogonek = 444; e.Uogonek = 722; e.Aacute = 722; e.Adieresis = 722; e.egrave = 444; e.zacute = 444; e.iogonek = 278; e.Oacute = 778; e.oacute = 500; e.amacron = 500; e.sacute = 389; e.idieresis = 278; e.Ocircumflex = 778; e.Ugrave = 722; e.Delta = 612; e.thorn = 556; e.twosuperior = 300; e.Odieresis = 778; e.mu = 556; e.igrave = 278; e.ohungarumlaut = 500; e.Eogonek = 667; e.dcroat = 556; e.threequarters = 750; e.Scedilla = 556; e.lcaron = 394; e.Kcommaaccent = 778; e.Lacute = 667; e.trademark = 1e3; e.edotaccent = 444; e.Igrave = 389; e.Imacron = 389; e.Lcaron = 667; e.onehalf = 750; e.lessequal = 549; e.ocircumflex = 500; e.ntilde = 556; e.Uhungarumlaut = 722; e.Eacute = 667; e.emacron = 444; e.gbreve = 500; e.onequarter = 750; e.Scaron = 556; e.Scommaaccent = 556; e.Ohungarumlaut = 778; e.degree = 400; e.ograve = 500; e.Ccaron = 722; e.ugrave = 556; e.radical = 549; e.Dcaron = 722; e.rcommaaccent = 444; e.Ntilde = 722; e.otilde = 500; e.Rcommaaccent = 722; e.Lcommaaccent = 667; e.Atilde = 722; e.Aogonek = 722; e.Aring = 722; e.Otilde = 778; e.zdotaccent = 444; e.Ecaron = 667; e.Iogonek = 389; e.kcommaaccent = 556; e.minus = 570; e.Icircumflex = 389; e.ncaron = 556; e.tcommaaccent = 333; e.logicalnot = 570; e.odieresis = 500; e.udieresis = 556; e.notequal = 549; e.gcommaaccent = 500; e.eth = 500; e.zcaron = 444; e.ncommaaccent = 556; e.onesuperior = 300; e.imacron = 278; e.Euro = 500 })); e["Times-BoldItalic"] = (0, r.getLookupTableFactory)((function (e) { e.space = 250; e.exclam = 389; e.quotedbl = 555; e.numbersign = 500; e.dollar = 500; e.percent = 833; e.ampersand = 778; e.quoteright = 333; e.parenleft = 333; e.parenright = 333; e.asterisk = 500; e.plus = 570; e.comma = 250; e.hyphen = 333; e.period = 250; e.slash = 278; e.zero = 500; e.one = 500; e.two = 500; e.three = 500; e.four = 500; e.five = 500; e.six = 500; e.seven = 500; e.eight = 500; e.nine = 500; e.colon = 333; e.semicolon = 333; e.less = 570; e.equal = 570; e.greater = 570; e.question = 500; e.at = 832; e.A = 667; e.B = 667; e.C = 667; e.D = 722; e.E = 667; e.F = 667; e.G = 722; e.H = 778; e.I = 389; e.J = 500; e.K = 667; e.L = 611; e.M = 889; e.N = 722; e.O = 722; e.P = 611; e.Q = 722; e.R = 667; e.S = 556; e.T = 611; e.U = 722; e.V = 667; e.W = 889; e.X = 667; e.Y = 611; e.Z = 611; e.bracketleft = 333; e.backslash = 278; e.bracketright = 333; e.asciicircum = 570; e.underscore = 500; e.quoteleft = 333; e.a = 500; e.b = 500; e.c = 444; e.d = 500; e.e = 444; e.f = 333; e.g = 500; e.h = 556; e.i = 278; e.j = 278; e.k = 500; e.l = 278; e.m = 778; e.n = 556; e.o = 500; e.p = 500; e.q = 500; e.r = 389; e.s = 389; e.t = 278; e.u = 556; e.v = 444; e.w = 667; e.x = 500; e.y = 444; e.z = 389; e.braceleft = 348; e.bar = 220; e.braceright = 348; e.asciitilde = 570; e.exclamdown = 389; e.cent = 500; e.sterling = 500; e.fraction = 167; e.yen = 500; e.florin = 500; e.section = 500; e.currency = 500; e.quotesingle = 278; e.quotedblleft = 500; e.guillemotleft = 500; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 556; e.fl = 556; e.endash = 500; e.dagger = 500; e.daggerdbl = 500; e.periodcentered = 250; e.paragraph = 500; e.bullet = 350; e.quotesinglbase = 333; e.quotedblbase = 500; e.quotedblright = 500; e.guillemotright = 500; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 500; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 944; e.ordfeminine = 266; e.Lslash = 611; e.Oslash = 722; e.OE = 944; e.ordmasculine = 300; e.ae = 722; e.dotlessi = 278; e.lslash = 278; e.oslash = 500; e.oe = 722; e.germandbls = 500; e.Idieresis = 389; e.eacute = 444; e.abreve = 500; e.uhungarumlaut = 556; e.ecaron = 444; e.Ydieresis = 611; e.divide = 570; e.Yacute = 611; e.Acircumflex = 667; e.aacute = 500; e.Ucircumflex = 722; e.yacute = 444; e.scommaaccent = 389; e.ecircumflex = 444; e.Uring = 722; e.Udieresis = 722; e.aogonek = 500; e.Uacute = 722; e.uogonek = 556; e.Edieresis = 667; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 747; e.Emacron = 667; e.ccaron = 444; e.aring = 500; e.Ncommaaccent = 722; e.lacute = 278; e.agrave = 500; e.Tcommaaccent = 611; e.Cacute = 667; e.atilde = 500; e.Edotaccent = 667; e.scaron = 389; e.scedilla = 389; e.iacute = 278; e.lozenge = 494; e.Rcaron = 667; e.Gcommaaccent = 722; e.ucircumflex = 556; e.acircumflex = 500; e.Amacron = 667; e.rcaron = 389; e.ccedilla = 444; e.Zdotaccent = 611; e.Thorn = 611; e.Omacron = 722; e.Racute = 667; e.Sacute = 556; e.dcaron = 608; e.Umacron = 722; e.uring = 556; e.threesuperior = 300; e.Ograve = 722; e.Agrave = 667; e.Abreve = 667; e.multiply = 570; e.uacute = 556; e.Tcaron = 611; e.partialdiff = 494; e.ydieresis = 444; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 667; e.adieresis = 500; e.edieresis = 444; e.cacute = 444; e.nacute = 556; e.umacron = 556; e.Ncaron = 722; e.Iacute = 389; e.plusminus = 570; e.brokenbar = 220; e.registered = 747; e.Gbreve = 722; e.Idotaccent = 389; e.summation = 600; e.Egrave = 667; e.racute = 389; e.omacron = 500; e.Zacute = 611; e.Zcaron = 611; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 667; e.lcommaaccent = 278; e.tcaron = 366; e.eogonek = 444; e.Uogonek = 722; e.Aacute = 667; e.Adieresis = 667; e.egrave = 444; e.zacute = 389; e.iogonek = 278; e.Oacute = 722; e.oacute = 500; e.amacron = 500; e.sacute = 389; e.idieresis = 278; e.Ocircumflex = 722; e.Ugrave = 722; e.Delta = 612; e.thorn = 500; e.twosuperior = 300; e.Odieresis = 722; e.mu = 576; e.igrave = 278; e.ohungarumlaut = 500; e.Eogonek = 667; e.dcroat = 500; e.threequarters = 750; e.Scedilla = 556; e.lcaron = 382; e.Kcommaaccent = 667; e.Lacute = 611; e.trademark = 1e3; e.edotaccent = 444; e.Igrave = 389; e.Imacron = 389; e.Lcaron = 611; e.onehalf = 750; e.lessequal = 549; e.ocircumflex = 500; e.ntilde = 556; e.Uhungarumlaut = 722; e.Eacute = 667; e.emacron = 444; e.gbreve = 500; e.onequarter = 750; e.Scaron = 556; e.Scommaaccent = 556; e.Ohungarumlaut = 722; e.degree = 400; e.ograve = 500; e.Ccaron = 667; e.ugrave = 556; e.radical = 549; e.Dcaron = 722; e.rcommaaccent = 389; e.Ntilde = 722; e.otilde = 500; e.Rcommaaccent = 667; e.Lcommaaccent = 611; e.Atilde = 667; e.Aogonek = 667; e.Aring = 667; e.Otilde = 722; e.zdotaccent = 389; e.Ecaron = 667; e.Iogonek = 389; e.kcommaaccent = 500; e.minus = 606; e.Icircumflex = 389; e.ncaron = 556; e.tcommaaccent = 278; e.logicalnot = 606; e.odieresis = 500; e.udieresis = 556; e.notequal = 549; e.gcommaaccent = 500; e.eth = 500; e.zcaron = 389; e.ncommaaccent = 556; e.onesuperior = 300; e.imacron = 278; e.Euro = 500 })); e["Times-Italic"] = (0, r.getLookupTableFactory)((function (e) { e.space = 250; e.exclam = 333; e.quotedbl = 420; e.numbersign = 500; e.dollar = 500; e.percent = 833; e.ampersand = 778; e.quoteright = 333; e.parenleft = 333; e.parenright = 333; e.asterisk = 500; e.plus = 675; e.comma = 250; e.hyphen = 333; e.period = 250; e.slash = 278; e.zero = 500; e.one = 500; e.two = 500; e.three = 500; e.four = 500; e.five = 500; e.six = 500; e.seven = 500; e.eight = 500; e.nine = 500; e.colon = 333; e.semicolon = 333; e.less = 675; e.equal = 675; e.greater = 675; e.question = 500; e.at = 920; e.A = 611; e.B = 611; e.C = 667; e.D = 722; e.E = 611; e.F = 611; e.G = 722; e.H = 722; e.I = 333; e.J = 444; e.K = 667; e.L = 556; e.M = 833; e.N = 667; e.O = 722; e.P = 611; e.Q = 722; e.R = 611; e.S = 500; e.T = 556; e.U = 722; e.V = 611; e.W = 833; e.X = 611; e.Y = 556; e.Z = 556; e.bracketleft = 389; e.backslash = 278; e.bracketright = 389; e.asciicircum = 422; e.underscore = 500; e.quoteleft = 333; e.a = 500; e.b = 500; e.c = 444; e.d = 500; e.e = 444; e.f = 278; e.g = 500; e.h = 500; e.i = 278; e.j = 278; e.k = 444; e.l = 278; e.m = 722; e.n = 500; e.o = 500; e.p = 500; e.q = 500; e.r = 389; e.s = 389; e.t = 278; e.u = 500; e.v = 444; e.w = 667; e.x = 444; e.y = 444; e.z = 389; e.braceleft = 400; e.bar = 275; e.braceright = 400; e.asciitilde = 541; e.exclamdown = 389; e.cent = 500; e.sterling = 500; e.fraction = 167; e.yen = 500; e.florin = 500; e.section = 500; e.currency = 500; e.quotesingle = 214; e.quotedblleft = 556; e.guillemotleft = 500; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 500; e.fl = 500; e.endash = 500; e.dagger = 500; e.daggerdbl = 500; e.periodcentered = 250; e.paragraph = 523; e.bullet = 350; e.quotesinglbase = 333; e.quotedblbase = 556; e.quotedblright = 556; e.guillemotright = 500; e.ellipsis = 889; e.perthousand = 1e3; e.questiondown = 500; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 889; e.AE = 889; e.ordfeminine = 276; e.Lslash = 556; e.Oslash = 722; e.OE = 944; e.ordmasculine = 310; e.ae = 667; e.dotlessi = 278; e.lslash = 278; e.oslash = 500; e.oe = 667; e.germandbls = 500; e.Idieresis = 333; e.eacute = 444; e.abreve = 500; e.uhungarumlaut = 500; e.ecaron = 444; e.Ydieresis = 556; e.divide = 675; e.Yacute = 556; e.Acircumflex = 611; e.aacute = 500; e.Ucircumflex = 722; e.yacute = 444; e.scommaaccent = 389; e.ecircumflex = 444; e.Uring = 722; e.Udieresis = 722; e.aogonek = 500; e.Uacute = 722; e.uogonek = 500; e.Edieresis = 611; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 760; e.Emacron = 611; e.ccaron = 444; e.aring = 500; e.Ncommaaccent = 667; e.lacute = 278; e.agrave = 500; e.Tcommaaccent = 556; e.Cacute = 667; e.atilde = 500; e.Edotaccent = 611; e.scaron = 389; e.scedilla = 389; e.iacute = 278; e.lozenge = 471; e.Rcaron = 611; e.Gcommaaccent = 722; e.ucircumflex = 500; e.acircumflex = 500; e.Amacron = 611; e.rcaron = 389; e.ccedilla = 444; e.Zdotaccent = 556; e.Thorn = 611; e.Omacron = 722; e.Racute = 611; e.Sacute = 500; e.dcaron = 544; e.Umacron = 722; e.uring = 500; e.threesuperior = 300; e.Ograve = 722; e.Agrave = 611; e.Abreve = 611; e.multiply = 675; e.uacute = 500; e.Tcaron = 556; e.partialdiff = 476; e.ydieresis = 444; e.Nacute = 667; e.icircumflex = 278; e.Ecircumflex = 611; e.adieresis = 500; e.edieresis = 444; e.cacute = 444; e.nacute = 500; e.umacron = 500; e.Ncaron = 667; e.Iacute = 333; e.plusminus = 675; e.brokenbar = 275; e.registered = 760; e.Gbreve = 722; e.Idotaccent = 333; e.summation = 600; e.Egrave = 611; e.racute = 389; e.omacron = 500; e.Zacute = 556; e.Zcaron = 556; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 667; e.lcommaaccent = 278; e.tcaron = 300; e.eogonek = 444; e.Uogonek = 722; e.Aacute = 611; e.Adieresis = 611; e.egrave = 444; e.zacute = 389; e.iogonek = 278; e.Oacute = 722; e.oacute = 500; e.amacron = 500; e.sacute = 389; e.idieresis = 278; e.Ocircumflex = 722; e.Ugrave = 722; e.Delta = 612; e.thorn = 500; e.twosuperior = 300; e.Odieresis = 722; e.mu = 500; e.igrave = 278; e.ohungarumlaut = 500; e.Eogonek = 611; e.dcroat = 500; e.threequarters = 750; e.Scedilla = 500; e.lcaron = 300; e.Kcommaaccent = 667; e.Lacute = 556; e.trademark = 980; e.edotaccent = 444; e.Igrave = 333; e.Imacron = 333; e.Lcaron = 611; e.onehalf = 750; e.lessequal = 549; e.ocircumflex = 500; e.ntilde = 500; e.Uhungarumlaut = 722; e.Eacute = 611; e.emacron = 444; e.gbreve = 500; e.onequarter = 750; e.Scaron = 500; e.Scommaaccent = 500; e.Ohungarumlaut = 722; e.degree = 400; e.ograve = 500; e.Ccaron = 667; e.ugrave = 500; e.radical = 453; e.Dcaron = 722; e.rcommaaccent = 389; e.Ntilde = 667; e.otilde = 500; e.Rcommaaccent = 611; e.Lcommaaccent = 556; e.Atilde = 611; e.Aogonek = 611; e.Aring = 611; e.Otilde = 722; e.zdotaccent = 389; e.Ecaron = 611; e.Iogonek = 333; e.kcommaaccent = 444; e.minus = 675; e.Icircumflex = 333; e.ncaron = 500; e.tcommaaccent = 278; e.logicalnot = 675; e.odieresis = 500; e.udieresis = 500; e.notequal = 549; e.gcommaaccent = 500; e.eth = 500; e.zcaron = 389; e.ncommaaccent = 500; e.onesuperior = 300; e.imacron = 278; e.Euro = 500 })); e.ZapfDingbats = (0, r.getLookupTableFactory)((function (e) { e.space = 278; e.a1 = 974; e.a2 = 961; e.a202 = 974; e.a3 = 980; e.a4 = 719; e.a5 = 789; e.a119 = 790; e.a118 = 791; e.a117 = 690; e.a11 = 960; e.a12 = 939; e.a13 = 549; e.a14 = 855; e.a15 = 911; e.a16 = 933; e.a105 = 911; e.a17 = 945; e.a18 = 974; e.a19 = 755; e.a20 = 846; e.a21 = 762; e.a22 = 761; e.a23 = 571; e.a24 = 677; e.a25 = 763; e.a26 = 760; e.a27 = 759; e.a28 = 754; e.a6 = 494; e.a7 = 552; e.a8 = 537; e.a9 = 577; e.a10 = 692; e.a29 = 786; e.a30 = 788; e.a31 = 788; e.a32 = 790; e.a33 = 793; e.a34 = 794; e.a35 = 816; e.a36 = 823; e.a37 = 789; e.a38 = 841; e.a39 = 823; e.a40 = 833; e.a41 = 816; e.a42 = 831; e.a43 = 923; e.a44 = 744; e.a45 = 723; e.a46 = 749; e.a47 = 790; e.a48 = 792; e.a49 = 695; e.a50 = 776; e.a51 = 768; e.a52 = 792; e.a53 = 759; e.a54 = 707; e.a55 = 708; e.a56 = 682; e.a57 = 701; e.a58 = 826; e.a59 = 815; e.a60 = 789; e.a61 = 789; e.a62 = 707; e.a63 = 687; e.a64 = 696; e.a65 = 689; e.a66 = 786; e.a67 = 787; e.a68 = 713; e.a69 = 791; e.a70 = 785; e.a71 = 791; e.a72 = 873; e.a73 = 761; e.a74 = 762; e.a203 = 762; e.a75 = 759; e.a204 = 759; e.a76 = 892; e.a77 = 892; e.a78 = 788; e.a79 = 784; e.a81 = 438; e.a82 = 138; e.a83 = 277; e.a84 = 415; e.a97 = 392; e.a98 = 392; e.a99 = 668; e.a100 = 668; e.a89 = 390; e.a90 = 390; e.a93 = 317; e.a94 = 317; e.a91 = 276; e.a92 = 276; e.a205 = 509; e.a85 = 509; e.a206 = 410; e.a86 = 410; e.a87 = 234; e.a88 = 234; e.a95 = 334; e.a96 = 334; e.a101 = 732; e.a102 = 544; e.a103 = 544; e.a104 = 910; e.a106 = 667; e.a107 = 760; e.a108 = 760; e.a112 = 776; e.a111 = 595; e.a110 = 694; e.a109 = 626; e.a120 = 788; e.a121 = 788; e.a122 = 788; e.a123 = 788; e.a124 = 788; e.a125 = 788; e.a126 = 788; e.a127 = 788; e.a128 = 788; e.a129 = 788; e.a130 = 788; e.a131 = 788; e.a132 = 788; e.a133 = 788; e.a134 = 788; e.a135 = 788; e.a136 = 788; e.a137 = 788; e.a138 = 788; e.a139 = 788; e.a140 = 788; e.a141 = 788; e.a142 = 788; e.a143 = 788; e.a144 = 788; e.a145 = 788; e.a146 = 788; e.a147 = 788; e.a148 = 788; e.a149 = 788; e.a150 = 788; e.a151 = 788; e.a152 = 788; e.a153 = 788; e.a154 = 788; e.a155 = 788; e.a156 = 788; e.a157 = 788; e.a158 = 788; e.a159 = 788; e.a160 = 894; e.a161 = 838; e.a163 = 1016; e.a164 = 458; e.a196 = 748; e.a165 = 924; e.a192 = 748; e.a166 = 918; e.a167 = 927; e.a168 = 928; e.a169 = 928; e.a170 = 834; e.a171 = 873; e.a172 = 828; e.a173 = 924; e.a162 = 924; e.a174 = 917; e.a175 = 930; e.a176 = 931; e.a177 = 463; e.a178 = 883; e.a179 = 836; e.a193 = 836; e.a180 = 867; e.a199 = 867; e.a181 = 696; e.a200 = 696; e.a182 = 874; e.a201 = 874; e.a183 = 760; e.a184 = 946; e.a197 = 771; e.a185 = 865; e.a194 = 771; e.a198 = 888; e.a186 = 967; e.a195 = 888; e.a187 = 831; e.a188 = 873; e.a189 = 927; e.a190 = 970; e.a191 = 918 })) })); t.getMetrics = i }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.isPDFFunction = function (e) { var t; if ("object" != typeof e) return !1; if ((0, i.isDict)(e)) t = e; else { if (!(0, i.isStream)(e)) return !1; t = e.dict } return t.has("FunctionType") }; t.PostScriptCompiler = t.PostScriptEvaluator = t.PDFFunctionFactory = void 0; var r = a(2), i = a(4), n = a(40); t.PDFFunctionFactory = class { constructor({ xref: e, isEvalSupported: t = !0 }) { this.xref = e; this.isEvalSupported = !1 !== t } create(e) { return o.parse({ xref: this.xref, isEvalSupported: this.isEvalSupported, fn: e }) } createFromArray(e) { return o.parseArray({ xref: this.xref, isEvalSupported: this.isEvalSupported, fnObj: e }) } }; function s(e) { if (!Array.isArray(e)) return null; const t = e.length; for (let a = 0; a < t; a++)if ("number" != typeof e[a]) { const a = new Array(t); for (let r = 0; r < t; r++)a[r] = +e[r]; return a } return e } var o = { getSampleArray(e, t, a, r) { var i, n, s = 1; for (i = 0, n = e.length; i < n; i++)s *= e[i]; s *= t; var o = new Array(s), c = 0, l = 0, h = 1 / (2 ** a - 1), u = r.getBytes((s * a + 7) / 8), d = 0; for (i = 0; i < s; i++) { for (; c < a;) { l <<= 8; l |= u[d++]; c += 8 } c -= a; o[i] = (l >> c) * h; l &= (1 << c) - 1 } return o }, getIR({ xref: e, isEvalSupported: t, fn: a }) { var i = a.dict; i || (i = a); var n = [this.constructSampled, null, this.constructInterpolated, this.constructStiched, this.constructPostScript][i.get("FunctionType")]; if (!n) throw new r.FormatError("Unknown type of function"); return n.call(this, { xref: e, isEvalSupported: t, fn: a, dict: i }) }, fromIR({ xref: e, isEvalSupported: t, IR: a }) { switch (a[0]) { case 0: return this.constructSampledFromIR({ xref: e, isEvalSupported: t, IR: a }); case 2: return this.constructInterpolatedFromIR({ xref: e, isEvalSupported: t, IR: a }); case 3: return this.constructStichedFromIR({ xref: e, isEvalSupported: t, IR: a }); default: return this.constructPostScriptFromIR({ xref: e, isEvalSupported: t, IR: a }) } }, parse({ xref: e, isEvalSupported: t, fn: a }) { const r = this.getIR({ xref: e, isEvalSupported: t, fn: a }); return this.fromIR({ xref: e, isEvalSupported: t, IR: r }) }, parseArray({ xref: e, isEvalSupported: t, fnObj: a }) { if (!Array.isArray(a)) return this.parse({ xref: e, isEvalSupported: t, fn: a }); for (var r = [], i = 0, n = a.length; i < n; i++)r.push(this.parse({ xref: e, isEvalSupported: t, fn: e.fetchIfRef(a[i]) })); return function (e, t, a, i) { for (var n = 0, s = r.length; n < s; n++)r[n](e, t, a, i + n) } }, constructSampled({ xref: e, isEvalSupported: t, fn: a, dict: i }) { function n(e) { for (var t = e.length, a = [], r = 0, i = 0; i < t; i += 2) { a[r] = [e[i], e[i + 1]]; ++r } return a } var o = s(i.getArray("Domain")), c = s(i.getArray("Range")); if (!o || !c) throw new r.FormatError("No domain or range"); var l = o.length / 2, h = c.length / 2; o = n(o); c = n(c); var u = s(i.getArray("Size")), d = i.get("BitsPerSample"), f = i.get("Order") || 1; 1 !== f && (0, r.info)("No support for cubic spline interpolation: " + f); var g = s(i.getArray("Encode")); if (g) g = n(g); else { g = []; for (var m = 0; m < l; ++m)g.push([0, u[m] - 1]) } var p = s(i.getArray("Decode")); return [0, l, o, g, p = p ? n(p) : c, this.getSampleArray(u, h, d, a), u, h, 2 ** d - 1, c] }, constructSampledFromIR({ xref: e, isEvalSupported: t, IR: a }) { function r(e, t, a, r, i) { return r + (i - r) / (a - t) * (e - t) } return function (e, t, i, n) { var s, o, c = a[1], l = a[2], h = a[3], u = a[4], d = a[5], f = a[6], g = a[7], m = a[9], p = 1 << c, b = new Float64Array(p), y = new Uint32Array(p); for (o = 0; o < p; o++)b[o] = 1; var v = g, w = 1; for (s = 0; s < c; ++s) { var k = l[s][0], S = l[s][1], C = r(Math.min(Math.max(e[t + s], k), S), k, S, h[s][0], h[s][1]), x = f[s], A = (C = Math.min(Math.max(C, 0), x - 1)) < x - 1 ? Math.floor(C) : C - 1, I = A + 1 - C, F = C - A, T = A * v, E = T + v; for (o = 0; o < p; o++)if (o & w) { b[o] *= F; y[o] += E } else { b[o] *= I; y[o] += T } v *= x; w <<= 1 } for (o = 0; o < g; ++o) { var O = 0; for (s = 0; s < p; s++)O += d[y[s] + o] * b[s]; O = r(O, 0, 1, u[o][0], u[o][1]); i[n + o] = Math.min(Math.max(O, m[o][0]), m[o][1]) } } }, constructInterpolated({ xref: e, isEvalSupported: t, fn: a, dict: r }) { for (var i = s(r.getArray("C0")) || [0], n = s(r.getArray("C1")) || [1], o = r.get("N"), c = i.length, l = [], h = 0; h < c; ++h)l.push(n[h] - i[h]); return [2, i, l, o] }, constructInterpolatedFromIR({ xref: e, isEvalSupported: t, IR: a }) { var r = a[1], i = a[2], n = a[3], s = i.length; return function (e, t, a, o) { for (var c = 1 === n ? e[t] : e[t] ** n, l = 0; l < s; ++l)a[o + l] = r[l] + c * i[l] } }, constructStiched({ xref: e, isEvalSupported: t, fn: a, dict: i }) { var n = s(i.getArray("Domain")); if (!n) throw new r.FormatError("No domain"); if (1 != n.length / 2) throw new r.FormatError("Bad domain for stiched function"); for (var o = i.get("Functions"), c = [], l = 0, h = o.length; l < h; ++l)c.push(this.parse({ xref: e, isEvalSupported: t, fn: e.fetchIfRef(o[l]) })); return [3, n, s(i.getArray("Bounds")), s(i.getArray("Encode")), c] }, constructStichedFromIR({ xref: e, isEvalSupported: t, IR: a }) { var r = a[1], i = a[2], n = a[3], s = a[4], o = new Float32Array(1); return function (e, t, a, c) { for (var l = function (e, t, a) { e > a ? e = a : e < t && (e = t); return e }(e[t], r[0], r[1]), h = 0, u = i.length; h < u && !(l < i[h]); ++h); var d = r[0]; h > 0 && (d = i[h - 1]); var f = r[1]; h < i.length && (f = i[h]); var g = n[2 * h], m = n[2 * h + 1]; o[0] = d === f ? g : g + (l - d) * (m - g) / (f - d); s[h](o, 0, a, c) } }, constructPostScript({ xref: e, isEvalSupported: t, fn: a, dict: i }) { var o = s(i.getArray("Domain")), c = s(i.getArray("Range")); if (!o) throw new r.FormatError("No domain."); if (!c) throw new r.FormatError("No range."); var l = new n.PostScriptLexer(a); return [4, o, c, new n.PostScriptParser(l).parse()] }, constructPostScriptFromIR({ xref: e, isEvalSupported: t, IR: a }) { var i = a[1], n = a[2], s = a[3]; if (t && r.IsEvalSupportedCached.value) { const e = (new h).compile(s, i, n); if (e) return new Function("src", "srcOffset", "dest", "destOffset", e) } (0, r.info)("Unable to compile PS function"); var o = n.length >> 1, c = i.length >> 1, u = new l(s), d = Object.create(null), f = 8192, g = new Float32Array(c); return function (e, t, a, r) { var i, s, l = "", h = g; for (i = 0; i < c; i++) { s = e[t + i]; h[i] = s; l += s + "_" } var m = d[l]; if (void 0 === m) { var p = new Float32Array(o), b = u.execute(h), y = b.length - o; for (i = 0; i < o; i++) { s = b[y + i]; var v = n[2 * i]; (s < v || s > (v = n[2 * i + 1])) && (s = v); p[i] = s } if (f > 0) { f--; d[l] = p } a.set(p, r) } else a.set(m, r) } } }; var c = function () { function e(e) { this.stack = e ? Array.prototype.slice.call(e, 0) : [] } e.prototype = { push: function (e) { if (this.stack.length >= 100) throw new Error("PostScript function stack overflow."); this.stack.push(e) }, pop: function () { if (this.stack.length <= 0) throw new Error("PostScript function stack underflow."); return this.stack.pop() }, copy: function (e) { if (this.stack.length + e >= 100) throw new Error("PostScript function stack overflow."); for (var t = this.stack, a = t.length - e, r = e - 1; r >= 0; r--, a++)t.push(t[a]) }, index: function (e) { this.push(this.stack[this.stack.length - e - 1]) }, roll: function (e, t) { var a, r, i, n = this.stack, s = n.length - e, o = n.length - 1, c = s + (t - Math.floor(t / e) * e); for (a = s, r = o; a < r; a++, r--) { i = n[a]; n[a] = n[r]; n[r] = i } for (a = s, r = c - 1; a < r; a++, r--) { i = n[a]; n[a] = n[r]; n[r] = i } for (a = c, r = o; a < r; a++, r--) { i = n[a]; n[a] = n[r]; n[r] = i } } }; return e }(), l = function () { function e(e) { this.operators = e } e.prototype = { execute: function (e) { for (var t, a, i, n = new c(e), s = 0, o = this.operators, l = o.length; s < l;)if ("number" != typeof (t = o[s++])) switch (t) { case "jz": i = n.pop(); (a = n.pop()) || (s = i); break; case "j": s = a = n.pop(); break; case "abs": a = n.pop(); n.push(Math.abs(a)); break; case "add": i = n.pop(); a = n.pop(); n.push(a + i); break; case "and": i = n.pop(); a = n.pop(); (0, r.isBool)(a) && (0, r.isBool)(i) ? n.push(a && i) : n.push(a & i); break; case "atan": a = n.pop(); n.push(Math.atan(a)); break; case "bitshift": i = n.pop(); (a = n.pop()) > 0 ? n.push(a << i) : n.push(a >> i); break; case "ceiling": a = n.pop(); n.push(Math.ceil(a)); break; case "copy": a = n.pop(); n.copy(a); break; case "cos": a = n.pop(); n.push(Math.cos(a)); break; case "cvi": a = 0 | n.pop(); n.push(a); break; case "cvr": break; case "div": i = n.pop(); a = n.pop(); n.push(a / i); break; case "dup": n.copy(1); break; case "eq": i = n.pop(); a = n.pop(); n.push(a === i); break; case "exch": n.roll(2, 1); break; case "exp": i = n.pop(); a = n.pop(); n.push(a ** i); break; case "false": n.push(!1); break; case "floor": a = n.pop(); n.push(Math.floor(a)); break; case "ge": i = n.pop(); a = n.pop(); n.push(a >= i); break; case "gt": i = n.pop(); a = n.pop(); n.push(a > i); break; case "idiv": i = n.pop(); a = n.pop(); n.push(a / i | 0); break; case "index": a = n.pop(); n.index(a); break; case "le": i = n.pop(); a = n.pop(); n.push(a <= i); break; case "ln": a = n.pop(); n.push(Math.log(a)); break; case "log": a = n.pop(); n.push(Math.log(a) / Math.LN10); break; case "lt": i = n.pop(); a = n.pop(); n.push(a < i); break; case "mod": i = n.pop(); a = n.pop(); n.push(a % i); break; case "mul": i = n.pop(); a = n.pop(); n.push(a * i); break; case "ne": i = n.pop(); a = n.pop(); n.push(a !== i); break; case "neg": a = n.pop(); n.push(-a); break; case "not": a = n.pop(); (0, r.isBool)(a) ? n.push(!a) : n.push(~a); break; case "or": i = n.pop(); a = n.pop(); (0, r.isBool)(a) && (0, r.isBool)(i) ? n.push(a || i) : n.push(a | i); break; case "pop": n.pop(); break; case "roll": i = n.pop(); a = n.pop(); n.roll(a, i); break; case "round": a = n.pop(); n.push(Math.round(a)); break; case "sin": a = n.pop(); n.push(Math.sin(a)); break; case "sqrt": a = n.pop(); n.push(Math.sqrt(a)); break; case "sub": i = n.pop(); a = n.pop(); n.push(a - i); break; case "true": n.push(!0); break; case "truncate": a = (a = n.pop()) < 0 ? Math.ceil(a) : Math.floor(a); n.push(a); break; case "xor": i = n.pop(); a = n.pop(); (0, r.isBool)(a) && (0, r.isBool)(i) ? n.push(a !== i) : n.push(a ^ i); break; default: throw new r.FormatError(`Unknown operator ${t}`) } else n.push(t); return n.stack } }; return e }(); t.PostScriptEvaluator = l; var h = function () { function e(e) { this.type = e } e.prototype.visit = function (e) { (0, r.unreachable)("abstract method") }; function t(t, a, r) { e.call(this, "args"); this.index = t; this.min = a; this.max = r } t.prototype = Object.create(e.prototype); t.prototype.visit = function (e) { e.visitArgument(this) }; function a(t) { e.call(this, "literal"); this.number = t; this.min = t; this.max = t } a.prototype = Object.create(e.prototype); a.prototype.visit = function (e) { e.visitLiteral(this) }; function i(t, a, r, i, n) { e.call(this, "binary"); this.op = t; this.arg1 = a; this.arg2 = r; this.min = i; this.max = n } i.prototype = Object.create(e.prototype); i.prototype.visit = function (e) { e.visitBinaryOperation(this) }; function n(t, a) { e.call(this, "max"); this.arg = t; this.min = t.min; this.max = a } n.prototype = Object.create(e.prototype); n.prototype.visit = function (e) { e.visitMin(this) }; function s(t, a, r) { e.call(this, "var"); this.index = t; this.min = a; this.max = r } s.prototype = Object.create(e.prototype); s.prototype.visit = function (e) { e.visitVariable(this) }; function o(t, a) { e.call(this, "definition"); this.variable = t; this.arg = a } o.prototype = Object.create(e.prototype); o.prototype.visit = function (e) { e.visitVariableDefinition(this) }; function c() { this.parts = [] } c.prototype = { visitArgument(e) { this.parts.push("Math.max(", e.min, ", Math.min(", e.max, ", src[srcOffset + ", e.index, "]))") }, visitVariable(e) { this.parts.push("v", e.index) }, visitLiteral(e) { this.parts.push(e.number) }, visitBinaryOperation(e) { this.parts.push("("); e.arg1.visit(this); this.parts.push(" ", e.op, " "); e.arg2.visit(this); this.parts.push(")") }, visitVariableDefinition(e) { this.parts.push("var "); e.variable.visit(this); this.parts.push(" = "); e.arg.visit(this); this.parts.push(";") }, visitMin(e) { this.parts.push("Math.min("); e.arg.visit(this); this.parts.push(", ", e.max, ")") }, toString() { return this.parts.join("") } }; function l(e, t) { return "literal" === t.type && 0 === t.number ? e : "literal" === e.type && 0 === e.number ? t : "literal" === t.type && "literal" === e.type ? new a(e.number + t.number) : new i("+", e, t, e.min + t.min, e.max + t.max) } function h(e, t) { if ("literal" === t.type) { if (0 === t.number) return new a(0); if (1 === t.number) return e; if ("literal" === e.type) return new a(e.number * t.number) } if ("literal" === e.type) { if (0 === e.number) return new a(0); if (1 === e.number) return t } return new i("*", e, t, Math.min(e.min * t.min, e.min * t.max, e.max * t.min, e.max * t.max), Math.max(e.min * t.min, e.min * t.max, e.max * t.min, e.max * t.max)) } function u(e, t) { if ("literal" === t.type) { if (0 === t.number) return e; if ("literal" === e.type) return new a(e.number - t.number) } return "binary" === t.type && "-" === t.op && "literal" === e.type && 1 === e.number && "literal" === t.arg1.type && 1 === t.arg1.number ? t.arg2 : new i("-", e, t, e.min - t.max, e.max - t.min) } function d(e, t) { return e.min >= t ? new a(t) : e.max <= t ? e : new n(e, t) } function f() { } f.prototype = { compile: function (e, r, i) { var n, f, g, m, p, b, y, v, w, k, S = [], C = [], x = r.length >> 1, A = i.length >> 1, I = 0; for (n = 0; n < x; n++)S.push(new t(n, r[2 * n], r[2 * n + 1])); for (n = 0, f = e.length; n < f; n++)if ("number" != typeof (k = e[n])) switch (k) { case "add": if (S.length < 2) return null; b = S.pop(); p = S.pop(); S.push(l(p, b)); break; case "cvr": if (S.length < 1) return null; break; case "mul": if (S.length < 2) return null; b = S.pop(); p = S.pop(); S.push(h(p, b)); break; case "sub": if (S.length < 2) return null; b = S.pop(); p = S.pop(); S.push(u(p, b)); break; case "exch": if (S.length < 2) return null; y = S.pop(); v = S.pop(); S.push(y, v); break; case "pop": if (S.length < 1) return null; S.pop(); break; case "index": if (S.length < 1) return null; if ("literal" !== (p = S.pop()).type) return null; if ((g = p.number) < 0 || !Number.isInteger(g) || S.length < g) return null; if ("literal" === (y = S[S.length - g - 1]).type || "var" === y.type) { S.push(y); break } w = new s(I++, y.min, y.max); S[S.length - g - 1] = w; S.push(w); C.push(new o(w, y)); break; case "dup": if (S.length < 1) return null; if ("number" == typeof e[n + 1] && "gt" === e[n + 2] && e[n + 3] === n + 7 && "jz" === e[n + 4] && "pop" === e[n + 5] && e[n + 6] === e[n + 1]) { p = S.pop(); S.push(d(p, e[n + 1])); n += 6; break } if ("literal" === (y = S[S.length - 1]).type || "var" === y.type) { S.push(y); break } w = new s(I++, y.min, y.max); S[S.length - 1] = w; S.push(w); C.push(new o(w, y)); break; case "roll": if (S.length < 2) return null; b = S.pop(); p = S.pop(); if ("literal" !== b.type || "literal" !== p.type) return null; m = b.number; if ((g = p.number) <= 0 || !Number.isInteger(g) || !Number.isInteger(m) || S.length < g) return null; if (0 === (m = (m % g + g) % g)) break; Array.prototype.push.apply(S, S.splice(S.length - g, g - m)); break; default: return null } else S.push(new a(k)); if (S.length !== A) return null; var F = []; C.forEach((function (e) { var t = new c; e.visit(t); F.push(t.toString()) })); S.forEach((function (e, t) { var a = new c; e.visit(a); var r = i[2 * t], n = i[2 * t + 1], s = [a.toString()]; if (r > e.min) { s.unshift("Math.max(", r, ", "); s.push(")") } if (n < e.max) { s.unshift("Math.min(", n, ", "); s.push(")") } s.unshift("dest[destOffset + ", t, "] = "); s.push(";"); F.push(s.join("")) })); return F.join("\n") } }; return f }(); t.PostScriptCompiler = h }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.PostScriptParser = t.PostScriptLexer = void 0; var r = a(2), i = a(4), n = a(7); t.PostScriptParser = class { constructor(e) { this.lexer = e; this.operators = []; this.token = null; this.prev = null } nextToken() { this.prev = this.token; this.token = this.lexer.getToken() } accept(e) { if (this.token.type === e) { this.nextToken(); return !0 } return !1 } expect(e) { if (this.accept(e)) return !0; throw new r.FormatError(`Unexpected symbol: found ${this.token.type} expected ${e}.`) } parse() { this.nextToken(); this.expect(s.LBRACE); this.parseBlock(); this.expect(s.RBRACE); return this.operators } parseBlock() { for (; ;)if (this.accept(s.NUMBER)) this.operators.push(this.prev.value); else if (this.accept(s.OPERATOR)) this.operators.push(this.prev.value); else { if (!this.accept(s.LBRACE)) return; this.parseCondition() } } parseCondition() { const e = this.operators.length; this.operators.push(null, null); this.parseBlock(); this.expect(s.RBRACE); if (this.accept(s.IF)) { this.operators[e] = this.operators.length; this.operators[e + 1] = "jz" } else { if (!this.accept(s.LBRACE)) throw new r.FormatError("PS Function: error parsing conditional."); { const t = this.operators.length; this.operators.push(null, null); const a = this.operators.length; this.parseBlock(); this.expect(s.RBRACE); this.expect(s.IFELSE); this.operators[t] = this.operators.length; this.operators[t + 1] = "j"; this.operators[e] = a; this.operators[e + 1] = "jz" } } } }; const s = { LBRACE: 0, RBRACE: 1, NUMBER: 2, OPERATOR: 3, IF: 4, IFELSE: 5 }, o = function () { const e = Object.create(null); class t { constructor(e, t) { this.type = e; this.value = t } static getOperator(a) { const r = e[a]; return r || (e[a] = new t(s.OPERATOR, a)) } static get LBRACE() { return (0, r.shadow)(this, "LBRACE", new t(s.LBRACE, "{")) } static get RBRACE() { return (0, r.shadow)(this, "RBRACE", new t(s.RBRACE, "}")) } static get IF() { return (0, r.shadow)(this, "IF", new t(s.IF, "IF")) } static get IFELSE() { return (0, r.shadow)(this, "IFELSE", new t(s.IFELSE, "IFELSE")) } } return t }(); t.PostScriptLexer = class { constructor(e) { this.stream = e; this.nextChar(); this.strBuf = [] } nextChar() { return this.currentChar = this.stream.getByte() } getToken() { let e = !1, t = this.currentChar; for (; ;) { if (t < 0) return i.EOF; if (e) 10 !== t && 13 !== t || (e = !1); else if (37 === t) e = !0; else if (!(0, n.isWhiteSpace)(t)) break; t = this.nextChar() } switch (0 | t) { case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 43: case 45: case 46: return new o(s.NUMBER, this.getNumber()); case 123: this.nextChar(); return o.LBRACE; case 125: this.nextChar(); return o.RBRACE }const a = this.strBuf; a.length = 0; a[0] = String.fromCharCode(t); for (; (t = this.nextChar()) >= 0 && (t >= 65 && t <= 90 || t >= 97 && t <= 122);)a.push(String.fromCharCode(t)); const r = a.join(""); switch (r.toLowerCase()) { case "if": return o.IF; case "ifelse": return o.IFELSE; default: return o.getOperator(r) } } getNumber() { let e = this.currentChar; const t = this.strBuf; t.length = 0; t[0] = String.fromCharCode(e); for (; (e = this.nextChar()) >= 0 && (e >= 48 && e <= 57 || 45 === e || 46 === e);)t.push(String.fromCharCode(e)); const a = parseFloat(t.join("")); if (isNaN(a)) throw new r.FormatError(`Invalid floating point number: ${a}`); return a } } }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.MurmurHash3_64 = void 0; var r = a(2); t.MurmurHash3_64 = class { constructor(e) { this.h1 = e ? 4294967295 & e : 3285377520; this.h2 = e ? 4294967295 & e : 3285377520 } update(e) { let t, a; if ((0, r.isString)(e)) { t = new Uint8Array(2 * e.length); a = 0; for (let r = 0, i = e.length; r < i; r++) { const i = e.charCodeAt(r); if (i <= 255) t[a++] = i; else { t[a++] = i >>> 8; t[a++] = 255 & i } } } else { if (!(0, r.isArrayBuffer)(e)) throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array."); t = e; a = t.byteLength } const i = a >> 2, n = a - 4 * i, s = new Uint32Array(t.buffer, 0, i); let o = 0, c = 0, l = this.h1, h = this.h2; const u = 3432918353, d = 461845907; for (let e = 0; e < i; e++)if (1 & e) { o = s[e]; o = o * u & 4294901760 | 11601 * o & 65535; o = o << 15 | o >>> 17; o = o * d & 4294901760 | 13715 * o & 65535; l ^= o; l = l << 13 | l >>> 19; l = 5 * l + 3864292196 } else { c = s[e]; c = c * u & 4294901760 | 11601 * c & 65535; c = c << 15 | c >>> 17; c = c * d & 4294901760 | 13715 * c & 65535; h ^= c; h = h << 13 | h >>> 19; h = 5 * h + 3864292196 } o = 0; switch (n) { case 3: o ^= t[4 * i + 2] << 16; case 2: o ^= t[4 * i + 1] << 8; case 1: o ^= t[4 * i]; o = o * u & 4294901760 | 11601 * o & 65535; o = o << 15 | o >>> 17; o = o * d & 4294901760 | 13715 * o & 65535; 1 & i ? l ^= o : h ^= o }this.h1 = l; this.h2 = h } hexdigest() { let e = this.h1, t = this.h2; e ^= t >>> 1; e = 3981806797 * e & 4294901760 | 36045 * e & 65535; t = 4283543511 * t & 4294901760 | (2950163797 * (t << 16 | e >>> 16) & 4294901760) >>> 16; e ^= t >>> 1; e = 444984403 * e & 4294901760 | 60499 * e & 65535; t = 3301882366 * t & 4294901760 | (3120437893 * (t << 16 | e >>> 16) & 4294901760) >>> 16; e ^= t >>> 1; const a = (e >>> 0).toString(16), r = (t >>> 0).toString(16); return a.padStart(8, "0") + r.padStart(8, "0") } } }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.NativeImageDecoder = void 0; var r = a(22), i = a(17), n = a(11); class s { constructor({ xref: e, resources: t, handler: a, forceDataSchema: r = !1, pdfFunctionFactory: i }) { this.xref = e; this.resources = t; this.handler = a; this.forceDataSchema = r; this.pdfFunctionFactory = i } canDecode(e) { return e instanceof i.JpegStream && s.isDecodable(e, this.xref, this.resources, this.pdfFunctionFactory) && e.maybeValidDimensions } decode(e) { const t = e.dict; let a = t.get("ColorSpace", "CS"); a = r.ColorSpace.parse(a, this.xref, this.resources, this.pdfFunctionFactory); return this.handler.sendWithPromise("JpegDecode", [e.getIR(this.forceDataSchema), a.numComps]).then((function ({ data: e, width: a, height: r }) { return new n.Stream(e, 0, e.length, t) })) } static isSupported(e, t, a, i) { const n = e.dict; if (n.has("DecodeParms") || n.has("DP")) return !1; const s = r.ColorSpace.parse(n.get("ColorSpace", "CS"), t, a, i); return ("DeviceGray" === s.name || "DeviceRGB" === s.name) && s.isDefaultDecode(n.getArray("Decode", "D")) } static isDecodable(e, t, a, i) { const n = e.dict; if (n.has("DecodeParms") || n.has("DP")) return !1; const s = r.ColorSpace.parse(n.get("ColorSpace", "CS"), t, a, i), o = n.get("BitsPerComponent", "BPC") || 1; return (1 === s.numComps || 3 === s.numComps) && s.isDefaultDecode(n.getArray("Decode", "D"), o) } } t.NativeImageDecoder = s }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.PDFImage = void 0; var r = a(2), i = a(4), n = a(22), s = a(11), o = a(17), c = a(20), l = function () { function e(e, t) { return t && t.canDecode(e) ? t.decode(e).catch(t => { (0, r.warn)("Native image decoding failed -- trying to recover: " + (t && t.message)); return e }) : Promise.resolve(e) } function t(e, t, a, r) { (e = t + e * a) < 0 ? e = 0 : e > r && (e = r); return e } function a(e, t, a, r, i, n) { var s = i * n; let o; o = t <= 8 ? new Uint8Array(s) : t <= 16 ? new Uint16Array(s) : new Uint32Array(s); var c, l, h, u, d = a / i, f = r / n, g = 0, m = new Uint16Array(i), p = a; for (c = 0; c < i; c++)m[c] = Math.floor(c * d); for (c = 0; c < n; c++) { h = Math.floor(c * f) * p; for (l = 0; l < i; l++) { u = h + m[l]; o[g++] = e[u] } } return o } function l({ xref: e, res: t, image: a, isInline: s = !1, smask: o = null, mask: h = null, isMask: u = !1, pdfFunctionFactory: d }) { this.image = a; var f = a.dict; const g = f.get("Filter"); if ((0, i.isName)(g)) switch (g.name) { case "JPXDecode": var m = new c.JpxImage; m.parseImageProperties(a.stream); a.stream.reset(); a.width = m.width; a.height = m.height; a.bitsPerComponent = m.bitsPerComponent; a.numComps = m.componentsCount; break; case "JBIG2Decode": a.bitsPerComponent = 1; a.numComps = 1 }let p = f.get("Width", "W"), b = f.get("Height", "H"); if (Number.isInteger(a.width) && a.width > 0 && Number.isInteger(a.height) && a.height > 0 && (a.width !== p || a.height !== b)) { (0, r.warn)("PDFImage - using the Width/Height of the image data, rather than the image dictionary."); p = a.width; b = a.height } if (p < 1 || b < 1) throw new r.FormatError(`Invalid image width: ${p} or height: ${b}`); this.width = p; this.height = b; this.interpolate = f.get("Interpolate", "I") || !1; this.imageMask = f.get("ImageMask", "IM") || !1; this.matte = f.get("Matte") || !1; var y = a.bitsPerComponent; if (!y && !(y = f.get("BitsPerComponent", "BPC"))) { if (!this.imageMask) throw new r.FormatError(`Bits per component missing in image: ${this.imageMask}`); y = 1 } this.bpc = y; if (!this.imageMask) { var v = f.get("ColorSpace", "CS"); if (!v) { (0, r.info)("JPX images (which do not require color spaces)"); switch (a.numComps) { case 1: v = i.Name.get("DeviceGray"); break; case 3: v = i.Name.get("DeviceRGB"); break; case 4: v = i.Name.get("DeviceCMYK"); break; default: throw new Error(`JPX images with ${a.numComps} ` + "color components not supported.") } } const o = s ? t : null; this.colorSpace = n.ColorSpace.parse(v, e, o, d); this.numComps = this.colorSpace.numComps } this.decode = f.getArray("Decode", "D"); this.needsDecode = !1; if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, y) || u && !n.ColorSpace.isDefaultDecode(this.decode, 1))) { this.needsDecode = !0; var w = (1 << y) - 1; this.decodeCoefficients = []; this.decodeAddends = []; const e = this.colorSpace && "Indexed" === this.colorSpace.name; for (var k = 0, S = 0; k < this.decode.length; k += 2, ++S) { var C = this.decode[k], x = this.decode[k + 1]; this.decodeCoefficients[S] = e ? (x - C) / w : x - C; this.decodeAddends[S] = e ? C : w * C } } if (o) this.smask = new l({ xref: e, res: t, image: o, isInline: s, pdfFunctionFactory: d }); else if (h) if ((0, i.isStream)(h)) { h.dict.get("ImageMask", "IM") ? this.mask = new l({ xref: e, res: t, image: h, isInline: s, isMask: !0, pdfFunctionFactory: d }) : (0, r.warn)("Ignoring /Mask in image without /ImageMask.") } else this.mask = h } l.buildImage = function ({ handler: t, xref: a, res: n, image: s, isInline: o = !1, nativeDecoder: c = null, pdfFunctionFactory: h }) { var u, d, f = e(s, c), g = s.dict.get("SMask"), m = s.dict.get("Mask"); if (g) { u = e(g, c); d = Promise.resolve(null) } else { u = Promise.resolve(null); if (m) if ((0, i.isStream)(m)) d = e(m, c); else if (Array.isArray(m)) d = Promise.resolve(m); else { (0, r.warn)("Unsupported mask format."); d = Promise.resolve(null) } else d = Promise.resolve(null) } return Promise.all([f, u, d]).then((function ([e, t, r]) { return new l({ xref: a, res: n, image: e, isInline: o, smask: t, mask: r, pdfFunctionFactory: h }) })) }; l.createMask = function ({ imgArray: e, width: t, height: a, imageIsFromDecodeStream: r, inverseDecode: i }) { var n, s, o = (t + 7 >> 3) * a, c = e.byteLength; if (!r || i && !(o === c)) if (i) { (n = new Uint8ClampedArray(o)).set(e); for (s = c; s < o; s++)n[s] = 255 } else (n = new Uint8ClampedArray(c)).set(e); else n = e; if (i) for (s = 0; s < c; s++)n[s] ^= 255; return { data: n, width: t, height: a } }; l.prototype = { get drawWidth() { return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0) }, get drawHeight() { return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0) }, decodeBuffer(e) { var a, r, i = this.bpc, n = this.numComps, s = this.decodeAddends, o = this.decodeCoefficients, c = (1 << i) - 1; if (1 !== i) { var l = 0; for (a = 0, r = this.width * this.height; a < r; a++)for (var h = 0; h < n; h++) { e[l] = t(e[l], s[h], o[h], c); l++ } } else for (a = 0, r = e.length; a < r; a++)e[a] = +!e[a] }, getComponents(e) { var t = this.bpc; if (8 === t) return e; var a = this.width, r = this.height, i = this.numComps, n = a * r * i, s = 0; let o; o = t <= 8 ? new Uint8Array(n) : t <= 16 ? new Uint16Array(n) : new Uint32Array(n); var c, l, h = a * i, u = (1 << t) - 1, d = 0; if (1 === t) for (var f, g, m, p = 0; p < r; p++) { g = d + (-8 & h); m = d + h; for (; d < g;) { l = e[s++]; o[d] = l >> 7 & 1; o[d + 1] = l >> 6 & 1; o[d + 2] = l >> 5 & 1; o[d + 3] = l >> 4 & 1; o[d + 4] = l >> 3 & 1; o[d + 5] = l >> 2 & 1; o[d + 6] = l >> 1 & 1; o[d + 7] = 1 & l; d += 8 } if (d < m) { l = e[s++]; f = 128; for (; d < m;) { o[d++] = +!!(l & f); f >>= 1 } } } else { var b = 0; l = 0; for (d = 0, c = n; d < c; ++d) { if (d % h == 0) { l = 0; b = 0 } for (; b < t;) { l = l << 8 | e[s++]; b += 8 } var y = b - t; let a = l >> y; a < 0 ? a = 0 : a > u && (a = u); o[d] = a; l &= (1 << y) - 1; b = y } } return o }, fillOpacity(e, t, i, n, s) { var o, c, h, u, d, f, g = this.smask, m = this.mask; if (g) { c = g.width; h = g.height; o = new Uint8ClampedArray(c * h); g.fillGrayBuffer(o); c === t && h === i || (o = a(o, g.bpc, c, h, t, i)) } else if (m) if (m instanceof l) { c = m.width; h = m.height; o = new Uint8ClampedArray(c * h); m.numComps = 1; m.fillGrayBuffer(o); for (u = 0, d = c * h; u < d; ++u)o[u] = 255 - o[u]; c === t && h === i || (o = a(o, m.bpc, c, h, t, i)) } else { if (!Array.isArray(m)) throw new r.FormatError("Unknown mask format."); o = new Uint8ClampedArray(t * i); var p = this.numComps; for (u = 0, d = t * i; u < d; ++u) { var b = 0, y = u * p; for (f = 0; f < p; ++f) { var v = s[y + f], w = 2 * f; if (v < m[w] || v > m[w + 1]) { b = 255; break } } o[u] = b } } if (o) for (u = 0, f = 3, d = t * n; u < d; ++u, f += 4)e[f] = o[u]; else for (u = 0, f = 3, d = t * n; u < d; ++u, f += 4)e[f] = 255 }, undoPreblend(e, t, a) { var r = this.smask && this.smask.matte; if (r) for (var i = this.colorSpace.getRgb(r, 0), n = i[0], s = i[1], o = i[2], c = t * a * 4, l = 0; l < c; l += 4) { var h = e[l + 3]; if (0 !== h) { var u = 255 / h; e[l] = (e[l] - n) * u + n; e[l + 1] = (e[l + 1] - s) * u + s; e[l + 2] = (e[l + 2] - o) * u + o } else { e[l] = 255; e[l + 1] = 255; e[l + 2] = 255 } } }, createImageData(e = !1) { var t, a = this.drawWidth, i = this.drawHeight, n = { width: a, height: i, kind: 0, data: null }, c = this.numComps, l = this.width, h = this.height, u = this.bpc, d = l * c * u + 7 >> 3; if (!e) { var f; "DeviceGray" === this.colorSpace.name && 1 === u ? f = r.ImageKind.GRAYSCALE_1BPP : "DeviceRGB" !== this.colorSpace.name || 8 !== u || this.needsDecode || (f = r.ImageKind.RGB_24BPP); if (f && !this.smask && !this.mask && a === l && i === h) { n.kind = f; t = this.getImageBytes(h * d); if (this.image instanceof s.DecodeStream) n.data = t; else { var g = new Uint8ClampedArray(t.length); g.set(t); n.data = g } if (this.needsDecode) { (0, r.assert)(f === r.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale."); for (var m = n.data, p = 0, b = m.length; p < b; p++)m[p] ^= 255 } return n } if (this.image instanceof o.JpegStream && !this.smask && !this.mask) { let e = h * d; switch (this.colorSpace.name) { case "DeviceGray": e *= 3; case "DeviceRGB": case "DeviceCMYK": n.kind = r.ImageKind.RGB_24BPP; n.data = this.getImageBytes(e, a, i, !0); return n } } } var y, v, w = 0 | (t = this.getImageBytes(h * d)).length / d * i / h, k = this.getComponents(t); if (e || this.smask || this.mask) { n.kind = r.ImageKind.RGBA_32BPP; n.data = new Uint8ClampedArray(a * i * 4); y = 1; v = !0; this.fillOpacity(n.data, a, i, w, k) } else { n.kind = r.ImageKind.RGB_24BPP; n.data = new Uint8ClampedArray(a * i * 3); y = 0; v = !1 } this.needsDecode && this.decodeBuffer(k); this.colorSpace.fillRgb(n.data, l, h, a, i, w, u, k, y); v && this.undoPreblend(n.data, a, w); return n }, fillGrayBuffer(e) { var t = this.numComps; if (1 !== t) throw new r.FormatError(`Reading gray scale from a color image: ${t}`); var a, i, n = this.width, s = this.height, o = this.bpc, c = n * t * o + 7 >> 3, l = this.getImageBytes(s * c), h = this.getComponents(l); if (1 !== o) { this.needsDecode && this.decodeBuffer(h); i = n * s; var u = 255 / ((1 << o) - 1); for (a = 0; a < i; ++a)e[a] = u * h[a] } else { i = n * s; if (this.needsDecode) for (a = 0; a < i; ++a)e[a] = h[a] - 1 & 255; else for (a = 0; a < i; ++a)e[a] = 255 & -h[a] } }, getImageBytes(e, t, a, r = !1) { this.image.reset(); this.image.drawWidth = t || this.width; this.image.drawHeight = a || this.height; this.image.forceRGB = !!r; return this.image.getBytes(e, !0) } }; return l }(); t.PDFImage = l }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.isNodeJS = void 0; const r = "object" == typeof process && process + "" == "[object process]" && !process.versions.nw && !process.versions.electron; t.isNodeJS = r }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.MessageHandler = void 0; var r = a(2); const i = 1, n = 2, s = 1, o = 2, c = 3, l = 4, h = 5, u = 6, d = 7, f = 8; function g(e) { if ("object" != typeof e || null === e) return e; switch (e.name) { case "AbortException": return new r.AbortException(e.message); case "MissingPDFException": return new r.MissingPDFException(e.message); case "UnexpectedResponseException": return new r.UnexpectedResponseException(e.message, e.status); case "UnknownErrorException": return new r.UnknownErrorException(e.message, e.details); default: return new r.UnknownErrorException(e.message, e.toString()) } } t.MessageHandler = class { constructor(e, t, a) { this.sourceName = e; this.targetName = t; this.comObj = a; this.callbackId = 1; this.streamId = 1; this.postMessageTransfers = !0; this.streamSinks = Object.create(null); this.streamControllers = Object.create(null); this.callbackCapabilities = Object.create(null); this.actionHandler = Object.create(null); this._onComObjOnMessage = e => { const t = e.data; if (t.targetName !== this.sourceName) return; if (t.stream) { this._processStreamMessage(t); return } if (t.callback) { const e = t.callbackId, a = this.callbackCapabilities[e]; if (!a) throw new Error(`Cannot resolve callback ${e}`); delete this.callbackCapabilities[e]; if (t.callback === i) a.resolve(t.data); else { if (t.callback !== n) throw new Error("Unexpected callback case"); a.reject(g(t.reason)) } return } const r = this.actionHandler[t.action]; if (!r) throw new Error(`Unknown action from worker: ${t.action}`); if (t.callbackId) { const e = this.sourceName, s = t.sourceName; new Promise((function (e) { e(r(t.data)) })).then((function (r) { a.postMessage({ sourceName: e, targetName: s, callback: i, callbackId: t.callbackId, data: r }) }), (function (r) { a.postMessage({ sourceName: e, targetName: s, callback: n, callbackId: t.callbackId, reason: g(r) }) })) } else t.streamId ? this._createStreamSink(t) : r(t.data) }; a.addEventListener("message", this._onComObjOnMessage) } on(e, t) { const a = this.actionHandler; if (a[e]) throw new Error(`There is already an actionName called "${e}"`); a[e] = t } send(e, t, a) { this._postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: e, data: t }, a) } sendWithPromise(e, t, a) { const i = this.callbackId++, n = (0, r.createPromiseCapability)(); this.callbackCapabilities[i] = n; try { this._postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: e, callbackId: i, data: t }, a) } catch (e) { n.reject(e) } return n.promise } sendWithStream(e, t, a, i) { const n = this.streamId++, o = this.sourceName, c = this.targetName, l = this.comObj; return new ReadableStream({ start: a => { const s = (0, r.createPromiseCapability)(); this.streamControllers[n] = { controller: a, startCall: s, pullCall: null, cancelCall: null, isClosed: !1 }; this._postMessage({ sourceName: o, targetName: c, action: e, streamId: n, data: t, desiredSize: a.desiredSize }, i); return s.promise }, pull: e => { const t = (0, r.createPromiseCapability)(); this.streamControllers[n].pullCall = t; l.postMessage({ sourceName: o, targetName: c, stream: u, streamId: n, desiredSize: e.desiredSize }); return t.promise }, cancel: e => { (0, r.assert)(e instanceof Error, "cancel must have a valid reason"); const t = (0, r.createPromiseCapability)(); this.streamControllers[n].cancelCall = t; this.streamControllers[n].isClosed = !0; l.postMessage({ sourceName: o, targetName: c, stream: s, streamId: n, reason: g(e) }); return t.promise } }, a) } _createStreamSink(e) { const t = this, a = this.actionHandler[e.action], i = e.streamId, n = this.sourceName, s = e.sourceName, o = this.comObj, u = { enqueue(e, a = 1, o) { if (this.isCancelled) return; const c = this.desiredSize; this.desiredSize -= a; if (c > 0 && this.desiredSize <= 0) { this.sinkCapability = (0, r.createPromiseCapability)(); this.ready = this.sinkCapability.promise } t._postMessage({ sourceName: n, targetName: s, stream: l, streamId: i, chunk: e }, o) }, close() { if (!this.isCancelled) { this.isCancelled = !0; o.postMessage({ sourceName: n, targetName: s, stream: c, streamId: i }); delete t.streamSinks[i] } }, error(e) { (0, r.assert)(e instanceof Error, "error must have a valid reason"); if (!this.isCancelled) { this.isCancelled = !0; o.postMessage({ sourceName: n, targetName: s, stream: h, streamId: i, reason: g(e) }) } }, sinkCapability: (0, r.createPromiseCapability)(), onPull: null, onCancel: null, isCancelled: !1, desiredSize: e.desiredSize, ready: null }; u.sinkCapability.resolve(); u.ready = u.sinkCapability.promise; this.streamSinks[i] = u; new Promise((function (t) { t(a(e.data, u)) })).then((function () { o.postMessage({ sourceName: n, targetName: s, stream: f, streamId: i, success: !0 }) }), (function (e) { o.postMessage({ sourceName: n, targetName: s, stream: f, streamId: i, reason: g(e) }) })) } _processStreamMessage(e) { const t = e.streamId, a = this.sourceName, i = e.sourceName, n = this.comObj; switch (e.stream) { case f: e.success ? this.streamControllers[t].startCall.resolve() : this.streamControllers[t].startCall.reject(g(e.reason)); break; case d: e.success ? this.streamControllers[t].pullCall.resolve() : this.streamControllers[t].pullCall.reject(g(e.reason)); break; case u: if (!this.streamSinks[t]) { n.postMessage({ sourceName: a, targetName: i, stream: d, streamId: t, success: !0 }); break } this.streamSinks[t].desiredSize <= 0 && e.desiredSize > 0 && this.streamSinks[t].sinkCapability.resolve(); this.streamSinks[t].desiredSize = e.desiredSize; const { onPull: m } = this.streamSinks[e.streamId]; new Promise((function (e) { e(m && m()) })).then((function () { n.postMessage({ sourceName: a, targetName: i, stream: d, streamId: t, success: !0 }) }), (function (e) { n.postMessage({ sourceName: a, targetName: i, stream: d, streamId: t, reason: g(e) }) })); break; case l: (0, r.assert)(this.streamControllers[t], "enqueue should have stream controller"); if (this.streamControllers[t].isClosed) break; this.streamControllers[t].controller.enqueue(e.chunk); break; case c: (0, r.assert)(this.streamControllers[t], "close should have stream controller"); if (this.streamControllers[t].isClosed) break; this.streamControllers[t].isClosed = !0; this.streamControllers[t].controller.close(); this._deleteStreamController(t); break; case h: (0, r.assert)(this.streamControllers[t], "error should have stream controller"); this.streamControllers[t].controller.error(g(e.reason)); this._deleteStreamController(t); break; case o: e.success ? this.streamControllers[t].cancelCall.resolve() : this.streamControllers[t].cancelCall.reject(g(e.reason)); this._deleteStreamController(t); break; case s: if (!this.streamSinks[t]) break; const { onCancel: p } = this.streamSinks[e.streamId]; new Promise((function (t) { t(p && p(g(e.reason))) })).then((function () { n.postMessage({ sourceName: a, targetName: i, stream: o, streamId: t, success: !0 }) }), (function (e) { n.postMessage({ sourceName: a, targetName: i, stream: o, streamId: t, reason: g(e) }) })); this.streamSinks[t].sinkCapability.reject(g(e.reason)); this.streamSinks[t].isCancelled = !0; delete this.streamSinks[t]; break; default: throw new Error("Unexpected stream case") } } async _deleteStreamController(e) { await Promise.allSettled([this.streamControllers[e].startCall, this.streamControllers[e].pullCall, this.streamControllers[e].cancelCall].map((function (e) { return e && e.promise }))); delete this.streamControllers[e] } _postMessage(e, t) { t && this.postMessageTransfers ? this.comObj.postMessage(e, t) : this.comObj.postMessage(e) } destroy() { this.comObj.removeEventListener("message", this._onComObjOnMessage) } } }, function (e, t, a) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); t.PDFWorkerStream = void 0; var r = a(2); t.PDFWorkerStream = class { constructor(e) { this._msgHandler = e; this._contentLength = null; this._fullRequestReader = null; this._rangeRequestReaders = [] } getFullReader() { (0, r.assert)(!this._fullRequestReader); this._fullRequestReader = new i(this._msgHandler); return this._fullRequestReader } getRangeReader(e, t) { const a = new n(e, t, this._msgHandler); this._rangeRequestReaders.push(a); return a } cancelAllRequests(e) { this._fullRequestReader && this._fullRequestReader.cancel(e); this._rangeRequestReaders.slice(0).forEach((function (t) { t.cancel(e) })) } }; class i { constructor(e) { this._msgHandler = e; this.onProgress = null; this._contentLength = null; this._isRangeSupported = !1; this._isStreamingSupported = !1; const t = this._msgHandler.sendWithStream("GetReader"); this._reader = t.getReader(); this._headersReady = this._msgHandler.sendWithPromise("ReaderHeadersReady").then(e => { this._isStreamingSupported = e.isStreamingSupported; this._isRangeSupported = e.isRangeSupported; this._contentLength = e.contentLength }) } get headersReady() { return this._headersReady } get contentLength() { return this._contentLength } get isStreamingSupported() { return this._isStreamingSupported } get isRangeSupported() { return this._isRangeSupported } async read() { const { value: e, done: t } = await this._reader.read(); return t ? { value: void 0, done: !0 } : { value: e.buffer, done: !1 } } cancel(e) { this._reader.cancel(e) } } class n { constructor(e, t, a) { this._msgHandler = a; this.onProgress = null; const r = this._msgHandler.sendWithStream("GetRangeReader", { begin: e, end: t }); this._reader = r.getReader() } get isStreamingSupported() { return !1 } async read() { const { value: e, done: t } = await this._reader.read(); return t ? { value: void 0, done: !0 } : { value: e.buffer, done: !1 } } cancel(e) { this._reader.cancel(e) } } }]) }));
\ No newline at end of file
diff --git a/src/server/public/assets/pdf.worker.js b/src/server/public/assets/pdf.worker.js
new file mode 100644
index 000000000..1b4424b03
--- /dev/null
+++ b/src/server/public/assets/pdf.worker.js
@@ -0,0 +1,22 @@
+/**
+ * @licstart The following is the entire license notice for the
+ * Javascript code in this page
+ *
+ * Copyright 2020 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @licend The above is the entire license notice for the
+ * Javascript code in this page
+ */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("pdfjs-dist/build/pdf.worker",[],t):"object"==typeof exports?exports["pdfjs-dist/build/pdf.worker"]=t():e["pdfjs-dist/build/pdf.worker"]=e.pdfjsWorker=t()}(this,(function(){return function(e){var t={};function a(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};e[r].call(i.exports,i,i.exports,a);i.l=!0;return i.exports}a.m=e;a.c=t;a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})};a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});Object.defineProperty(e,"__esModule",{value:!0})};a.t=function(e,t){1&t&&(e=a(e));if(8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);a.r(r);Object.defineProperty(r,"default",{enumerable:!0,value:e});if(2&t&&"string"!=typeof e)for(var i in e)a.d(r,i,function(t){return e[t]}.bind(null,i));return r};a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};a.d(t,"a",t);return t};a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};a.p="";return a(a.s=0)}([function(e,t,a){"use strict";const r=a(1);t.WorkerMessageHandler=r.WorkerMessageHandler},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.WorkerMessageHandler=t.WorkerTask=void 0;var r=a(2),i=a(4),n=a(5),s=a(44),o=a(45),c=a(46),l=a(7),h=function(){function e(e){this.name=e;this.terminated=!1;this._capability=(0,r.createPromiseCapability)()}e.prototype={get finished(){return this._capability.promise},finish(){this._capability.resolve()},terminate(){this.terminated=!0},ensureNotTerminated(){if(this.terminated)throw new Error("Worker task was terminated")}};return e}();t.WorkerTask=h;var u,d={setup(e,t){var a=!1;e.on("test",(function(t){if(a)return;a=!0;if(!(t instanceof Uint8Array)){e.send("test",null);return}const r=255===t[0];e.postMessageTransfers=r;e.send("test",{supportTransfers:r})}));e.on("configure",(function(e){(0,r.setVerbosityLevel)(e.verbosity)}));e.on("GetDocRequest",(function(e){return d.createDocumentHandler(e,t)}))},createDocumentHandler(e,t){var a,s=!1,u=null,d=[];const f=(0,r.getVerbosityLevel)(),g=e.apiVersion;if("2.4.456"!==g)throw new Error(`The API version "${g}" does not match `+'the Worker version "2.4.456".');const m=[];for(const e in[])m.push(e);if(m.length)throw new Error("The `Array.prototype` contains unexpected enumerable properties: "+m.join(", ")+"; thus breaking e.g. `for...in` iteration of `Array`s.");var p=e.docId,b=e.docBaseUrl,y=e.docId+"_worker",v=new o.MessageHandler(y,p,t);v.postMessageTransfers=e.postMessageTransfers;function w(){if(s)throw new Error("Worker was terminated")}function k(e){d.push(e)}function S(e){e.finish();var t=d.indexOf(e);d.splice(t,1)}async function C(e){await a.ensureDoc("checkHeader");await a.ensureDoc("parseStartXRef");await a.ensureDoc("parse",[e]);e||await a.ensureDoc("checkFirstPage");const[t,r]=await Promise.all([a.ensureDoc("numPages"),a.ensureDoc("fingerprint")]);return{numPages:t,fingerprint:r}}function x(e,t){var a,i=(0,r.createPromiseCapability)(),s=e.source;if(s.data){try{a=new n.LocalPdfManager(p,s.data,s.password,t,b);i.resolve(a)}catch(e){i.reject(e)}return i.promise}var o,l=[];try{o=new c.PDFWorkerStream(v)}catch(e){i.reject(e);return i.promise}var h=o.getFullReader();h.headersReady.then((function(){if(h.isRangeSupported){var e=s.disableAutoFetch||h.isStreamingSupported;a=new n.NetworkPdfManager(p,o,{msgHandler:v,password:s.password,length:h.contentLength,disableAutoFetch:e,rangeChunkSize:s.rangeChunkSize},t,b);for(let e=0;e<l.length;e++)a.sendProgressiveData(l[e]);l=[];i.resolve(a);u=null}})).catch((function(e){i.reject(e);u=null}));var d=0;new Promise((function(e,o){var c=function(e){try{w();if(e.done){a||function(){var e=(0,r.arraysToBytes)(l);s.length&&e.length!==s.length&&(0,r.warn)("reported HTTP length is different from actual");try{a=new n.LocalPdfManager(p,e,s.password,t,b);i.resolve(a)}catch(e){i.reject(e)}l=[]}();u=null;return}var f=e.value;d+=(0,r.arrayByteLength)(f);h.isStreamingSupported||v.send("DocProgress",{loaded:d,total:Math.max(d,h.contentLength||0)});a?a.sendProgressiveData(f):l.push(f);h.read().then(c,o)}catch(e){o(e)}};h.read().then(c,o)})).catch((function(e){i.reject(e);u=null}));u=function(e){o.cancelAllRequests(e)};return i.promise}v.on("GetPage",(function(e){return a.getPage(e.pageIndex).then((function(e){return Promise.all([a.ensure(e,"rotate"),a.ensure(e,"ref"),a.ensure(e,"userUnit"),a.ensure(e,"view")]).then((function([e,t,a,r]){return{rotate:e,ref:t,userUnit:a,view:r}}))}))}));v.on("GetPageIndex",(function(e){var t=i.Ref.get(e.ref.num,e.ref.gen);return a.pdfDocument.catalog.getPageIndex(t)}));v.on("GetDestinations",(function(e){return a.ensureCatalog("destinations")}));v.on("GetDestination",(function(e){return a.ensureCatalog("getDestination",[e.id])}));v.on("GetPageLabels",(function(e){return a.ensureCatalog("pageLabels")}));v.on("GetPageLayout",(function(e){return a.ensureCatalog("pageLayout")}));v.on("GetPageMode",(function(e){return a.ensureCatalog("pageMode")}));v.on("GetViewerPreferences",(function(e){return a.ensureCatalog("viewerPreferences")}));v.on("GetOpenAction",(function(e){return a.ensureCatalog("openAction")}));v.on("GetAttachments",(function(e){return a.ensureCatalog("attachments")}));v.on("GetJavaScript",(function(e){return a.ensureCatalog("javaScript")}));v.on("GetOutline",(function(e){return a.ensureCatalog("documentOutline")}));v.on("GetPermissions",(function(e){return a.ensureCatalog("permissions")}));v.on("GetMetadata",(function(e){return Promise.all([a.ensureDoc("documentInfo"),a.ensureCatalog("metadata")])}));v.on("GetData",(function(e){a.requestLoadedStream();return a.onLoadedStream().then((function(e){return e.bytes}))}));v.on("GetStats",(function(e){return a.pdfDocument.xref.stats}));v.on("GetAnnotations",(function({pageIndex:e,intent:t}){return a.getPage(e).then((function(e){return e.getAnnotationsData(t)}))}));v.on("GetOperatorList",(function(e,t){var i=e.pageIndex;a.getPage(i).then((function(a){var n=new h(`GetOperatorList: page ${i}`);k(n);const s=f>=r.VerbosityLevel.INFOS?Date.now():0;a.getOperatorList({handler:v,sink:t,task:n,intent:e.intent,renderInteractiveForms:e.renderInteractiveForms}).then((function(e){S(n);s&&(0,r.info)(`page=${i+1} - getOperatorList: time=`+`${Date.now()-s}ms, len=${e.length}`);t.close()}),(function(e){S(n);if(!n.terminated){v.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.unknown});t.error(e)}}))}))}),this);v.on("GetTextContent",(function(e,t){var i=e.pageIndex;t.onPull=function(e){};t.onCancel=function(e){};a.getPage(i).then((function(a){var n=new h("GetTextContent: page "+i);k(n);const s=f>=r.VerbosityLevel.INFOS?Date.now():0;a.extractTextContent({handler:v,task:n,sink:t,normalizeWhitespace:e.normalizeWhitespace,combineTextItems:e.combineTextItems}).then((function(){S(n);s&&(0,r.info)(`page=${i+1} - getTextContent: time=`+`${Date.now()-s}ms`);t.close()}),(function(e){S(n);n.terminated||t.error(e)}))}))}));v.on("FontFallback",(function(e){return a.fontFallback(e.id,v)}));v.on("Cleanup",(function(e){return a.cleanup()}));v.on("Terminate",(function(e){s=!0;const t=[];if(a){a.terminate(new r.AbortException("Worker was terminated."));const e=a.cleanup();t.push(e);a=null}else(0,i.clearPrimitiveCaches)();u&&u(new r.AbortException("Worker was terminated."));d.forEach((function(e){t.push(e.finished);e.terminate()}));return Promise.all(t).then((function(){v.destroy();v=null}))}));v.on("Ready",(function(t){!function(e){function t(e){w();v.send("GetDoc",{pdfInfo:e})}function i(e){w();if(e instanceof r.PasswordException){var t=new h(`PasswordException: response ${e.code}`);k(t);v.sendWithPromise("PasswordRequest",e).then((function(e){S(t);a.updatePassword(e.password);n()})).catch((function(){S(t);v.send("DocException",e)}))}else e instanceof r.InvalidPDFException||e instanceof r.MissingPDFException||e instanceof r.UnexpectedResponseException||e instanceof r.UnknownErrorException?v.send("DocException",e):v.send("DocException",new r.UnknownErrorException(e.message,e.toString()))}function n(){w();C(!1).then(t,(function(e){w();if(e instanceof l.XRefParseException){a.requestLoadedStream();a.onLoadedStream().then((function(){w();C(!0).then(t,i)}))}else i(e)}),i)}w();x(e,{forceDataSchema:e.disableCreateObjectURL,maxImageSize:e.maxImageSize,disableFontFace:e.disableFontFace,nativeImageDecoderSupport:e.nativeImageDecoderSupport,ignoreErrors:e.ignoreErrors,isEvalSupported:e.isEvalSupported}).then((function(e){if(s){e.terminate(new r.AbortException("Worker was terminated."));throw new Error("Worker was terminated")}(a=e).onLoadedStream().then((function(e){v.send("DataLoaded",{length:e.bytes.byteLength})}))})).then(n,i)}(e);e=null}));return y},initializeFromPort(e){var t=new o.MessageHandler("worker","main",e);d.setup(t,e);t.send("ready",null)}};t.WorkerMessageHandler=d;"undefined"==typeof window&&!s.isNodeJS&&"undefined"!=typeof self&&("function"==typeof(u=self).postMessage&&"onmessage"in u)&&d.initializeFromPort(self)},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.arrayByteLength=d;t.arraysToBytes=function(e){const t=e.length;if(1===t&&e[0]instanceof Uint8Array)return e[0];let a=0;for(let r=0;r<t;r++)a+=d(e[r]);let r=0;const i=new Uint8Array(a);for(let a=0;a<t;a++){let t=e[a];t instanceof Uint8Array||(t="string"==typeof t?u(t):new Uint8Array(t));const n=t.byteLength;i.set(t,r);r+=n}return i};t.assert=o;t.bytesToString=function(e){o(null!==e&&"object"==typeof e&&void 0!==e.length,"Invalid argument for bytesToString");const t=e.length;if(t<8192)return String.fromCharCode.apply(null,e);const a=[];for(let r=0;r<t;r+=8192){const i=Math.min(r+8192,t),n=e.subarray(r,i);a.push(String.fromCharCode.apply(null,n))}return a.join("")};t.createPromiseCapability=function(){const e=Object.create(null);let t=!1;Object.defineProperty(e,"settled",{get:()=>t});e.promise=new Promise((function(a,r){e.resolve=function(e){t=!0;a(e)};e.reject=function(e){t=!0;r(e)}}));return e};t.getVerbosityLevel=function(){return i};t.info=function(e){i>=r.INFOS&&console.log(`Info: ${e}`)};t.isArrayBuffer=function(e){return"object"==typeof e&&null!==e&&void 0!==e.byteLength};t.isArrayEqual=function(e,t){if(e.length!==t.length)return!1;return e.every((function(e,a){return e===t[a]}))};t.isBool=function(e){return"boolean"==typeof e};t.isEmptyObj=function(e){for(const t in e)return!1;return!0};t.isNum=function(e){return"number"==typeof e};t.isString=function(e){return"string"==typeof e};t.isSameOrigin=function(e,t){let a;try{a=new URL(e);if(!a.origin||"null"===a.origin)return!1}catch(e){return!1}const r=new URL(t,a);return a.origin===r.origin};t.createValidAbsoluteUrl=function(e,t){if(!e)return null;try{const a=t?new URL(e,t):new URL(e);if(function(e){if(!e)return!1;switch(e.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(a))return a}catch(e){}return null};t.removeNullCharacters=function(e){if("string"!=typeof e){n("The argument for removeNullCharacters must be a string.");return e}return e.replace(h,"")};t.setVerbosityLevel=function(e){Number.isInteger(e)&&(i=e)};t.shadow=c;t.string32=function(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)};t.stringToBytes=u;t.stringToPDFString=function(e){const t=e.length,a=[];if("þ"===e[0]&&"ÿ"===e[1])for(let r=2;r<t;r+=2)a.push(String.fromCharCode(e.charCodeAt(r)<<8|e.charCodeAt(r+1)));else if("ÿ"===e[0]&&"þ"===e[1])for(let r=2;r<t;r+=2)a.push(String.fromCharCode(e.charCodeAt(r+1)<<8|e.charCodeAt(r)));else for(let r=0;r<t;++r){const t=b[e.charCodeAt(r)];a.push(t?String.fromCharCode(t):e.charAt(r))}return a.join("")};t.stringToUTF8String=function(e){return decodeURIComponent(escape(e))};t.utf8StringToString=function(e){return unescape(encodeURIComponent(e))};t.warn=n;t.unreachable=s;t.IsEvalSupportedCached=t.IsLittleEndianCached=t.createObjectURL=t.FormatError=t.Util=t.UnknownErrorException=t.UnexpectedResponseException=t.TextRenderingMode=t.StreamType=t.PermissionFlag=t.PasswordResponses=t.PasswordException=t.NativeImageDecoding=t.MissingPDFException=t.InvalidPDFException=t.AbortException=t.CMapCompressionType=t.ImageKind=t.FontType=t.AnnotationType=t.AnnotationStateModelType=t.AnnotationReviewState=t.AnnotationReplyType=t.AnnotationMarkedState=t.AnnotationFlag=t.AnnotationFieldFlag=t.AnnotationBorderStyleType=t.UNSUPPORTED_FEATURES=t.VerbosityLevel=t.OPS=t.IDENTITY_MATRIX=t.FONT_IDENTITY_MATRIX=t.BaseException=void 0;a(3);t.IDENTITY_MATRIX=[1,0,0,1,0,0];t.FONT_IDENTITY_MATRIX=[.001,0,0,.001,0,0];t.NativeImageDecoding={NONE:"none",DECODE:"decode",DISPLAY:"display"};t.PermissionFlag={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048};t.TextRenderingMode={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4};t.ImageKind={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3};t.AnnotationType={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26};t.AnnotationStateModelType={MARKED:"Marked",REVIEW:"Review"};t.AnnotationMarkedState={MARKED:"Marked",UNMARKED:"Unmarked"};t.AnnotationReviewState={ACCEPTED:"Accepted",REJECTED:"Rejected",CANCELLED:"Cancelled",COMPLETED:"Completed",NONE:"None"};t.AnnotationReplyType={GROUP:"Group",REPLY:"R"};t.AnnotationFlag={INVISIBLE:1,HIDDEN:2,PRINT:4,NOZOOM:8,NOROTATE:16,NOVIEW:32,READONLY:64,LOCKED:128,TOGGLENOVIEW:256,LOCKEDCONTENTS:512};t.AnnotationFieldFlag={READONLY:1,REQUIRED:2,NOEXPORT:4,MULTILINE:4096,PASSWORD:8192,NOTOGGLETOOFF:16384,RADIO:32768,PUSHBUTTON:65536,COMBO:131072,EDIT:262144,SORT:524288,FILESELECT:1048576,MULTISELECT:2097152,DONOTSPELLCHECK:4194304,DONOTSCROLL:8388608,COMB:16777216,RICHTEXT:33554432,RADIOSINUNISON:33554432,COMMITONSELCHANGE:67108864};t.AnnotationBorderStyleType={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5};t.StreamType={UNKNOWN:"UNKNOWN",FLATE:"FLATE",LZW:"LZW",DCT:"DCT",JPX:"JPX",JBIG:"JBIG",A85:"A85",AHX:"AHX",CCF:"CCF",RLX:"RLX"};t.FontType={UNKNOWN:"UNKNOWN",TYPE1:"TYPE1",TYPE1C:"TYPE1C",CIDFONTTYPE0:"CIDFONTTYPE0",CIDFONTTYPE0C:"CIDFONTTYPE0C",TRUETYPE:"TRUETYPE",CIDFONTTYPE2:"CIDFONTTYPE2",TYPE3:"TYPE3",OPENTYPE:"OPENTYPE",TYPE0:"TYPE0",MMTYPE1:"MMTYPE1"};const r={ERRORS:0,WARNINGS:1,INFOS:5};t.VerbosityLevel=r;t.CMapCompressionType={NONE:0,BINARY:1,STREAM:2};t.OPS={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotations:78,endAnnotations:79,beginAnnotation:80,endAnnotation:81,paintJpegXObject:82,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91};t.UNSUPPORTED_FEATURES={unknown:"unknown",forms:"forms",javaScript:"javaScript",smask:"smask",shadingPattern:"shadingPattern",font:"font"};t.PasswordResponses={NEED_PASSWORD:1,INCORRECT_PASSWORD:2};let i=r.WARNINGS;function n(e){i>=r.WARNINGS&&console.log(`Warning: ${e}`)}function s(e){throw new Error(e)}function o(e,t){e||s(t)}function c(e,t,a){Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!1});return a}const l=function(){function e(t){this.constructor===e&&s("Cannot initialize BaseException.");this.message=t;this.name=this.constructor.name}e.prototype=new Error;e.constructor=e;return e}();t.BaseException=l;t.PasswordException=class extends l{constructor(e,t){super(e);this.code=t}};t.UnknownErrorException=class extends l{constructor(e,t){super(e);this.details=t}};t.InvalidPDFException=class extends l{};t.MissingPDFException=class extends l{};t.UnexpectedResponseException=class extends l{constructor(e,t){super(e);this.status=t}};t.FormatError=class extends l{};t.AbortException=class extends l{};const h=/\x00/g;function u(e){o("string"==typeof e,"Invalid argument for stringToBytes");const t=e.length,a=new Uint8Array(t);for(let r=0;r<t;++r)a[r]=255&e.charCodeAt(r);return a}function d(e){if(void 0!==e.length)return e.length;o(void 0!==e.byteLength);return e.byteLength}const f={get value(){return c(this,"value",function(){const e=new Uint8Array(4);e[0]=1;return 1===new Uint32Array(e.buffer,0,1)[0]}())}};t.IsLittleEndianCached=f;const g={get value(){return c(this,"value",function(){try{new Function("");return!0}catch(e){return!1}}())}};t.IsEvalSupportedCached=g;const m=["rgb(",0,",",0,",",0,")"];class p{static makeCssRgb(e,t,a){m[1]=e;m[3]=t;m[5]=a;return m.join("")}static transform(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}static applyTransform(e,t){return[e[0]*t[0]+e[1]*t[2]+t[4],e[0]*t[1]+e[1]*t[3]+t[5]]}static applyInverseTransform(e,t){const a=t[0]*t[3]-t[1]*t[2];return[(e[0]*t[3]-e[1]*t[2]+t[2]*t[5]-t[4]*t[3])/a,(-e[0]*t[1]+e[1]*t[0]+t[4]*t[1]-t[5]*t[0])/a]}static getAxialAlignedBoundingBox(e,t){const a=p.applyTransform(e,t),r=p.applyTransform(e.slice(2,4),t),i=p.applyTransform([e[0],e[3]],t),n=p.applyTransform([e[2],e[1]],t);return[Math.min(a[0],r[0],i[0],n[0]),Math.min(a[1],r[1],i[1],n[1]),Math.max(a[0],r[0],i[0],n[0]),Math.max(a[1],r[1],i[1],n[1])]}static inverseTransform(e){const t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-e[1]/t,-e[2]/t,e[0]/t,(e[2]*e[5]-e[4]*e[3])/t,(e[4]*e[1]-e[5]*e[0])/t]}static apply3dTransform(e,t){return[e[0]*t[0]+e[1]*t[1]+e[2]*t[2],e[3]*t[0]+e[4]*t[1]+e[5]*t[2],e[6]*t[0]+e[7]*t[1]+e[8]*t[2]]}static singularValueDecompose2dScale(e){const t=[e[0],e[2],e[1],e[3]],a=e[0]*t[0]+e[1]*t[2],r=e[0]*t[1]+e[1]*t[3],i=e[2]*t[0]+e[3]*t[2],n=e[2]*t[1]+e[3]*t[3],s=(a+n)/2,o=Math.sqrt((a+n)*(a+n)-4*(a*n-i*r))/2,c=s+o||1,l=s-o||1;return[Math.sqrt(c),Math.sqrt(l)]}static normalizeRect(e){const t=e.slice(0);if(e[0]>e[2]){t[0]=e[2];t[2]=e[0]}if(e[1]>e[3]){t[1]=e[3];t[3]=e[1]}return t}static intersect(e,t){function a(e,t){return e-t}const r=[e[0],e[2],t[0],t[2]].sort(a),i=[e[1],e[3],t[1],t[3]].sort(a),n=[];e=p.normalizeRect(e);t=p.normalizeRect(t);if(!(r[0]===e[0]&&r[1]===t[0]||r[0]===t[0]&&r[1]===e[0]))return null;n[0]=r[1];n[2]=r[2];if(!(i[0]===e[1]&&i[1]===t[1]||i[0]===t[1]&&i[1]===e[1]))return null;n[1]=i[1];n[3]=i[2];return n}}t.Util=p;const b=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];const y=function(){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return function(t,a,r=!1){if(!r&&URL.createObjectURL){const e=new Blob([t],{type:a});return URL.createObjectURL(e)}let i=`data:${a};base64,`;for(let a=0,r=t.length;a<r;a+=3){const n=255&t[a],s=255&t[a+1],o=255&t[a+2];i+=e[n>>2]+e[(3&n)<<4|s>>4]+e[a+1<r?(15&s)<<2|o>>6:64]+e[a+2<r?63&o:64]}return i}}();t.createObjectURL=y},function(e,t,a){},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.clearPrimitiveCaches=function(){n._clearCache();i._clearCache();o._clearCache()};t.isEOF=function(e){return e===r};t.isCmd=function(e,t){return e instanceof n&&(void 0===t||e.cmd===t)};t.isDict=u;t.isName=h;t.isRef=function(e){return e instanceof o};t.isRefsEqual=function(e,t){return e.num===t.num&&e.gen===t.gen};t.isStream=function(e){return"object"==typeof e&&null!==e&&void 0!==e.getBytes};t.RefSetCache=t.RefSet=t.Ref=t.Name=t.Dict=t.Cmd=t.EOF=void 0;a(2);var r={};t.EOF=r;var i=function(){let e=Object.create(null);function t(e){this.name=e}t.prototype={};t.get=function(a){var r=e[a];return r||(e[a]=new t(a))};t._clearCache=function(){e=Object.create(null)};return t}();t.Name=i;var n=function(){let e=Object.create(null);function t(e){this.cmd=e}t.prototype={};t.get=function(a){var r=e[a];return r||(e[a]=new t(a))};t._clearCache=function(){e=Object.create(null)};return t}();t.Cmd=n;var s=function(){var e=function(){return e};function t(t){this._map=Object.create(null);this.xref=t;this.objId=null;this.suppressEncryption=!1;this.__nonSerializable__=e}t.prototype={assignXref:function(e){this.xref=e},get(e,t,a){let r=this._map[e];if(void 0===r&&void 0!==t){r=this._map[t];void 0===r&&void 0!==a&&(r=this._map[a])}return r instanceof o&&this.xref?this.xref.fetch(r,this.suppressEncryption):r},async getAsync(e,t,a){let r=this._map[e];if(void 0===r&&void 0!==t){r=this._map[t];void 0===r&&void 0!==a&&(r=this._map[a])}return r instanceof o&&this.xref?this.xref.fetchAsync(r,this.suppressEncryption):r},getArray(e,t,a){let r=this.get(e,t,a);if(!Array.isArray(r)||!this.xref)return r;r=r.slice();for(let e=0,t=r.length;e<t;e++)r[e]instanceof o&&(r[e]=this.xref.fetch(r[e],this.suppressEncryption));return r},getRaw:function(e){return this._map[e]},getKeys:function(){return Object.keys(this._map)},set:function(e,t){this._map[e]=t},has:function(e){return void 0!==this._map[e]},forEach:function(e){for(var t in this._map)e(t,this.get(t))}};t.empty=new t(null);t.merge=function(e,a){const r=new t(e);for(let e=0,t=a.length;e<t;e++){const t=a[e];if(u(t))for(const e in t._map)void 0===r._map[e]&&(r._map[e]=t._map[e])}return r};return t}();t.Dict=s;var o=function(){let e=Object.create(null);function t(e,t){this.num=e;this.gen=t}t.prototype={toString:function(){return 0===this.gen?`${this.num}R`:`${this.num}R${this.gen}`}};t.get=function(a,r){const i=0===r?`${a}R`:`${a}R${r}`,n=e[i];return n||(e[i]=new t(a,r))};t._clearCache=function(){e=Object.create(null)};return t}();t.Ref=o;var c=function(){function e(){this.dict=Object.create(null)}e.prototype={has:function(e){return e.toString()in this.dict},put:function(e){this.dict[e.toString()]=!0},remove:function(e){delete this.dict[e.toString()]}};return e}();t.RefSet=c;var l=function(){function e(){this.dict=Object.create(null)}e.prototype={get:function(e){return this.dict[e.toString()]},has:function(e){return e.toString()in this.dict},put:function(e,t){this.dict[e.toString()]=t},putAlias:function(e,t){this.dict[e.toString()]=this.get(t)},forEach:function(e){for(const t in this.dict)e(this.dict[t])},clear:function(){this.dict=Object.create(null)}};return e}();t.RefSetCache=l;function h(e,t){return e instanceof i&&(void 0===t||e.name===t)}function u(e,t){return e instanceof s&&(void 0===t||h(e.get("Type"),t))}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.NetworkPdfManager=t.LocalPdfManager=void 0;var r=a(2),i=a(6),n=a(7),s=a(8),o=a(11);class c{constructor(){this.constructor===c&&(0,r.unreachable)("Cannot initialize BasePdfManager.")}get docId(){return this._docId}get password(){return this._password}get docBaseUrl(){let e=null;if(this._docBaseUrl){const t=(0,r.createValidAbsoluteUrl)(this._docBaseUrl);t?e=t.href:(0,r.warn)(`Invalid absolute docBaseUrl: "${this._docBaseUrl}".`)}return(0,r.shadow)(this,"docBaseUrl",e)}onLoadedStream(){(0,r.unreachable)("Abstract method `onLoadedStream` called")}ensureDoc(e,t){return this.ensure(this.pdfDocument,e,t)}ensureXRef(e,t){return this.ensure(this.pdfDocument.xref,e,t)}ensureCatalog(e,t){return this.ensure(this.pdfDocument.catalog,e,t)}getPage(e){return this.pdfDocument.getPage(e)}fontFallback(e,t){return this.pdfDocument.fontFallback(e,t)}cleanup(){return this.pdfDocument.cleanup()}async ensure(e,t,a){(0,r.unreachable)("Abstract method `ensure` called")}requestRange(e,t){(0,r.unreachable)("Abstract method `requestRange` called")}requestLoadedStream(){(0,r.unreachable)("Abstract method `requestLoadedStream` called")}sendProgressiveData(e){(0,r.unreachable)("Abstract method `sendProgressiveData` called")}updatePassword(e){this._password=e}terminate(e){(0,r.unreachable)("Abstract method `terminate` called")}}t.LocalPdfManager=class extends c{constructor(e,t,a,r,i){super();this._docId=e;this._password=a;this._docBaseUrl=i;this.evaluatorOptions=r;const n=new o.Stream(t);this.pdfDocument=new s.PDFDocument(this,n);this._loadedStreamPromise=Promise.resolve(n)}async ensure(e,t,a){const r=e[t];return"function"==typeof r?r.apply(e,a):r}requestRange(e,t){return Promise.resolve()}requestLoadedStream(){}onLoadedStream(){return this._loadedStreamPromise}terminate(e){}};t.NetworkPdfManager=class extends c{constructor(e,t,a,r,n){super();this._docId=e;this._password=a.password;this._docBaseUrl=n;this.msgHandler=a.msgHandler;this.evaluatorOptions=r;this.streamManager=new i.ChunkedStreamManager(t,{msgHandler:a.msgHandler,length:a.length,disableAutoFetch:a.disableAutoFetch,rangeChunkSize:a.rangeChunkSize});this.pdfDocument=new s.PDFDocument(this,this.streamManager.getStream())}async ensure(e,t,a){try{const r=e[t];return"function"==typeof r?r.apply(e,a):r}catch(r){if(!(r instanceof n.MissingDataException))throw r;await this.requestRange(r.begin,r.end);return this.ensure(e,t,a)}}requestRange(e,t){return this.streamManager.requestRange(e,t)}requestLoadedStream(){this.streamManager.requestAllChunks()}sendProgressiveData(e){this.streamManager.onReceiveData({chunk:e})}onLoadedStream(){return this.streamManager.onLoadedStream()}terminate(e){this.streamManager.abort(e)}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.ChunkedStreamManager=t.ChunkedStream=void 0;var r=a(2),i=a(7);class n{constructor(e,t,a){this.bytes=new Uint8Array(e);this.start=0;this.pos=0;this.end=e;this.chunkSize=t;this.loadedChunks=[];this.numChunksLoaded=0;this.numChunks=Math.ceil(e/t);this.manager=a;this.progressiveDataLength=0;this.lastSuccessfulEnsureByteChunk=-1}getMissingChunks(){const e=[];for(let t=0,a=this.numChunks;t<a;++t)this.loadedChunks[t]||e.push(t);return e}getBaseStreams(){return[this]}allChunksLoaded(){return this.numChunksLoaded===this.numChunks}onReceiveData(e,t){const a=this.chunkSize;if(e%a!=0)throw new Error(`Bad begin offset: ${e}`);const r=e+t.byteLength;if(r%a!=0&&r!==this.bytes.length)throw new Error(`Bad end offset: ${r}`);this.bytes.set(new Uint8Array(t),e);const i=Math.floor(e/a),n=Math.floor((r-1)/a)+1;for(let e=i;e<n;++e)if(!this.loadedChunks[e]){this.loadedChunks[e]=!0;++this.numChunksLoaded}}onReceiveProgressiveData(e){let t=this.progressiveDataLength;const a=Math.floor(t/this.chunkSize);this.bytes.set(new Uint8Array(e),t);t+=e.byteLength;this.progressiveDataLength=t;const r=t>=this.end?this.numChunks:Math.floor(t/this.chunkSize);for(let e=a;e<r;++e)if(!this.loadedChunks[e]){this.loadedChunks[e]=!0;++this.numChunksLoaded}}ensureByte(e){if(e<this.progressiveDataLength)return;const t=Math.floor(e/this.chunkSize);if(t!==this.lastSuccessfulEnsureByteChunk){if(!this.loadedChunks[t])throw new i.MissingDataException(e,e+1);this.lastSuccessfulEnsureByteChunk=t}}ensureRange(e,t){if(e>=t)return;if(t<=this.progressiveDataLength)return;const a=this.chunkSize,r=Math.floor(e/a),n=Math.floor((t-1)/a)+1;for(let a=r;a<n;++a)if(!this.loadedChunks[a])throw new i.MissingDataException(e,t)}nextEmptyChunk(e){const t=this.numChunks;for(let a=0;a<t;++a){const r=(e+a)%t;if(!this.loadedChunks[r])return r}return null}hasChunk(e){return!!this.loadedChunks[e]}get length(){return this.end-this.start}get isEmpty(){return 0===this.length}getByte(){const e=this.pos;if(e>=this.end)return-1;e>=this.progressiveDataLength&&this.ensureByte(e);return this.bytes[this.pos++]}getUint16(){const e=this.getByte(),t=this.getByte();return-1===e||-1===t?-1:(e<<8)+t}getInt32(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()}getBytes(e,t=!1){const a=this.bytes,r=this.pos,i=this.end;if(!e){i>this.progressiveDataLength&&this.ensureRange(r,i);const e=a.subarray(r,i);return t?new Uint8ClampedArray(e):e}let n=r+e;n>i&&(n=i);n>this.progressiveDataLength&&this.ensureRange(r,n);this.pos=n;const s=a.subarray(r,n);return t?new Uint8ClampedArray(s):s}peekByte(){const e=this.getByte();-1!==e&&this.pos--;return e}peekBytes(e,t=!1){const a=this.getBytes(e,t);this.pos-=a.length;return a}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);t>this.progressiveDataLength&&this.ensureRange(e,t);return this.bytes.subarray(e,t)}skip(e){e||(e=1);this.pos+=e}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(e,t,a){t?e+t>this.progressiveDataLength&&this.ensureRange(e,e+t):e>=this.progressiveDataLength&&this.ensureByte(e);function r(){}r.prototype=Object.create(this);r.prototype.getMissingChunks=function(){const e=this.chunkSize,t=Math.floor(this.start/e),a=Math.floor((this.end-1)/e)+1,r=[];for(let e=t;e<a;++e)this.loadedChunks[e]||r.push(e);return r};r.prototype.allChunksLoaded=function(){return this.numChunksLoaded===this.numChunks||0===this.getMissingChunks().length};const i=new r;i.pos=i.start=e;i.end=e+t||this.end;i.dict=a;return i}}t.ChunkedStream=n;t.ChunkedStreamManager=class{constructor(e,t){this.length=t.length;this.chunkSize=t.rangeChunkSize;this.stream=new n(this.length,this.chunkSize,this);this.pdfNetworkStream=e;this.disableAutoFetch=t.disableAutoFetch;this.msgHandler=t.msgHandler;this.currRequestId=0;this.chunksNeededByRequest=Object.create(null);this.requestsByChunk=Object.create(null);this.promisesByRequest=Object.create(null);this.progressiveDataLength=0;this.aborted=!1;this._loadedStreamCapability=(0,r.createPromiseCapability)()}onLoadedStream(){return this._loadedStreamCapability.promise}sendRequest(e,t){const a=this.pdfNetworkStream.getRangeReader(e,t);a.isStreamingSupported||(a.onProgress=this.onProgress.bind(this));let i=[],n=0;new Promise((e,t)=>{const s=o=>{try{if(!o.done){const e=o.value;i.push(e);n+=(0,r.arrayByteLength)(e);a.isStreamingSupported&&this.onProgress({loaded:n});a.read().then(s,t);return}const c=(0,r.arraysToBytes)(i);i=null;e(c)}catch(e){t(e)}};a.read().then(s,t)}).then(t=>{this.aborted||this.onReceiveData({chunk:t,begin:e})})}requestAllChunks(){const e=this.stream.getMissingChunks();this._requestChunks(e);return this._loadedStreamCapability.promise}_requestChunks(e){const t=this.currRequestId++,a=Object.create(null);this.chunksNeededByRequest[t]=a;for(const t of e)this.stream.hasChunk(t)||(a[t]=!0);if((0,r.isEmptyObj)(a))return Promise.resolve();const i=(0,r.createPromiseCapability)();this.promisesByRequest[t]=i;const n=[];for(let e in a){e|=0;if(!(e in this.requestsByChunk)){this.requestsByChunk[e]=[];n.push(e)}this.requestsByChunk[e].push(t)}if(!n.length)return i.promise;const s=this.groupChunks(n);for(const e of s){const t=e.beginChunk*this.chunkSize,a=Math.min(e.endChunk*this.chunkSize,this.length);this.sendRequest(t,a)}return i.promise}getStream(){return this.stream}requestRange(e,t){t=Math.min(t,this.length);const a=this.getBeginChunk(e),r=this.getEndChunk(t),i=[];for(let e=a;e<r;++e)i.push(e);return this._requestChunks(i)}requestRanges(e=[]){const t=[];for(const a of e){const e=this.getBeginChunk(a.begin),r=this.getEndChunk(a.end);for(let a=e;a<r;++a)t.includes(a)||t.push(a)}t.sort((function(e,t){return e-t}));return this._requestChunks(t)}groupChunks(e){const t=[];let a=-1,r=-1;for(let i=0,n=e.length;i<n;++i){const n=e[i];a<0&&(a=n);if(r>=0&&r+1!==n){t.push({beginChunk:a,endChunk:r+1});a=n}i+1===e.length&&t.push({beginChunk:a,endChunk:n+1});r=n}return t}onProgress(e){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+e.loaded,total:this.length})}onReceiveData(e){const t=e.chunk,a=void 0===e.begin,i=a?this.progressiveDataLength:e.begin,n=i+t.byteLength,s=Math.floor(i/this.chunkSize),o=n<this.length?Math.floor(n/this.chunkSize):Math.ceil(n/this.chunkSize);if(a){this.stream.onReceiveProgressiveData(t);this.progressiveDataLength=n}else this.stream.onReceiveData(i,t);this.stream.allChunksLoaded()&&this._loadedStreamCapability.resolve(this.stream);const c=[];for(let e=s;e<o;++e){const t=this.requestsByChunk[e]||[];delete this.requestsByChunk[e];for(const a of t){const t=this.chunksNeededByRequest[a];e in t&&delete t[e];(0,r.isEmptyObj)(t)&&c.push(a)}}if(!this.disableAutoFetch&&(0,r.isEmptyObj)(this.requestsByChunk)){let e;if(1===this.stream.numChunksLoaded){const t=this.stream.numChunks-1;this.stream.hasChunk(t)||(e=t)}else e=this.stream.nextEmptyChunk(o);Number.isInteger(e)&&this._requestChunks([e])}for(const e of c){const t=this.promisesByRequest[e];delete this.promisesByRequest[e];t.resolve()}this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize,total:this.length})}onError(e){this._loadedStreamCapability.reject(e)}getBeginChunk(e){return Math.floor(e/this.chunkSize)}getEndChunk(e){return Math.floor((e-1)/this.chunkSize)+1}abort(e){this.aborted=!0;this.pdfNetworkStream&&this.pdfNetworkStream.cancelAllRequests(e);for(const t in this.promisesByRequest)this.promisesByRequest[t].reject(e)}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.getLookupTableFactory=function(e){let t;return function(){if(e){t=Object.create(null);e(t);e=null}return t}};t.getInheritableProperty=function({dict:e,key:t,getArray:a=!1,stopWhenFound:i=!0}){let n,s=0;for(;e;){const o=a?e.getArray(t):e.get(t);if(void 0!==o){if(i)return o;n||(n=[]);n.push(o)}if(++s>100){(0,r.warn)(`getInheritableProperty: maximum loop count exceeded for "${t}"`);break}e=e.get("Parent")}return n};t.toRomanNumerals=function(e,t=!1){(0,r.assert)(Number.isInteger(e)&&e>0,"The number should be a positive integer.");const a=[];let i;for(;e>=1e3;){e-=1e3;a.push("M")}i=e/100|0;e%=100;a.push(o[i]);i=e/10|0;e%=10;a.push(o[10+i]);a.push(o[20+e]);const n=a.join("");return t?n.toLowerCase():n};t.log2=function(e){if(e<=0)return 0;return Math.ceil(Math.log2(e))};t.readInt8=function(e,t){return e[t]<<24>>24};t.readUint16=function(e,t){return e[t]<<8|e[t+1]};t.readUint32=function(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0};t.isWhiteSpace=function(e){return 32===e||9===e||13===e||10===e};t.XRefParseException=t.XRefEntryException=t.MissingDataException=void 0;var r=a(2);class i extends r.BaseException{constructor(e,t){super(`Missing data [${e}, ${t})`);this.begin=e;this.end=t}}t.MissingDataException=i;class n extends r.BaseException{}t.XRefEntryException=n;class s extends r.BaseException{}t.XRefParseException=s;const o=["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM","","X","XX","XXX","XL","L","LX","LXX","LXXX","XC","","I","II","III","IV","V","VI","VII","VIII","IX"]},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.PDFDocument=t.Page=void 0;var r=a(2),i=a(9),n=a(4),s=a(7),o=a(11),c=a(23),l=a(21),h=a(10),u=a(24),d=a(25),f=a(39);const g=[0,0,612,792];function m(e,t){return"display"===t&&e.viewable||"print"===t&&e.printable}class p{constructor({pdfManager:e,xref:t,pageIndex:a,pageDict:r,ref:i,fontCache:n,builtInCMapCache:s,pdfFunctionFactory:o}){this.pdfManager=e;this.pageIndex=a;this.pageDict=r;this.xref=t;this.ref=i;this.fontCache=n;this.builtInCMapCache=s;this.pdfFunctionFactory=o;this.evaluatorOptions=e.evaluatorOptions;this.resourcesPromise=null;const c={obj:0};this.idFactory={createObjId:()=>`p${a}_${++c.obj}`,getDocId:()=>`g_${e.docId}`}}_getInheritableProperty(e,t=!1){const a=(0,s.getInheritableProperty)({dict:this.pageDict,key:e,getArray:t,stopWhenFound:!1});return Array.isArray(a)?1!==a.length&&(0,n.isDict)(a[0])?n.Dict.merge(this.xref,a):a[0]:a}get content(){return this.pageDict.get("Contents")}get resources(){return(0,r.shadow)(this,"resources",this._getInheritableProperty("Resources")||n.Dict.empty)}_getBoundingBox(e){const t=this._getInheritableProperty(e,!0);if(Array.isArray(t)&&4===t.length){if(t[2]-t[0]!=0&&t[3]-t[1]!=0)return t;(0,r.warn)(`Empty /${e} entry.`)}return null}get mediaBox(){return(0,r.shadow)(this,"mediaBox",this._getBoundingBox("MediaBox")||g)}get cropBox(){return(0,r.shadow)(this,"cropBox",this._getBoundingBox("CropBox")||this.mediaBox)}get userUnit(){let e=this.pageDict.get("UserUnit");(!(0,r.isNum)(e)||e<=0)&&(e=1);return(0,r.shadow)(this,"userUnit",e)}get view(){const{cropBox:e,mediaBox:t}=this;let a;if(e===t||(0,r.isArrayEqual)(e,t))a=t;else{const i=r.Util.intersect(e,t);i&&i[2]-i[0]!=0&&i[3]-i[1]!=0?a=i:(0,r.warn)("Empty /CropBox and /MediaBox intersection.")}return(0,r.shadow)(this,"view",a||t)}get rotate(){let e=this._getInheritableProperty("Rotate")||0;e%90!=0?e=0:e>=360?e%=360:e<0&&(e=(e%360+360)%360);return(0,r.shadow)(this,"rotate",e)}getContentStream(){const e=this.content;let t;if(Array.isArray(e)){const a=this.xref,r=[];for(const t of e)r.push(a.fetchIfRef(t));t=new o.StreamsSequenceStream(r)}else t=(0,n.isStream)(e)?e:new o.NullStream;return t}loadResources(e){this.resourcesPromise||(this.resourcesPromise=this.pdfManager.ensure(this,"resources"));return this.resourcesPromise.then(()=>new i.ObjectLoader(this.resources,e,this.xref).load())}getOperatorList({handler:e,sink:t,task:a,intent:i,renderInteractiveForms:n}){const s=this.pdfManager.ensure(this,"getContentStream"),o=this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"]),c=new d.PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this.idFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,options:this.evaluatorOptions,pdfFunctionFactory:this.pdfFunctionFactory}),l=Promise.all([s,o]).then(([r])=>{const n=new u.OperatorList(i,t,this.pageIndex);e.send("StartRenderPage",{transparency:c.hasBlendModes(this.resources),pageIndex:this.pageIndex,intent:i});return c.getOperatorList({stream:r,task:a,resources:this.resources,operatorList:n}).then((function(){return n}))});return Promise.all([l,this._parsedAnnotations]).then((function([e,t]){if(0===t.length){e.flush(!0);return{length:e.totalLength}}const s=[];for(const e of t)m(e,i)&&s.push(e.getOperatorList(c,a,n));return Promise.all(s).then((function(t){e.addOp(r.OPS.beginAnnotations,[]);for(const a of t)e.addOpList(a);e.addOp(r.OPS.endAnnotations,[]);e.flush(!0);return{length:e.totalLength}}))}))}extractTextContent({handler:e,task:t,normalizeWhitespace:a,sink:r,combineTextItems:i}){const n=this.pdfManager.ensure(this,"getContentStream"),s=this.loadResources(["ExtGState","XObject","Font"]);return Promise.all([n,s]).then(([n])=>new d.PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this.idFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,options:this.evaluatorOptions,pdfFunctionFactory:this.pdfFunctionFactory}).getTextContent({stream:n,task:t,resources:this.resources,normalizeWhitespace:a,combineTextItems:i,sink:r}))}getAnnotationsData(e){return this._parsedAnnotations.then((function(t){const a=[];for(let r=0,i=t.length;r<i;r++)e&&!m(t[r],e)||a.push(t[r].data);return a}))}get annotations(){return(0,r.shadow)(this,"annotations",this._getInheritableProperty("Annots")||[])}get _parsedAnnotations(){const e=this.pdfManager.ensure(this,"annotations").then(()=>{const e=this.annotations,t=[];for(let a=0,r=e.length;a<r;a++)t.push(c.AnnotationFactory.create(this.xref,e[a],this.pdfManager,this.idFactory));return Promise.all(t).then((function(e){return e.filter((function(e){return!!e}))}),(function(e){(0,r.warn)(`_parsedAnnotations: "${e}".`);return[]}))});return(0,r.shadow)(this,"_parsedAnnotations",e)}}t.Page=p;const b=new Uint8Array([37,80,68,70,45]),y=new Uint8Array([115,116,97,114,116,120,114,101,102]),v=new Uint8Array([101,110,100,111,98,106]),w=/^[1-9]\.[0-9]$/;function k(e,t,a=1024,r=!1){const i=t.length,n=e.peekBytes(a),s=n.length-i;if(s<=0)return!1;if(r){const a=i-1;let r=n.length-1;for(;r>=a;){let s=0;for(;s<i&&n[r-s]===t[a-s];)s++;if(s>=i){e.pos+=r-a;return!0}r--}}else{let a=0;for(;a<=s;){let r=0;for(;r<i&&n[a+r]===t[r];)r++;if(r>=i){e.pos+=a;return!0}a++}}return!1}t.PDFDocument=class{constructor(e,t){let a;if((0,n.isStream)(t))a=t;else{if(!(0,r.isArrayBuffer)(t))throw new Error("PDFDocument: Unknown argument type");a=new o.Stream(t)}if(a.length<=0)throw new r.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=e;this.stream=a;this.xref=new i.XRef(a,e);this.pdfFunctionFactory=new f.PDFFunctionFactory({xref:this.xref,isEvalSupported:e.evaluatorOptions.isEvalSupported});this._pagePromises=[]}parse(e){this.setup(e);const t=this.catalog.catDict.get("Version");(0,n.isName)(t)&&(this.pdfFormatVersion=t.name);try{this.acroForm=this.catalog.catDict.get("AcroForm");if(this.acroForm){this.xfa=this.acroForm.get("XFA");const e=this.acroForm.get("Fields");Array.isArray(e)&&0!==e.length||this.xfa||(this.acroForm=null)}}catch(e){if(e instanceof s.MissingDataException)throw e;(0,r.info)("Cannot fetch AcroForm entry; assuming no AcroForms are present");this.acroForm=null}try{const e=this.catalog.catDict.get("Collection");(0,n.isDict)(e)&&e.getKeys().length>0&&(this.collection=e)}catch(e){if(e instanceof s.MissingDataException)throw e;(0,r.info)("Cannot fetch Collection dictionary.")}}get linearization(){let e=null;try{e=h.Linearization.create(this.stream)}catch(e){if(e instanceof s.MissingDataException)throw e;(0,r.info)(e)}return(0,r.shadow)(this,"linearization",e)}get startXRef(){const e=this.stream;let t=0;if(this.linearization){e.reset();k(e,v)&&(t=e.pos+6-e.start)}else{const a=1024,r=y.length;let i=!1,n=e.end;for(;!i&&n>0;){n-=a-r;n<0&&(n=0);e.pos=n;i=k(e,y,a,!0)}if(i){e.skip(9);let a;do{a=e.getByte()}while((0,s.isWhiteSpace)(a));let r="";for(;a>=32&&a<=57;){r+=String.fromCharCode(a);a=e.getByte()}t=parseInt(r,10);isNaN(t)&&(t=0)}}return(0,r.shadow)(this,"startXRef",t)}checkHeader(){const e=this.stream;e.reset();if(!k(e,b))return;e.moveStart();let t,a="";for(;(t=e.getByte())>32&&!(a.length>=12);)a+=String.fromCharCode(t);this.pdfFormatVersion||(this.pdfFormatVersion=a.substring(5))}parseStartXRef(){this.xref.setStartXRef(this.startXRef)}setup(e){this.xref.parse(e);this.catalog=new i.Catalog(this.pdfManager,this.xref)}get numPages(){const e=this.linearization,t=e?e.numPages:this.catalog.numPages;return(0,r.shadow)(this,"numPages",t)}get documentInfo(){const e={Title:r.isString,Author:r.isString,Subject:r.isString,Keywords:r.isString,Creator:r.isString,Producer:r.isString,CreationDate:r.isString,ModDate:r.isString,Trapped:n.isName};let t=this.pdfFormatVersion;if("string"!=typeof t||!w.test(t)){(0,r.warn)(`Invalid PDF header version number: ${t}`);t=null}const a={PDFFormatVersion:t,IsLinearized:!!this.linearization,IsAcroFormPresent:!!this.acroForm,IsXFAPresent:!!this.xfa,IsCollectionPresent:!!this.collection};let i;try{i=this.xref.trailer.get("Info")}catch(e){if(e instanceof s.MissingDataException)throw e;(0,r.info)("The document information dictionary is invalid.")}if((0,n.isDict)(i))for(const t of i.getKeys()){const s=i.get(t);if(e[t])e[t](s)?a[t]="string"!=typeof s?s:(0,r.stringToPDFString)(s):(0,r.info)(`Bad value in document info for "${t}".`);else if("string"==typeof t){let e;if((0,r.isString)(s))e=(0,r.stringToPDFString)(s);else{if(!((0,n.isName)(s)||(0,r.isNum)(s)||(0,r.isBool)(s))){(0,r.info)(`Unsupported value in document info for (custom) "${t}".`);continue}e=s}a.Custom||(a.Custom=Object.create(null));a.Custom[t]=e}}return(0,r.shadow)(this,"documentInfo",a)}get fingerprint(){let e;const t=this.xref.trailer.get("ID");e=Array.isArray(t)&&t[0]&&(0,r.isString)(t[0])&&"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"!==t[0]?(0,r.stringToBytes)(t[0]):(0,l.calculateMD5)(this.stream.getByteRange(0,1024),0,1024);const a=[];for(let t=0,r=e.length;t<r;t++){const r=e[t].toString(16);a.push(r.padStart(2,"0"))}return(0,r.shadow)(this,"fingerprint",a.join(""))}_getLinearizationPage(e){const{catalog:t,linearization:a}=this;(0,r.assert)(a&&a.pageFirst===e);const i=n.Ref.get(a.objectNumberFirst,0);return this.xref.fetchAsync(i).then(e=>{if((0,n.isDict)(e,"Page")||(0,n.isDict)(e)&&!e.has("Type")&&e.has("Contents")){i&&!t.pageKidsCountCache.has(i)&&t.pageKidsCountCache.put(i,1);return[e,i]}throw new r.FormatError("The Linearization dictionary doesn't point to a valid Page dictionary.")}).catch(a=>{(0,r.info)(a);return t.getPageDict(e)})}getPage(e){if(void 0!==this._pagePromises[e])return this._pagePromises[e];const{catalog:t,linearization:a}=this,r=a&&a.pageFirst===e?this._getLinearizationPage(e):t.getPageDict(e);return this._pagePromises[e]=r.then(([a,r])=>new p({pdfManager:this.pdfManager,xref:this.xref,pageIndex:e,pageDict:a,ref:r,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,pdfFunctionFactory:this.pdfFunctionFactory}))}checkFirstPage(){return this.getPage(0).catch(async e=>{if(e instanceof s.XRefEntryException){this._pagePromises.length=0;await this.cleanup();throw new s.XRefParseException}})}fontFallback(e,t){return this.catalog.fontFallback(e,t)}async cleanup(){return this.catalog?this.catalog.cleanup():(0,n.clearPrimitiveCaches)()}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.FileSpec=t.XRef=t.ObjectLoader=t.Catalog=void 0;var r=a(2),i=a(4),n=a(10),s=a(7),o=a(21),c=a(22);function l(e){return(0,i.isDict)(e)?e.get("D"):e}class h{constructor(e,t){this.pdfManager=e;this.xref=t;this.catDict=t.getCatalogObj();if(!(0,i.isDict)(this.catDict))throw new r.FormatError("Catalog object is not a dictionary.");this.fontCache=new i.RefSetCache;this.builtInCMapCache=new Map;this.pageKidsCountCache=new i.RefSetCache}get metadata(){const e=this.catDict.getRaw("Metadata");if(!(0,i.isRef)(e))return(0,r.shadow)(this,"metadata",null);const t=!(this.xref.encrypt&&this.xref.encrypt.encryptMetadata),a=this.xref.fetch(e,t);let n;if(a&&(0,i.isDict)(a.dict)){const e=a.dict.get("Type"),t=a.dict.get("Subtype");if((0,i.isName)(e,"Metadata")&&(0,i.isName)(t,"XML"))try{n=(0,r.stringToUTF8String)((0,r.bytesToString)(a.getBytes()))}catch(e){if(e instanceof s.MissingDataException)throw e;(0,r.info)("Skipping invalid metadata.")}}return(0,r.shadow)(this,"metadata",n)}get toplevelPagesDict(){const e=this.catDict.get("Pages");if(!(0,i.isDict)(e))throw new r.FormatError("Invalid top-level pages dictionary.");return(0,r.shadow)(this,"toplevelPagesDict",e)}get documentOutline(){let e=null;try{e=this._readDocumentOutline()}catch(e){if(e instanceof s.MissingDataException)throw e;(0,r.warn)("Unable to read document outline.")}return(0,r.shadow)(this,"documentOutline",e)}_readDocumentOutline(){let e=this.catDict.get("Outlines");if(!(0,i.isDict)(e))return null;e=e.getRaw("First");if(!(0,i.isRef)(e))return null;const t={items:[]},a=[{obj:e,parent:t}],n=new i.RefSet;n.put(e);const s=this.xref,o=new Uint8ClampedArray(3);for(;a.length>0;){const t=a.shift(),l=s.fetchIfRef(t.obj);if(null===l)continue;if(!l.has("Title"))throw new r.FormatError("Invalid outline item encountered.");const u={url:null,dest:null};h.parseDestDictionary({destDict:l,resultObj:u,docBaseUrl:this.pdfManager.docBaseUrl});const d=l.get("Title"),f=l.get("F")||0,g=l.getArray("C"),m=l.get("Count");let p=o;!Array.isArray(g)||3!==g.length||0===g[0]&&0===g[1]&&0===g[2]||(p=c.ColorSpace.singletons.rgb.getRgb(g,0));const b={dest:u.dest,url:u.url,unsafeUrl:u.unsafeUrl,newWindow:u.newWindow,title:(0,r.stringToPDFString)(d),color:p,count:Number.isInteger(m)?m:void 0,bold:!!(2&f),italic:!!(1&f),items:[]};t.parent.items.push(b);e=l.getRaw("First");if((0,i.isRef)(e)&&!n.has(e)){a.push({obj:e,parent:b});n.put(e)}e=l.getRaw("Next");if((0,i.isRef)(e)&&!n.has(e)){a.push({obj:e,parent:t.parent});n.put(e)}}return t.items.length>0?t.items:null}get permissions(){let e=null;try{e=this._readPermissions()}catch(e){if(e instanceof s.MissingDataException)throw e;(0,r.warn)("Unable to read permissions.")}return(0,r.shadow)(this,"permissions",e)}_readPermissions(){const e=this.xref.trailer.get("Encrypt");if(!(0,i.isDict)(e))return null;let t=e.get("P");if(!(0,r.isNum)(t))return null;t+=2**32;const a=[];for(const e in r.PermissionFlag){const i=r.PermissionFlag[e];t&i&&a.push(i)}return a}get numPages(){const e=this.toplevelPagesDict.get("Count");if(!Number.isInteger(e))throw new r.FormatError("Page count in top-level pages dictionary is not an integer.");return(0,r.shadow)(this,"numPages",e)}get destinations(){const e=this._readDests(),t=Object.create(null);if(e instanceof f){const a=e.getAll();for(const e in a)t[e]=l(a[e])}else e instanceof i.Dict&&e.forEach((function(e,a){a&&(t[e]=l(a))}));return(0,r.shadow)(this,"destinations",t)}getDestination(e){const t=this._readDests();return t instanceof f||t instanceof i.Dict?l(t.get(e)||null):null}_readDests(){const e=this.catDict.get("Names");return e&&e.has("Dests")?new f(e.getRaw("Dests"),this.xref):this.catDict.has("Dests")?this.catDict.get("Dests"):void 0}get pageLabels(){let e=null;try{e=this._readPageLabels()}catch(e){if(e instanceof s.MissingDataException)throw e;(0,r.warn)("Unable to read page labels.")}return(0,r.shadow)(this,"pageLabels",e)}_readPageLabels(){const e=this.catDict.getRaw("PageLabels");if(!e)return null;const t=new Array(this.numPages);let a=null,n="";const o=new g(e,this.xref).getAll();let c="",l=1;for(let e=0,h=this.numPages;e<h;e++){if(e in o){const t=o[e];if(!(0,i.isDict)(t))throw new r.FormatError("PageLabel is not a dictionary.");if(t.has("Type")&&!(0,i.isName)(t.get("Type"),"PageLabel"))throw new r.FormatError("Invalid type in PageLabel dictionary.");if(t.has("S")){const e=t.get("S");if(!(0,i.isName)(e))throw new r.FormatError("Invalid style in PageLabel dictionary.");a=e.name}else a=null;if(t.has("P")){const e=t.get("P");if(!(0,r.isString)(e))throw new r.FormatError("Invalid prefix in PageLabel dictionary.");n=(0,r.stringToPDFString)(e)}else n="";if(t.has("St")){const e=t.get("St");if(!(Number.isInteger(e)&&e>=1))throw new r.FormatError("Invalid start in PageLabel dictionary.");l=e}else l=1}switch(a){case"D":c=l;break;case"R":case"r":c=(0,s.toRomanNumerals)(l,"r"===a);break;case"A":case"a":const e=26,t=65,i=97,n="a"===a?i:t,o=l-1,h=String.fromCharCode(n+o%e),u=[];for(let t=0,a=o/e|0;t<=a;t++)u.push(h);c=u.join("");break;default:if(a)throw new r.FormatError(`Invalid style "${a}" in PageLabel dictionary.`);c=""}t[e]=n+c;l++}return t}get pageLayout(){const e=this.catDict.get("PageLayout");let t="";if((0,i.isName)(e))switch(e.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=e.name}return(0,r.shadow)(this,"pageLayout",t)}get pageMode(){const e=this.catDict.get("PageMode");let t="UseNone";if((0,i.isName)(e))switch(e.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=e.name}return(0,r.shadow)(this,"pageMode",t)}get viewerPreferences(){const e={HideToolbar:r.isBool,HideMenubar:r.isBool,HideWindowUI:r.isBool,FitWindow:r.isBool,CenterWindow:r.isBool,DisplayDocTitle:r.isBool,NonFullScreenPageMode:i.isName,Direction:i.isName,ViewArea:i.isName,ViewClip:i.isName,PrintArea:i.isName,PrintClip:i.isName,PrintScaling:i.isName,Duplex:i.isName,PickTrayByPDFSize:r.isBool,PrintPageRange:Array.isArray,NumCopies:Number.isInteger},t=this.catDict.get("ViewerPreferences"),a=Object.create(null);if((0,i.isDict)(t))for(const i in e){if(!t.has(i))continue;const n=t.get(i);if(!e[i](n)){(0,r.info)(`Bad value in ViewerPreferences for "${i}".`);continue}let s;switch(i){case"NonFullScreenPageMode":switch(n.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":s=n.name;break;default:s="UseNone"}break;case"Direction":switch(n.name){case"L2R":case"R2L":s=n.name;break;default:s="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":switch(n.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":s=n.name;break;default:s="CropBox"}break;case"PrintScaling":switch(n.name){case"None":case"AppDefault":s=n.name;break;default:s="AppDefault"}break;case"Duplex":switch(n.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":s=n.name;break;default:s="None"}break;case"PrintPageRange":if(n.length%2!=0)break;n.every((e,t,a)=>Number.isInteger(e)&&e>0&&(0===t||e>=a[t-1])&&e<=this.numPages)&&(s=n);break;case"NumCopies":n>0&&(s=n);break;default:(0,r.assert)("boolean"==typeof n);s=n}void 0!==s?a[i]=s:(0,r.info)(`Bad value in ViewerPreferences for "${i}".`)}return(0,r.shadow)(this,"viewerPreferences",a)}get openAction(){const e=this.catDict.get("OpenAction");let t=null;if((0,i.isDict)(e)){const a=new i.Dict(this.xref);a.set("A",e);const r={url:null,dest:null,action:null};h.parseDestDictionary({destDict:a,resultObj:r});if(Array.isArray(r.dest)){t||(t=Object.create(null));t.dest=r.dest}else if(r.action){t||(t=Object.create(null));t.action=r.action}}else if(Array.isArray(e)){t||(t=Object.create(null));t.dest=e}return(0,r.shadow)(this,"openAction",t)}get attachments(){const e=this.catDict.get("Names");let t=null;if(e&&e.has("EmbeddedFiles")){const a=new f(e.getRaw("EmbeddedFiles"),this.xref).getAll();for(const e in a){const i=new m(a[e],this.xref);t||(t=Object.create(null));t[(0,r.stringToPDFString)(e)]=i.serializable}}return(0,r.shadow)(this,"attachments",t)}get javaScript(){const e=this.catDict.get("Names");let t=null;function a(e){const a=e.get("S");if(!(0,i.isName)(a,"JavaScript"))return;let n=e.get("JS");if((0,i.isStream)(n))n=(0,r.bytesToString)(n.getBytes());else if(!(0,r.isString)(n))return;t||(t=[]);t.push((0,r.stringToPDFString)(n))}if(e&&e.has("JavaScript")){const t=new f(e.getRaw("JavaScript"),this.xref).getAll();for(const e in t){const r=t[e];(0,i.isDict)(r)&&a(r)}}const n=this.catDict.get("OpenAction");(0,i.isDict)(n)&&(0,i.isName)(n.get("S"),"JavaScript")&&a(n);return(0,r.shadow)(this,"javaScript",t)}fontFallback(e,t){const a=[];this.fontCache.forEach((function(e){a.push(e)}));return Promise.all(a).then(a=>{for(const r of a)if(r.loadedName===e){r.fallback(t);return}})}cleanup(){(0,i.clearPrimitiveCaches)();this.pageKidsCountCache.clear();const e=[];this.fontCache.forEach((function(t){e.push(t)}));return Promise.all(e).then(e=>{for(const{dict:t}of e)delete t.translated;this.fontCache.clear();this.builtInCMapCache.clear()})}getPageDict(e){const t=(0,r.createPromiseCapability)(),a=[this.catDict.getRaw("Pages")],n=new i.RefSet,s=this.xref,o=this.pageKidsCountCache;let c,l=0;!function h(){for(;a.length;){const u=a.pop();if((0,i.isRef)(u)){c=o.get(u);if(c>0&&l+c<e){l+=c;continue}if(n.has(u)){t.reject(new r.FormatError("Pages tree contains circular reference."));return}n.put(u);s.fetchAsync(u).then((function(r){if((0,i.isDict)(r,"Page")||(0,i.isDict)(r)&&!r.has("Kids"))if(e===l){u&&!o.has(u)&&o.put(u,1);t.resolve([r,u])}else{l++;h()}else{a.push(r);h()}}),t.reject);return}if(!(0,i.isDict)(u)){t.reject(new r.FormatError("Page dictionary kid reference points to wrong type of object."));return}c=u.get("Count");if(Number.isInteger(c)&&c>=0){const t=u.objId;t&&!o.has(t)&&o.put(t,c);if(l+c<=e){l+=c;continue}}const d=u.get("Kids");if(!Array.isArray(d)){if((0,i.isName)(u.get("Type"),"Page")||!u.has("Type")&&u.has("Contents")){if(l===e){t.resolve([u,null]);return}l++;continue}t.reject(new r.FormatError("Page dictionary kids object is not an array."));return}for(let e=d.length-1;e>=0;e--)a.push(d[e])}t.reject(new Error(`Page index ${e} not found.`))}();return t.promise}getPageIndex(e){const t=this.xref;let a=0;return function n(s){return function(a){let n,s=0;return t.fetchAsync(a).then((function(t){if((0,i.isRefsEqual)(a,e)&&!(0,i.isDict)(t,"Page")&&(!(0,i.isDict)(t)||t.has("Type")||!t.has("Contents")))throw new r.FormatError("The reference does not point to a /Page dictionary.");if(!t)return null;if(!(0,i.isDict)(t))throw new r.FormatError("Node must be a dictionary.");n=t.getRaw("Parent");return t.getAsync("Parent")})).then((function(e){if(!e)return null;if(!(0,i.isDict)(e))throw new r.FormatError("Parent must be a dictionary.");return e.getAsync("Kids")})).then((function(e){if(!e)return null;const o=[];let c=!1;for(let n=0,l=e.length;n<l;n++){const l=e[n];if(!(0,i.isRef)(l))throw new r.FormatError("Kid must be a reference.");if((0,i.isRefsEqual)(l,a)){c=!0;break}o.push(t.fetchAsync(l).then((function(e){if(!(0,i.isDict)(e))throw new r.FormatError("Kid node must be a dictionary.");e.has("Count")?s+=e.get("Count"):s++})))}if(!c)throw new r.FormatError("Kid reference not found in parent's kids.");return Promise.all(o).then((function(){return[s,n]}))}))}(s).then((function(e){if(!e)return a;const[t,r]=e;a+=t;return n(r)}))}(e)}static parseDestDictionary(e){const t=e.destDict;if(!(0,i.isDict)(t)){(0,r.warn)("parseDestDictionary: `destDict` must be a dictionary.");return}const a=e.resultObj;if("object"!=typeof a){(0,r.warn)("parseDestDictionary: `resultObj` must be an object.");return}const n=e.docBaseUrl||null;let s,o,c=t.get("A");!(0,i.isDict)(c)&&t.has("Dest")&&(c=t.get("Dest"));if((0,i.isDict)(c)){const e=c.get("S");if(!(0,i.isName)(e)){(0,r.warn)("parseDestDictionary: Invalid type in Action dictionary.");return}const t=e.name;switch(t){case"URI":s=c.get("URI");(0,i.isName)(s)?s="/"+s.name:(0,r.isString)(s)&&(s=function(e){return e.startsWith("www.")?`http://${e}`:e}(s));break;case"GoTo":o=c.get("D");break;case"Launch":case"GoToR":const e=c.get("F");(0,i.isDict)(e)?s=e.get("F")||null:(0,r.isString)(e)&&(s=e);let n=c.get("D");if(n){(0,i.isName)(n)&&(n=n.name);if((0,r.isString)(s)){const e=s.split("#")[0];(0,r.isString)(n)?s=e+"#"+n:Array.isArray(n)&&(s=e+"#"+JSON.stringify(n))}}const l=c.get("NewWindow");(0,r.isBool)(l)&&(a.newWindow=l);break;case"Named":const h=c.get("N");(0,i.isName)(h)&&(a.action=h.name);break;case"JavaScript":const u=c.get("JS");let d;(0,i.isStream)(u)?d=(0,r.bytesToString)(u.getBytes()):(0,r.isString)(u)&&(d=u);if(d){const e=new RegExp("^\\s*("+["app.launchURL","window.open"].join("|").split(".").join("\\.")+")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))","i").exec((0,r.stringToPDFString)(d));if(e&&e[2]){s=e[2];"true"===e[3]&&"app.launchURL"===e[1]&&(a.newWindow=!0);break}}default:(0,r.warn)(`parseDestDictionary: unsupported action type "${t}".`)}}else t.has("Dest")&&(o=t.get("Dest"));if((0,r.isString)(s)){s=function(e){try{return(0,r.stringToUTF8String)(e)}catch(t){return e}}(s);const e=(0,r.createValidAbsoluteUrl)(s,n);e&&(a.url=e.href);a.unsafeUrl=s}if(o){(0,i.isName)(o)&&(o=o.name);((0,r.isString)(o)||Array.isArray(o))&&(a.dest=o)}}}t.Catalog=h;var u=function(){function e(e,t){this.stream=e;this.pdfManager=t;this.entries=[];this.xrefstms=Object.create(null);this._cacheMap=new Map;this.stats={streamTypes:Object.create(null),fontTypes:Object.create(null)}}e.prototype={setStartXRef:function(e){this.startXRefQueue=[e]},parse:function(e){var t;if(e){(0,r.warn)("Indexing all PDF objects");t=this.indexObjects()}else t=this.readXRef();t.assignXref(this);this.trailer=t;let a,n;try{a=t.get("Encrypt")}catch(e){if(e instanceof s.MissingDataException)throw e;(0,r.warn)(`XRef.parse - Invalid "Encrypt" reference: "${e}".`)}if((0,i.isDict)(a)){var c=t.get("ID"),l=c&&c.length?c[0]:"";a.suppressEncryption=!0;this.encrypt=new o.CipherTransformFactory(a,l,this.pdfManager.password)}try{n=t.get("Root")}catch(e){if(e instanceof s.MissingDataException)throw e;(0,r.warn)(`XRef.parse - Invalid "Root" reference: "${e}".`)}if(!(0,i.isDict)(n)||!n.has("Pages")){if(!e)throw new s.XRefParseException;throw new r.FormatError("Invalid root reference")}this.root=n},processXRefTable:function(e){"tableState"in this||(this.tableState={entryNum:0,streamPos:e.lexer.stream.pos,parserBuf1:e.buf1,parserBuf2:e.buf2});var t=this.readXRefTable(e);if(!(0,i.isCmd)(t,"trailer"))throw new r.FormatError("Invalid XRef table: could not find trailer dictionary");var a=e.getObj();!(0,i.isDict)(a)&&a.dict&&(a=a.dict);if(!(0,i.isDict)(a))throw new r.FormatError("Invalid XRef table: could not parse trailer dictionary");delete this.tableState;return a},readXRefTable:function(e){var t,a=e.lexer.stream,n=this.tableState;a.pos=n.streamPos;e.buf1=n.parserBuf1;e.buf2=n.parserBuf2;for(;;){if(!("firstEntryNum"in n)||!("entryCount"in n)){if((0,i.isCmd)(t=e.getObj(),"trailer"))break;n.firstEntryNum=t;n.entryCount=e.getObj()}var s=n.firstEntryNum,o=n.entryCount;if(!Number.isInteger(s)||!Number.isInteger(o))throw new r.FormatError("Invalid XRef table: wrong types in subsection header");for(var c=n.entryNum;c<o;c++){n.streamPos=a.pos;n.entryNum=c;n.parserBuf1=e.buf1;n.parserBuf2=e.buf2;var l={};l.offset=e.getObj();l.gen=e.getObj();var h=e.getObj();if(h instanceof i.Cmd)switch(h.cmd){case"f":l.free=!0;break;case"n":l.uncompressed=!0}if(!Number.isInteger(l.offset)||!Number.isInteger(l.gen)||!l.free&&!l.uncompressed)throw new r.FormatError(`Invalid entry in XRef subsection: ${s}, ${o}`);0===c&&l.free&&1===s&&(s=0);this.entries[c+s]||(this.entries[c+s]=l)}n.entryNum=0;n.streamPos=a.pos;n.parserBuf1=e.buf1;n.parserBuf2=e.buf2;delete n.firstEntryNum;delete n.entryCount}if(this.entries[0]&&!this.entries[0].free)throw new r.FormatError("Invalid XRef table: unexpected first object");return t},processXRefStream:function(e){if(!("streamState"in this)){var t=e.dict,a=t.get("W"),r=t.get("Index");r||(r=[0,t.get("Size")]);this.streamState={entryRanges:r,byteWidths:a,entryNum:0,streamPos:e.pos}}this.readXRefStream(e);delete this.streamState;return e.dict},readXRefStream:function(e){var t,a,i=this.streamState;e.pos=i.streamPos;for(var n=i.byteWidths,s=n[0],o=n[1],c=n[2],l=i.entryRanges;l.length>0;){var h=l[0],u=l[1];if(!Number.isInteger(h)||!Number.isInteger(u))throw new r.FormatError(`Invalid XRef range fields: ${h}, ${u}`);if(!Number.isInteger(s)||!Number.isInteger(o)||!Number.isInteger(c))throw new r.FormatError(`Invalid XRef entry fields length: ${h}, ${u}`);for(t=i.entryNum;t<u;++t){i.entryNum=t;i.streamPos=e.pos;var d=0,f=0,g=0;for(a=0;a<s;++a)d=d<<8|e.getByte();0===s&&(d=1);for(a=0;a<o;++a)f=f<<8|e.getByte();for(a=0;a<c;++a)g=g<<8|e.getByte();var m={};m.offset=f;m.gen=g;switch(d){case 0:m.free=!0;break;case 1:m.uncompressed=!0;break;case 2:break;default:throw new r.FormatError(`Invalid XRef entry type: ${d}`)}this.entries[h+t]||(this.entries[h+t]=m)}i.entryNum=0;i.streamPos=e.pos;l.splice(0,2)}},indexObjects:function(){function e(e,t){for(var a="",r=e[t];10!==r&&13!==r&&60!==r&&!(++t>=e.length);){a+=String.fromCharCode(r);r=e[t]}return a}function t(e,t,a){for(var r=a.length,i=e.length,n=0;t<i;){for(var s=0;s<r&&e[t+s]===a[s];)++s;if(s>=r)break;t++;n++}return n}var a=/^(\d+)\s+(\d+)\s+obj\b/;const o=/\bendobj[\b\s]$/,c=/\s+(\d+\s+\d+\s+obj[\b\s<])$/;var l=new Uint8Array([116,114,97,105,108,101,114]),h=new Uint8Array([115,116,97,114,116,120,114,101,102]);const u=new Uint8Array([111,98,106]);var d=new Uint8Array([47,88,82,101,102]);this.entries.length=0;var f=this.stream;f.pos=0;for(var g,m,p=f.getBytes(),b=f.start,y=p.length,v=[],w=[];b<y;){var k=p[b];if(9!==k&&10!==k&&13!==k&&32!==k)if(37!==k){var S,C=e(p,b);if(C.startsWith("xref")&&(4===C.length||/\s/.test(C[4]))){b+=t(p,b,l);v.push(b);b+=t(p,b,h)}else if(S=a.exec(C)){const e=0|S[1],a=0|S[2];this.entries[e]&&this.entries[e].gen!==a||(this.entries[e]={offset:b-f.start,gen:a,uncompressed:!0});let i,n=b+C.length;for(;n<p.length;){const e=n+t(p,n,u)+4;i=e-b;const a=Math.max(e-25,n),s=(0,r.bytesToString)(p.subarray(a,e));if(o.test(s))break;{const e=c.exec(s);if(e&&e[1]){(0,r.warn)('indexObjects: Found new "obj" inside of another "obj", caused by missing "endobj" -- trying to recover.');i-=e[1].length;break}}n=e}const s=p.subarray(b,b+i);var x=t(s,0,d);if(x<i&&s[x+5]<64){w.push(b-f.start);this.xrefstms[b-f.start]=1}b+=i}else if(C.startsWith("trailer")&&(7===C.length||/\s/.test(C[7]))){v.push(b);b+=t(p,b,h)}else b+=C.length+1}else do{if(++b>=y)break;k=p[b]}while(10!==k&&13!==k);else++b}for(g=0,m=w.length;g<m;++g){this.startXRefQueue.push(w[g]);this.readXRef(!0)}let A;for(g=0,m=v.length;g<m;++g){f.pos=v[g];const e=new n.Parser({lexer:new n.Lexer(f),xref:this,allowStreams:!0,recoveryMode:!0});var I=e.getObj();if(!(0,i.isCmd)(I,"trailer"))continue;const t=e.getObj();if(!(0,i.isDict)(t))continue;let a;try{a=t.get("Root")}catch(e){if(e instanceof s.MissingDataException)throw e;continue}if((0,i.isDict)(a)&&a.has("Pages")){if(t.has("ID"))return t;A=t}}if(A)return A;throw new r.InvalidPDFException("Invalid PDF structure.")},readXRef:function(e){var t=this.stream;const a=Object.create(null);try{for(;this.startXRefQueue.length;){var o=this.startXRefQueue[0];if(a[o]){(0,r.warn)("readXRef - skipping XRef table since it was already parsed.");this.startXRefQueue.shift();continue}a[o]=!0;t.pos=o+t.start;const e=new n.Parser({lexer:new n.Lexer(t),xref:this,allowStreams:!0});var c,l=e.getObj();if((0,i.isCmd)(l,"xref")){c=this.processXRefTable(e);this.topDict||(this.topDict=c);l=c.get("XRefStm");if(Number.isInteger(l)){var h=l;if(!(h in this.xrefstms)){this.xrefstms[h]=1;this.startXRefQueue.push(h)}}}else{if(!Number.isInteger(l))throw new r.FormatError("Invalid XRef stream header");if(!Number.isInteger(e.getObj())||!(0,i.isCmd)(e.getObj(),"obj")||!(0,i.isStream)(l=e.getObj()))throw new r.FormatError("Invalid XRef stream");c=this.processXRefStream(l);this.topDict||(this.topDict=c);if(!c)throw new r.FormatError("Failed to read XRef stream")}l=c.get("Prev");Number.isInteger(l)?this.startXRefQueue.push(l):(0,i.isRef)(l)&&this.startXRefQueue.push(l.num);this.startXRefQueue.shift()}return this.topDict}catch(e){if(e instanceof s.MissingDataException)throw e;(0,r.info)("(while reading XRef): "+e)}if(!e)throw new s.XRefParseException},getEntry:function(e){var t=this.entries[e];return t&&!t.free&&t.offset?t:null},fetchIfRef:function(e,t){return e instanceof i.Ref?this.fetch(e,t):e},fetch:function(e,t){if(!(e instanceof i.Ref))throw new Error("ref object is not a reference");const a=e.num,r=this._cacheMap.get(a);if(void 0!==r){r instanceof i.Dict&&!r.objId&&(r.objId=e.toString());return r}let n=this.getEntry(a);if(null===n){this._cacheMap.set(a,n);return n}n=n.uncompressed?this.fetchUncompressed(e,n,t):this.fetchCompressed(e,n,t);(0,i.isDict)(n)?n.objId=e.toString():(0,i.isStream)(n)&&(n.dict.objId=e.toString());return n},fetchUncompressed(e,t,a=!1){var r=e.gen,o=e.num;if(t.gen!==r)throw new s.XRefEntryException(`Inconsistent generation in XRef: ${e}`);var c=this.stream.makeSubStream(t.offset+this.stream.start);const l=new n.Parser({lexer:new n.Lexer(c),xref:this,allowStreams:!0});var h=l.getObj(),u=l.getObj(),d=l.getObj();if(h!==o||u!==r||!(d instanceof i.Cmd))throw new s.XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`);if("obj"!==d.cmd){if(d.cmd.startsWith("obj")){o=parseInt(d.cmd.substring(3),10);if(!Number.isNaN(o))return o}throw new s.XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`)}t=this.encrypt&&!a?l.getObj(this.encrypt.createCipherTransform(o,r)):l.getObj();(0,i.isStream)(t)||this._cacheMap.set(o,t);return t},fetchCompressed(e,t,a=!1){const o=t.offset,c=this.fetch(i.Ref.get(o,0));if(!(0,i.isStream)(c))throw new r.FormatError("bad ObjStm stream");const l=c.dict.get("First"),h=c.dict.get("N");if(!Number.isInteger(l)||!Number.isInteger(h))throw new r.FormatError("invalid first and n parameters for ObjStm stream");const u=new n.Parser({lexer:new n.Lexer(c),xref:this,allowStreams:!0}),d=new Array(h);for(let e=0;e<h;++e){const t=u.getObj();if(!Number.isInteger(t))throw new r.FormatError(`invalid object number in the ObjStm stream: ${t}`);const a=u.getObj();if(!Number.isInteger(a))throw new r.FormatError(`invalid object offset in the ObjStm stream: ${a}`);d[e]=t}const f=new Array(h);for(let e=0;e<h;++e){const t=u.getObj();f[e]=t;u.buf1 instanceof i.Cmd&&"endobj"===u.buf1.cmd&&u.shift();if((0,i.isStream)(t))continue;const a=d[e],r=this.entries[a];r&&r.offset===o&&r.gen===e&&this._cacheMap.set(a,t)}if(void 0===(t=f[t.gen]))throw new s.XRefEntryException(`Bad (compressed) XRef entry: ${e}`);return t},async fetchIfRefAsync(e,t){return e instanceof i.Ref?this.fetchAsync(e,t):e},async fetchAsync(e,t){try{return this.fetch(e,t)}catch(a){if(!(a instanceof s.MissingDataException))throw a;await this.pdfManager.requestRange(a.begin,a.end);return this.fetchAsync(e,t)}},getCatalogObj:function(){return this.root}};return e}();t.XRef=u;class d{constructor(e,t,a){this.constructor===d&&(0,r.unreachable)("Cannot initialize NameOrNumberTree.");this.root=e;this.xref=t;this._type=a}getAll(){const e=Object.create(null);if(!this.root)return e;const t=this.xref,a=new i.RefSet;a.put(this.root);const n=[this.root];for(;n.length>0;){const s=t.fetchIfRef(n.shift());if(!(0,i.isDict)(s))continue;if(s.has("Kids")){const e=s.get("Kids");for(let t=0,i=e.length;t<i;t++){const i=e[t];if(a.has(i))throw new r.FormatError(`Duplicate entry in "${this._type}" tree.`);n.push(i);a.put(i)}continue}const o=s.get(this._type);if(Array.isArray(o))for(let a=0,r=o.length;a<r;a+=2)e[t.fetchIfRef(o[a])]=t.fetchIfRef(o[a+1])}return e}get(e){if(!this.root)return null;const t=this.xref;let a=t.fetchIfRef(this.root),i=0;for(;a.has("Kids");){if(++i>10){(0,r.warn)(`Search depth limit reached for "${this._type}" tree.`);return null}const n=a.get("Kids");if(!Array.isArray(n))return null;let s=0,o=n.length-1;for(;s<=o;){const r=s+o>>1,i=t.fetchIfRef(n[r]).get("Limits");if(e<t.fetchIfRef(i[0]))o=r-1;else{if(!(e>t.fetchIfRef(i[1]))){a=t.fetchIfRef(n[r]);break}s=r+1}}if(s>o)return null}const n=a.get(this._type);if(Array.isArray(n)){let a=0,i=n.length-2;for(;a<=i;){const r=a+i>>1,s=r+(1&r),o=t.fetchIfRef(n[s]);if(e<o)i=s-2;else{if(!(e>o))return t.fetchIfRef(n[s+1]);a=s+2}}(0,r.info)(`Falling back to an exhaustive search, for key "${e}", `+`in "${this._type}" tree.`);for(let a=0,i=n.length;a<i;a+=2){if(t.fetchIfRef(n[a])===e){(0,r.warn)(`The "${e}" key was found at an incorrect, `+`i.e. out-of-order, position in "${this._type}" tree.`);return t.fetchIfRef(n[a+1])}}}return null}}class f extends d{constructor(e,t){super(e,t,"Names")}}class g extends d{constructor(e,t){super(e,t,"Nums")}}var m=function(){function e(e,t){if(e&&(0,i.isDict)(e)){this.xref=t;this.root=e;e.has("FS")&&(this.fs=e.get("FS"));this.description=e.has("Desc")?(0,r.stringToPDFString)(e.get("Desc")):"";e.has("RF")&&(0,r.warn)("Related file specifications are not supported");this.contentAvailable=!0;if(!e.has("EF")){this.contentAvailable=!1;(0,r.warn)("Non-embedded file specifications are not supported")}}}function t(e){return e.has("UF")?e.get("UF"):e.has("F")?e.get("F"):e.has("Unix")?e.get("Unix"):e.has("Mac")?e.get("Mac"):e.has("DOS")?e.get("DOS"):null}e.prototype={get filename(){if(!this._filename&&this.root){var e=t(this.root)||"unnamed";this._filename=(0,r.stringToPDFString)(e).replace(/\\\\/g,"\\").replace(/\\\//g,"/").replace(/\\/g,"/")}return this._filename},get content(){if(!this.contentAvailable)return null;!this.contentRef&&this.root&&(this.contentRef=t(this.root.get("EF")));var e=null;if(this.contentRef){var a=this.xref.fetchIfRef(this.contentRef);a&&(0,i.isStream)(a)?e=a.getBytes():(0,r.warn)("Embedded file specification points to non-existing/invalid content")}else(0,r.warn)("Embedded file specification does not have a content");return e},get serializable(){return{filename:this.filename,content:this.content}}};return e}();t.FileSpec=m;const p=function(){function e(e){return e instanceof i.Ref||e instanceof i.Dict||Array.isArray(e)||(0,i.isStream)(e)}function t(t,a){if(t instanceof i.Dict||(0,i.isStream)(t)){const r=t instanceof i.Dict?t:t.dict,n=r.getKeys();for(let t=0,i=n.length;t<i;t++){const i=r.getRaw(n[t]);e(i)&&a.push(i)}}else if(Array.isArray(t))for(let r=0,i=t.length;r<i;r++){const i=t[r];e(i)&&a.push(i)}}function a(e,t,a){this.dict=e;this.keys=t;this.xref=a;this.refSet=null}a.prototype={async load(){if(!this.xref.stream.allChunksLoaded||this.xref.stream.allChunksLoaded())return;const{keys:e,dict:t}=this;this.refSet=new i.RefSet;const a=[];for(let r=0,i=e.length;r<i;r++){const i=t.getRaw(e[r]);void 0!==i&&a.push(i)}return this._walk(a)},async _walk(e){const a=[],r=[];for(;e.length;){let n=e.pop();if(n instanceof i.Ref){if(this.refSet.has(n))continue;try{this.refSet.put(n);n=this.xref.fetch(n)}catch(e){if(!(e instanceof s.MissingDataException))throw e;a.push(n);r.push({begin:e.begin,end:e.end})}}if(n&&n.getBaseStreams){const e=n.getBaseStreams();let t=!1;for(let a=0,i=e.length;a<i;a++){const i=e[a];if(i.allChunksLoaded&&!i.allChunksLoaded()){t=!0;r.push({begin:i.start,end:i.end})}}t&&a.push(n)}t(n,e)}if(r.length){await this.xref.stream.manager.requestRanges(r);for(let e=0,t=a.length;e<t;e++){const t=a[e];t instanceof i.Ref&&this.refSet.remove(t)}return this._walk(a)}this.refSet=null}};return a}();t.ObjectLoader=p},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.Parser=t.Linearization=t.Lexer=void 0;var r=a(11),i=a(2),n=a(4),s=a(7),o=a(12),c=a(14),l=a(17),h=a(19);function u(e){const t=e.length;let a=1,r=0;for(let i=0;i<t;++i){a+=255&e[i];r+=a}return r%65521<<16|a%65521}class d{constructor({lexer:e,xref:t,allowStreams:a=!1,recoveryMode:r=!1}){this.lexer=e;this.xref=t;this.allowStreams=a;this.recoveryMode=r;this.imageCache=Object.create(null);this.refill()}refill(){this.buf1=this.lexer.getObj();this.buf2=this.lexer.getObj()}shift(){if(this.buf2 instanceof n.Cmd&&"ID"===this.buf2.cmd){this.buf1=this.buf2;this.buf2=null}else{this.buf1=this.buf2;this.buf2=this.lexer.getObj()}}tryShift(){try{this.shift();return!0}catch(e){if(e instanceof s.MissingDataException)throw e;return!1}}getObj(e=null){const t=this.buf1;this.shift();if(t instanceof n.Cmd)switch(t.cmd){case"BI":return this.makeInlineImage(e);case"[":const a=[];for(;!(0,n.isCmd)(this.buf1,"]")&&!(0,n.isEOF)(this.buf1);)a.push(this.getObj(e));if((0,n.isEOF)(this.buf1)){if(!this.recoveryMode)throw new i.FormatError("End of file inside array");return a}this.shift();return a;case"<<":const r=new n.Dict(this.xref);for(;!(0,n.isCmd)(this.buf1,">>")&&!(0,n.isEOF)(this.buf1);){if(!(0,n.isName)(this.buf1)){(0,i.info)("Malformed dictionary: key must be a name object");this.shift();continue}const t=this.buf1.name;this.shift();if((0,n.isEOF)(this.buf1))break;r.set(t,this.getObj(e))}if((0,n.isEOF)(this.buf1)){if(!this.recoveryMode)throw new i.FormatError("End of file inside dictionary");return r}if((0,n.isCmd)(this.buf2,"stream"))return this.allowStreams?this.makeStream(r,e):r;this.shift();return r;default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&(0,n.isCmd)(this.buf2,"R")){const e=n.Ref.get(t,this.buf1);this.shift();this.shift();return e}return t}return"string"==typeof t&&e?e.decryptString(t):t}findDefaultInlineStreamEnd(e){const t=e.pos;let a,r,n=0;for(;-1!==(a=e.getByte());)if(0===n)n=69===a?1:0;else if(1===n)n=73===a?2:0;else{(0,i.assert)(2===n);if(32===a||10===a||13===a){r=e.pos;const t=e.peekBytes(10);for(let e=0,r=t.length;e<r;e++){a=t[e];if((0!==a||0===t[e+1])&&(10!==a&&13!==a&&(a<32||a>127))){n=0;break}}if(2===n)break}else n=0}if(-1===a){(0,i.warn)("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker");if(r){(0,i.warn)('... trying to recover by using the last "EI" occurrence.');e.skip(-(e.pos-r))}}let o=4;e.skip(-o);a=e.peekByte();e.skip(o);(0,s.isWhiteSpace)(a)||o--;return e.pos-o-t}findDCTDecodeInlineStreamEnd(e){const t=e.pos;let a,r,n=!1;for(;-1!==(a=e.getByte());)if(255===a){switch(e.getByte()){case 0:break;case 255:e.skip(-1);break;case 217:n=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:r=e.getUint16();r>2?e.skip(r-2):e.skip(-2)}if(n)break}const s=e.pos-t;if(-1===a){(0,i.warn)("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead.");e.skip(-s);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return s}findASCII85DecodeInlineStreamEnd(e){const t=e.pos;let a;for(;-1!==(a=e.getByte());)if(126===a){const t=e.pos;a=e.peekByte();for(;(0,s.isWhiteSpace)(a);){e.skip();a=e.peekByte()}if(62===a){e.skip();break}if(e.pos>t){const t=e.peekBytes(2);if(69===t[0]&&73===t[1])break}}const r=e.pos-t;if(-1===a){(0,i.warn)("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}findASCIIHexDecodeInlineStreamEnd(e){const t=e.pos;let a;for(;-1!==(a=e.getByte())&&62!==a;);const r=e.pos-t;if(-1===a){(0,i.warn)("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}inlineStreamSkipEI(e){let t,a=0;for(;-1!==(t=e.getByte());)if(0===a)a=69===t?1:0;else if(1===a)a=73===t?2:0;else if(2===a)break}makeInlineImage(e){const t=this.lexer,a=t.stream,r=new n.Dict(this.xref);let s;for(;!(0,n.isCmd)(this.buf1,"ID")&&!(0,n.isEOF)(this.buf1);){if(!(0,n.isName)(this.buf1))throw new i.FormatError("Dictionary key must be a name object");const t=this.buf1.name;this.shift();if((0,n.isEOF)(this.buf1))break;r.set(t,this.getObj(e))}-1!==t.beginInlineImagePos&&(s=a.pos-t.beginInlineImagePos);const o=r.get("Filter","F");let c;if((0,n.isName)(o))c=o.name;else if(Array.isArray(o)){const e=this.xref.fetchIfRef(o[0]);(0,n.isName)(e)&&(c=e.name)}const l=a.pos;let h;h="DCTDecode"===c||"DCT"===c?this.findDCTDecodeInlineStreamEnd(a):"ASCII85Decode"===c||"A85"===c?this.findASCII85DecodeInlineStreamEnd(a):"ASCIIHexDecode"===c||"AHx"===c?this.findASCIIHexDecodeInlineStreamEnd(a):this.findDefaultInlineStreamEnd(a);let d,f=a.makeSubStream(l,h,r);if(h<1e3&&s<5552){const e=f.getBytes();f.reset();const r=a.pos;a.pos=t.beginInlineImagePos;const i=a.getBytes(s);a.pos=r;d=u(e)+"_"+u(i);const o=this.imageCache[d];if(void 0!==o){this.buf2=n.Cmd.get("EI");this.shift();o.reset();return o}}e&&(f=e.createStream(f,h));f=this.filter(f,r,h);f.dict=r;if(void 0!==d){f.cacheKey=`inline_${h}_${d}`;this.imageCache[d]=f}this.buf2=n.Cmd.get("EI");this.shift();return f}_findStreamLength(e,t){const{stream:a}=this.lexer;a.pos=e;const r=t.length;for(;a.pos<a.end;){const i=a.peekBytes(2048),n=i.length-r;if(n<=0)break;let s=0;for(;s<n;){let n=0;for(;n<r&&i[s+n]===t[n];)n++;if(n>=r){a.pos+=s;return a.pos-e}s++}a.pos+=n}return-1}makeStream(e,t){const a=this.lexer;let r=a.stream;a.skipToNextLine();const o=r.pos-1;let c=e.get("Length");if(!Number.isInteger(c)){(0,i.info)(`Bad length "${c}" in stream`);c=0}r.pos=o+c;a.nextChar();if(this.tryShift()&&(0,n.isCmd)(this.buf2,"endstream"))this.shift();else{const e=new Uint8Array([101,110,100,115,116,114,101,97,109]);let t=this._findStreamLength(o,e);if(t<0){const a=1;for(let n=1;n<=a;n++){const a=e.length-n,c=e.slice(0,a),l=this._findStreamLength(o,c);if(l>=0){const e=r.peekBytes(a+1)[a];if(!(0,s.isWhiteSpace)(e))break;(0,i.info)(`Found "${(0,i.bytesToString)(c)}" when `+"searching for endstream command.");t=l;break}}if(t<0)throw new i.FormatError("Missing endstream command.")}c=t;a.nextChar();this.shift();this.shift()}this.shift();r=r.makeSubStream(o,c,e);t&&(r=t.createStream(r,c));r=this.filter(r,e,c);r.dict=e;return r}filter(e,t,a){let r=t.get("Filter","F"),s=t.get("DecodeParms","DP");if((0,n.isName)(r)){Array.isArray(s)&&(0,i.warn)("/DecodeParms should not contain an Array, when /Filter contains a Name.");return this.makeFilter(e,r.name,a,s)}let o=a;if(Array.isArray(r)){const t=r,a=s;for(let c=0,l=t.length;c<l;++c){r=this.xref.fetchIfRef(t[c]);if(!(0,n.isName)(r))throw new i.FormatError(`Bad filter name "${r}"`);s=null;Array.isArray(a)&&c in a&&(s=this.xref.fetchIfRef(a[c]));e=this.makeFilter(e,r.name,o,s);o=null}}return e}makeFilter(e,t,a,n){if(0===a){(0,i.warn)(`Empty "${t}" stream.`);return new r.NullStream}try{const s=this.xref.stats.streamTypes;if("FlateDecode"===t||"Fl"===t){s[i.StreamType.FLATE]=!0;return n?new r.PredictorStream(new r.FlateStream(e,a),a,n):new r.FlateStream(e,a)}if("LZWDecode"===t||"LZW"===t){s[i.StreamType.LZW]=!0;let t=1;if(n){n.has("EarlyChange")&&(t=n.get("EarlyChange"));return new r.PredictorStream(new r.LZWStream(e,a,t),a,n)}return new r.LZWStream(e,a,t)}if("DCTDecode"===t||"DCT"===t){s[i.StreamType.DCT]=!0;return new l.JpegStream(e,a,e.dict,n)}if("JPXDecode"===t||"JPX"===t){s[i.StreamType.JPX]=!0;return new h.JpxStream(e,a,e.dict,n)}if("ASCII85Decode"===t||"A85"===t){s[i.StreamType.A85]=!0;return new r.Ascii85Stream(e,a)}if("ASCIIHexDecode"===t||"AHx"===t){s[i.StreamType.AHX]=!0;return new r.AsciiHexStream(e,a)}if("CCITTFaxDecode"===t||"CCF"===t){s[i.StreamType.CCF]=!0;return new o.CCITTFaxStream(e,a,n)}if("RunLengthDecode"===t||"RL"===t){s[i.StreamType.RLX]=!0;return new r.RunLengthStream(e,a)}if("JBIG2Decode"===t){s[i.StreamType.JBIG]=!0;return new c.Jbig2Stream(e,a,e.dict,n)}(0,i.warn)(`Filter "${t}" is not supported.`);return e}catch(e){if(e instanceof s.MissingDataException)throw e;(0,i.warn)(`Invalid stream: "${e}"`);return new r.NullStream}}}t.Parser=d;const f=[1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function g(e){return e>=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=102?9+(15&e):-1}class m{constructor(e,t=null){this.stream=e;this.nextChar();this.strBuf=[];this.knownCommands=t;this._hexStringNumWarn=0;this.beginInlineImagePos=-1}nextChar(){return this.currentChar=this.stream.getByte()}peekChar(){return this.stream.peekByte()}getNumber(){let e=this.currentChar,t=!1,a=0,r=0;if(45===e){r=-1;e=this.nextChar();45===e&&(e=this.nextChar())}else if(43===e){r=1;e=this.nextChar()}if(10===e||13===e)do{e=this.nextChar()}while(10===e||13===e);if(46===e){a=10;e=this.nextChar()}if(e<48||e>57){if(10===a&&0===r&&((0,s.isWhiteSpace)(e)||-1===e)){(0,i.warn)("Lexer.getNumber - treating a single decimal point as zero.");return 0}throw new i.FormatError(`Invalid number: ${String.fromCharCode(e)} (charCode ${e})`)}r=r||1;let n=e-48,o=0,c=1;for(;(e=this.nextChar())>=0;)if(e>=48&&e<=57){const r=e-48;if(t)o=10*o+r;else{0!==a&&(a*=10);n=10*n+r}}else if(46===e){if(0!==a)break;a=1}else if(45===e)(0,i.warn)("Badly formatted number: minus sign in the middle");else{if(69!==e&&101!==e)break;e=this.peekChar();if(43===e||45===e){c=45===e?-1:1;this.nextChar()}else if(e<48||e>57)break;t=!0}0!==a&&(n/=a);t&&(n*=10**(c*o));return r*n}getString(){let e=1,t=!1;const a=this.strBuf;a.length=0;let r=this.nextChar();for(;;){let n=!1;switch(0|r){case-1:(0,i.warn)("Unterminated string");t=!0;break;case 40:++e;a.push("(");break;case 41:if(0==--e){this.nextChar();t=!0}else a.push(")");break;case 92:r=this.nextChar();switch(r){case-1:(0,i.warn)("Unterminated string");t=!0;break;case 110:a.push("\n");break;case 114:a.push("\r");break;case 116:a.push("\t");break;case 98:a.push("\b");break;case 102:a.push("\f");break;case 92:case 40:case 41:a.push(String.fromCharCode(r));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let e=15&r;r=this.nextChar();n=!0;if(r>=48&&r<=55){e=(e<<3)+(15&r);r=this.nextChar();if(r>=48&&r<=55){n=!1;e=(e<<3)+(15&r)}}a.push(String.fromCharCode(e));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:a.push(String.fromCharCode(r))}break;default:a.push(String.fromCharCode(r))}if(t)break;n||(r=this.nextChar())}return a.join("")}getName(){let e,t;const a=this.strBuf;a.length=0;for(;(e=this.nextChar())>=0&&!f[e];)if(35===e){e=this.nextChar();if(f[e]){(0,i.warn)("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number.");a.push("#");break}const r=g(e);if(-1!==r){t=e;e=this.nextChar();const n=g(e);if(-1===n){(0,i.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(e)}) `+"in hexadecimal number.");a.push("#",String.fromCharCode(t));if(f[e])break;a.push(String.fromCharCode(e));continue}a.push(String.fromCharCode(r<<4|n))}else a.push("#",String.fromCharCode(e))}else a.push(String.fromCharCode(e));a.length>127&&(0,i.warn)(`Name token is longer than allowed by the spec: ${a.length}`);return n.Name.get(a.join(""))}_hexStringWarn(e){5!=this._hexStringNumWarn++?this._hexStringNumWarn>5||(0,i.warn)(`getHexString - ignoring invalid character: ${e}`):(0,i.warn)("getHexString - ignoring additional invalid characters.")}getHexString(){const e=this.strBuf;e.length=0;let t,a,r=this.currentChar,n=!0;this._hexStringNumWarn=0;for(;;){if(r<0){(0,i.warn)("Unterminated hex string");break}if(62===r){this.nextChar();break}if(1!==f[r]){if(n){t=g(r);if(-1===t){this._hexStringWarn(r);r=this.nextChar();continue}}else{a=g(r);if(-1===a){this._hexStringWarn(r);r=this.nextChar();continue}e.push(String.fromCharCode(t<<4|a))}n=!n;r=this.nextChar()}else r=this.nextChar()}return e.join("")}getObj(){let e=!1,t=this.currentChar;for(;;){if(t<0)return n.EOF;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(1!==f[t])break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:this.nextChar();return n.Cmd.get("[");case 93:this.nextChar();return n.Cmd.get("]");case 60:t=this.nextChar();if(60===t){this.nextChar();return n.Cmd.get("<<")}return this.getHexString();case 62:t=this.nextChar();if(62===t){this.nextChar();return n.Cmd.get(">>")}return n.Cmd.get(">");case 123:this.nextChar();return n.Cmd.get("{");case 125:this.nextChar();return n.Cmd.get("}");case 41:this.nextChar();throw new i.FormatError(`Illegal character: ${t}`)}let a=String.fromCharCode(t);const r=this.knownCommands;let s=r&&void 0!==r[a];for(;(t=this.nextChar())>=0&&!f[t];){const e=a+String.fromCharCode(t);if(s&&void 0===r[e])break;if(128===a.length)throw new i.FormatError(`Command token too long: ${a.length}`);a=e;s=r&&void 0!==r[a]}if("true"===a)return!0;if("false"===a)return!1;if("null"===a)return null;"BI"===a&&(this.beginInlineImagePos=this.stream.pos);return n.Cmd.get(a)}skipToNextLine(){let e=this.currentChar;for(;e>=0;){if(13===e){e=this.nextChar();10===e&&this.nextChar();break}if(10===e){this.nextChar();break}e=this.nextChar()}}}t.Lexer=m;t.Linearization=class{static create(e){function t(e,t,a=!1){const r=e.get(t);if(Number.isInteger(r)&&(a?r>=0:r>0))return r;throw new Error(`The "${t}" parameter in the linearization `+"dictionary is invalid.")}const a=new d({lexer:new m(e),xref:null}),r=a.getObj(),s=a.getObj(),o=a.getObj(),c=a.getObj();let l,h;if(!(Number.isInteger(r)&&Number.isInteger(s)&&(0,n.isCmd)(o,"obj")&&(0,n.isDict)(c)&&(0,i.isNum)(l=c.get("Linearized"))&&l>0))return null;if((h=t(c,"L"))!==e.length)throw new Error('The "L" parameter in the linearization dictionary does not equal the stream length.');return{length:h,hints:function(e){const t=e.get("H");let a;if(Array.isArray(t)&&(2===(a=t.length)||4===a)){for(let e=0;e<a;e++){const a=t[e];if(!(Number.isInteger(a)&&a>0))throw new Error(`Hint (${e}) in the linearization dictionary is invalid.`)}return t}throw new Error("Hint array in the linearization dictionary is invalid.")}(c),objectNumberFirst:t(c,"O"),endFirst:t(c,"E"),numPages:t(c,"N"),mainXRefEntriesOffset:t(c,"T"),pageFirst:c.has("P")?t(c,"P",!0):0}}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.LZWStream=t.StringStream=t.StreamsSequenceStream=t.Stream=t.RunLengthStream=t.PredictorStream=t.NullStream=t.FlateStream=t.DecodeStream=t.DecryptStream=t.AsciiHexStream=t.Ascii85Stream=void 0;var r=a(2),i=a(4),n=a(7),s=function(){function e(e,t,a,r){this.bytes=e instanceof Uint8Array?e:new Uint8Array(e);this.start=t||0;this.pos=this.start;this.end=t+a||this.bytes.length;this.dict=r}e.prototype={get length(){return this.end-this.start},get isEmpty(){return 0===this.length},getByte:function(){return this.pos>=this.end?-1:this.bytes[this.pos++]},getUint16:function(){var e=this.getByte(),t=this.getByte();return-1===e||-1===t?-1:(e<<8)+t},getInt32:function(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()},getBytes(e,t=!1){var a=this.bytes,r=this.pos,i=this.end;if(!e){const e=a.subarray(r,i);return t?new Uint8ClampedArray(e):e}var n=r+e;n>i&&(n=i);this.pos=n;const s=a.subarray(r,n);return t?new Uint8ClampedArray(s):s},peekByte:function(){var e=this.getByte();-1!==e&&this.pos--;return e},peekBytes(e,t=!1){var a=this.getBytes(e,t);this.pos-=a.length;return a},getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);return this.bytes.subarray(e,t)},skip:function(e){e||(e=1);this.pos+=e},reset:function(){this.pos=this.start},moveStart:function(){this.start=this.pos},makeSubStream:function(t,a,r){return new e(this.bytes.buffer,t,a,r)}};return e}();t.Stream=s;var o=function(){function e(e){const t=(0,r.stringToBytes)(e);s.call(this,t)}e.prototype=s.prototype;return e}();t.StringStream=o;var c=function(){var e=new Uint8Array(0);function t(t){this._rawMinBufferLength=t||0;this.pos=0;this.bufferLength=0;this.eof=!1;this.buffer=e;this.minBufferLength=512;if(t)for(;this.minBufferLength<t;)this.minBufferLength*=2}t.prototype={get isEmpty(){for(;!this.eof&&0===this.bufferLength;)this.readBlock();return 0===this.bufferLength},ensureBuffer:function(e){var t=this.buffer;if(e<=t.byteLength)return t;for(var a=this.minBufferLength;a<e;)a*=2;var r=new Uint8Array(a);r.set(t);return this.buffer=r},getByte:function(){for(var e=this.pos;this.bufferLength<=e;){if(this.eof)return-1;this.readBlock()}return this.buffer[this.pos++]},getUint16:function(){var e=this.getByte(),t=this.getByte();return-1===e||-1===t?-1:(e<<8)+t},getInt32:function(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()},getBytes(e,t=!1){var a,r=this.pos;if(e){this.ensureBuffer(r+e);a=r+e;for(;!this.eof&&this.bufferLength<a;)this.readBlock();var i=this.bufferLength;a>i&&(a=i)}else{for(;!this.eof;)this.readBlock();a=this.bufferLength}this.pos=a;const n=this.buffer.subarray(r,a);return!t||n instanceof Uint8ClampedArray?n:new Uint8ClampedArray(n)},peekByte:function(){var e=this.getByte();-1!==e&&this.pos--;return e},peekBytes(e,t=!1){var a=this.getBytes(e,t);this.pos-=a.length;return a},makeSubStream:function(e,t,a){for(var r=e+t;this.bufferLength<=r&&!this.eof;)this.readBlock();return new s(this.buffer,e,t,a)},getByteRange(e,t){(0,r.unreachable)("Should not call DecodeStream.getByteRange")},skip:function(e){e||(e=1);this.pos+=e},reset:function(){this.pos=0},getBaseStreams:function(){return this.str&&this.str.getBaseStreams?this.str.getBaseStreams():[]}};return t}();t.DecodeStream=c;var l=function(){function e(e){this.streams=e;let t=0;for(let a=0,r=e.length;a<r;a++){const r=e[a];t+=r instanceof c?r._rawMinBufferLength:r.length}c.call(this,t)}e.prototype=Object.create(c.prototype);e.prototype.readBlock=function(){var e=this.streams;if(0!==e.length){var t=e.shift().getBytes(),a=this.bufferLength,r=a+t.length;this.ensureBuffer(r).set(t,a);this.bufferLength=r}else this.eof=!0};e.prototype.getBaseStreams=function(){for(var e=[],t=0,a=this.streams.length;t<a;t++){var r=this.streams[t];r.getBaseStreams&&e.push(...r.getBaseStreams())}return e};return e}();t.StreamsSequenceStream=l;var h=function(){var e=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),t=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),a=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),i=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],n=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];function s(e,t){this.str=e;this.dict=e.dict;var a=e.getByte(),i=e.getByte();if(-1===a||-1===i)throw new r.FormatError(`Invalid header in flate stream: ${a}, ${i}`);if(8!=(15&a))throw new r.FormatError(`Unknown compression method in flate stream: ${a}, ${i}`);if(((a<<8)+i)%31!=0)throw new r.FormatError(`Bad FCHECK in flate stream: ${a}, ${i}`);if(32&i)throw new r.FormatError(`FDICT bit set in flate stream: ${a}, ${i}`);this.codeSize=0;this.codeBuf=0;c.call(this,t)}s.prototype=Object.create(c.prototype);s.prototype.getBits=function(e){for(var t,a=this.str,i=this.codeSize,n=this.codeBuf;i<e;){if(-1===(t=a.getByte()))throw new r.FormatError("Bad encoding in flate stream");n|=t<<i;i+=8}t=n&(1<<e)-1;this.codeBuf=n>>e;this.codeSize=i-=e;return t};s.prototype.getCode=function(e){for(var t,a=this.str,i=e[0],n=e[1],s=this.codeSize,o=this.codeBuf;s<n&&-1!==(t=a.getByte());){o|=t<<s;s+=8}var c=i[o&(1<<n)-1],l=c>>16,h=65535&c;if(l<1||s<l)throw new r.FormatError("Bad encoding in flate stream");this.codeBuf=o>>l;this.codeSize=s-l;return h};s.prototype.generateHuffmanTable=function(e){var t,a=e.length,r=0;for(t=0;t<a;++t)e[t]>r&&(r=e[t]);for(var i=1<<r,n=new Int32Array(i),s=1,o=0,c=2;s<=r;++s,o<<=1,c<<=1)for(var l=0;l<a;++l)if(e[l]===s){var h=0,u=o;for(t=0;t<s;++t){h=h<<1|1&u;u>>=1}for(t=h;t<i;t+=c)n[t]=s<<16|l;++o}return[n,r]};s.prototype.readBlock=function(){var s,o,c=this.str,l=this.getBits(3);1&l&&(this.eof=!0);if(0!==(l>>=1)){var h,u;if(1===l){h=i;u=n}else{if(2!==l)throw new r.FormatError("Unknown block type in flate stream");var d,f=this.getBits(5)+257,g=this.getBits(5)+1,m=this.getBits(4)+4,p=new Uint8Array(e.length);for(d=0;d<m;++d)p[e[d]]=this.getBits(3);var b=this.generateHuffmanTable(p);o=0;d=0;for(var y,v,w,k=f+g,S=new Uint8Array(k);d<k;){var C=this.getCode(b);if(16===C){y=2;v=3;w=o}else if(17===C){y=3;v=3;w=o=0}else{if(18!==C){S[d++]=o=C;continue}y=7;v=11;w=o=0}for(var x=this.getBits(y)+v;x-- >0;)S[d++]=w}h=this.generateHuffmanTable(S.subarray(0,f));u=this.generateHuffmanTable(S.subarray(f,k))}for(var A=(s=this.buffer)?s.length:0,I=this.bufferLength;;){var F=this.getCode(h);if(F<256){I+1>=A&&(A=(s=this.ensureBuffer(I+1)).length);s[I++]=F}else{if(256===F){this.bufferLength=I;return}var T=(F=t[F-=257])>>16;T>0&&(T=this.getBits(T));o=(65535&F)+T;F=this.getCode(u);(T=(F=a[F])>>16)>0&&(T=this.getBits(T));var E=(65535&F)+T;I+o>=A&&(A=(s=this.ensureBuffer(I+o)).length);for(var O=0;O<o;++O,++I)s[I]=s[I-E]}}}else{var P;if(-1===(P=c.getByte()))throw new r.FormatError("Bad block header in flate stream");var B=P;if(-1===(P=c.getByte()))throw new r.FormatError("Bad block header in flate stream");B|=P<<8;if(-1===(P=c.getByte()))throw new r.FormatError("Bad block header in flate stream");var D=P;if(-1===(P=c.getByte()))throw new r.FormatError("Bad block header in flate stream");if((D|=P<<8)!==(65535&~B)&&(0!==B||0!==D))throw new r.FormatError("Bad uncompressed block length in flate stream");this.codeBuf=0;this.codeSize=0;const e=this.bufferLength,t=e+B;s=this.ensureBuffer(t);this.bufferLength=t;if(0===B)-1===c.peekByte()&&(this.eof=!0);else{const t=c.getBytes(B);s.set(t,e);t.length<B&&(this.eof=!0)}}};return s}();t.FlateStream=h;var u=function(){function e(e,t,a){if(!(0,i.isDict)(a))return e;var n=this.predictor=a.get("Predictor")||1;if(n<=1)return e;if(2!==n&&(n<10||n>15))throw new r.FormatError(`Unsupported predictor: ${n}`);this.readBlock=2===n?this.readBlockTiff:this.readBlockPng;this.str=e;this.dict=e.dict;var s=this.colors=a.get("Colors")||1,o=this.bits=a.get("BitsPerComponent")||8,l=this.columns=a.get("Columns")||1;this.pixBytes=s*o+7>>3;this.rowBytes=l*s*o+7>>3;c.call(this,t);return this}e.prototype=Object.create(c.prototype);e.prototype.readBlockTiff=function(){var e=this.rowBytes,t=this.bufferLength,a=this.ensureBuffer(t+e),r=this.bits,i=this.colors,n=this.str.getBytes(e);this.eof=!n.length;if(!this.eof){var s,o=0,c=0,l=0,h=0,u=t;if(1===r&&1===i)for(s=0;s<e;++s){var d=n[s]^o;d^=d>>1;d^=d>>2;o=(1&(d^=d>>4))<<7;a[u++]=d}else if(8===r){for(s=0;s<i;++s)a[u++]=n[s];for(;s<e;++s){a[u]=a[u-i]+n[s];u++}}else if(16===r){var f=2*i;for(s=0;s<f;++s)a[u++]=n[s];for(;s<e;s+=2){var g=((255&n[s])<<8)+(255&n[s+1])+((255&a[u-f])<<8)+(255&a[u-f+1]);a[u++]=g>>8&255;a[u++]=255&g}}else{var m=new Uint8Array(i+1),p=(1<<r)-1,b=0,y=t,v=this.columns;for(s=0;s<v;++s)for(var w=0;w<i;++w){if(l<r){o=o<<8|255&n[b++];l+=8}m[w]=m[w]+(o>>l-r)&p;l-=r;c=c<<r|m[w];if((h+=r)>=8){a[y++]=c>>h-8&255;h-=8}}h>0&&(a[y++]=(c<<8-h)+(o&(1<<8-h)-1))}this.bufferLength+=e}};e.prototype.readBlockPng=function(){var e=this.rowBytes,t=this.pixBytes,a=this.str.getByte(),i=this.str.getBytes(e);this.eof=!i.length;if(!this.eof){var n=this.bufferLength,s=this.ensureBuffer(n+e),o=s.subarray(n-e,n);0===o.length&&(o=new Uint8Array(e));var c,l,h,u=n;switch(a){case 0:for(c=0;c<e;++c)s[u++]=i[c];break;case 1:for(c=0;c<t;++c)s[u++]=i[c];for(;c<e;++c){s[u]=s[u-t]+i[c]&255;u++}break;case 2:for(c=0;c<e;++c)s[u++]=o[c]+i[c]&255;break;case 3:for(c=0;c<t;++c)s[u++]=(o[c]>>1)+i[c];for(;c<e;++c){s[u]=(o[c]+s[u-t]>>1)+i[c]&255;u++}break;case 4:for(c=0;c<t;++c){l=o[c];h=i[c];s[u++]=l+h}for(;c<e;++c){l=o[c];var d=o[c-t],f=s[u-t],g=f+l-d,m=g-f;m<0&&(m=-m);var p=g-l;p<0&&(p=-p);var b=g-d;b<0&&(b=-b);h=i[c];s[u++]=m<=p&&m<=b?f+h:p<=b?l+h:d+h}break;default:throw new r.FormatError(`Unsupported predictor: ${a}`)}this.bufferLength+=e}};return e}();t.PredictorStream=u;var d=function(){function e(e,t,a){this.str=e;this.dict=e.dict;this.decrypt=a;this.nextChunk=null;this.initialized=!1;c.call(this,t)}e.prototype=Object.create(c.prototype);e.prototype.readBlock=function(){var e;if(this.initialized)e=this.nextChunk;else{e=this.str.getBytes(512);this.initialized=!0}if(e&&0!==e.length){this.nextChunk=this.str.getBytes(512);var t=this.nextChunk&&this.nextChunk.length>0;e=(0,this.decrypt)(e,!t);var a,r=this.bufferLength,i=e.length,n=this.ensureBuffer(r+i);for(a=0;a<i;a++)n[r++]=e[a];this.bufferLength=r}else this.eof=!0};return e}();t.DecryptStream=d;var f=function(){function e(e,t){this.str=e;this.dict=e.dict;this.input=new Uint8Array(5);t&&(t*=.8);c.call(this,t)}e.prototype=Object.create(c.prototype);e.prototype.readBlock=function(){for(var e=this.str,t=e.getByte();(0,n.isWhiteSpace)(t);)t=e.getByte();if(-1!==t&&126!==t){var a,r,i=this.bufferLength;if(122===t){a=this.ensureBuffer(i+4);for(r=0;r<4;++r)a[i+r]=0;this.bufferLength+=4}else{var s=this.input;s[0]=t;for(r=1;r<5;++r){t=e.getByte();for(;(0,n.isWhiteSpace)(t);)t=e.getByte();s[r]=t;if(-1===t||126===t)break}a=this.ensureBuffer(i+r-1);this.bufferLength+=r-1;if(r<5){for(;r<5;++r)s[r]=117;this.eof=!0}var o=0;for(r=0;r<5;++r)o=85*o+(s[r]-33);for(r=3;r>=0;--r){a[i+r]=255&o;o>>=8}}}else this.eof=!0};return e}();t.Ascii85Stream=f;var g=function(){function e(e,t){this.str=e;this.dict=e.dict;this.firstDigit=-1;t&&(t*=.5);c.call(this,t)}e.prototype=Object.create(c.prototype);e.prototype.readBlock=function(){var e=this.str.getBytes(8e3);if(e.length){for(var t=e.length+1>>1,a=this.ensureBuffer(this.bufferLength+t),r=this.bufferLength,i=this.firstDigit,n=0,s=e.length;n<s;n++){var o,c=e[n];if(c>=48&&c<=57)o=15&c;else{if(!(c>=65&&c<=70||c>=97&&c<=102)){if(62===c){this.eof=!0;break}continue}o=9+(15&c)}if(i<0)i=o;else{a[r++]=i<<4|o;i=-1}}if(i>=0&&this.eof){a[r++]=i<<4;i=-1}this.firstDigit=i;this.bufferLength=r}else this.eof=!0};return e}();t.AsciiHexStream=g;var m=function(){function e(e,t){this.str=e;this.dict=e.dict;c.call(this,t)}e.prototype=Object.create(c.prototype);e.prototype.readBlock=function(){var e=this.str.getBytes(2);if(!e||e.length<2||128===e[0])this.eof=!0;else{var t,a=this.bufferLength,r=e[0];if(r<128){(t=this.ensureBuffer(a+r+1))[a++]=e[1];if(r>0){var i=this.str.getBytes(r);t.set(i,a);a+=r}}else{r=257-r;var n=e[1];t=this.ensureBuffer(a+r+1);for(var s=0;s<r;s++)t[a++]=n}this.bufferLength=a}};return e}();t.RunLengthStream=m;var p=function(){function e(e,t,a){this.str=e;this.dict=e.dict;this.cachedData=0;this.bitsCached=0;for(var r={earlyChange:a,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(4096),dictionaryLengths:new Uint16Array(4096),dictionaryPrevCodes:new Uint16Array(4096),currentSequence:new Uint8Array(4096),currentSequenceLength:0},i=0;i<256;++i){r.dictionaryValues[i]=i;r.dictionaryLengths[i]=1}this.lzwState=r;c.call(this,t)}e.prototype=Object.create(c.prototype);e.prototype.readBits=function(e){for(var t=this.bitsCached,a=this.cachedData;t<e;){var r=this.str.getByte();if(-1===r){this.eof=!0;return null}a=a<<8|r;t+=8}this.bitsCached=t-=e;this.cachedData=a;this.lastCode=null;return a>>>t&(1<<e)-1};e.prototype.readBlock=function(){var e,t,a,r=1024,i=this.lzwState;if(i){var n=i.earlyChange,s=i.nextCode,o=i.dictionaryValues,c=i.dictionaryLengths,l=i.dictionaryPrevCodes,h=i.codeLength,u=i.prevCode,d=i.currentSequence,f=i.currentSequenceLength,g=0,m=this.bufferLength,p=this.ensureBuffer(this.bufferLength+r);for(e=0;e<512;e++){var b=this.readBits(h),y=f>0;if(b<256){d[0]=b;f=1}else{if(!(b>=258)){if(256===b){h=9;s=258;f=0;continue}this.eof=!0;delete this.lzwState;break}if(b<s)for(t=(f=c[b])-1,a=b;t>=0;t--){d[t]=o[a];a=l[a]}else d[f++]=d[0]}if(y){l[s]=u;c[s]=c[u]+1;o[s]=d[0];h=++s+n&s+n-1?h:0|Math.min(Math.log(s+n)/.6931471805599453+1,12)}u=b;if(r<(g+=f)){do{r+=512}while(r<g);p=this.ensureBuffer(this.bufferLength+r)}for(t=0;t<f;t++)p[m++]=d[t]}i.nextCode=s;i.codeLength=h;i.prevCode=u;i.currentSequenceLength=f;this.bufferLength=m}};return e}();t.LZWStream=p;var b=function(){function e(){s.call(this,new Uint8Array(0))}e.prototype=s.prototype;return e}();t.NullStream=b},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.CCITTFaxStream=void 0;var r=a(4),i=a(13),n=a(11),s=function(){function e(e,t,a){this.str=e;this.dict=e.dict;(0,r.isDict)(a)||(a=r.Dict.empty);const s={next:()=>e.getByte()};this.ccittFaxDecoder=new i.CCITTFaxDecoder(s,{K:a.get("K"),EndOfLine:a.get("EndOfLine"),EncodedByteAlign:a.get("EncodedByteAlign"),Columns:a.get("Columns"),Rows:a.get("Rows"),EndOfBlock:a.get("EndOfBlock"),BlackIs1:a.get("BlackIs1")});n.DecodeStream.call(this,t)}e.prototype=Object.create(n.DecodeStream.prototype);e.prototype.readBlock=function(){for(;!this.eof;){const e=this.ccittFaxDecoder.readNextChar();if(-1===e){this.eof=!0;return}this.ensureBuffer(this.bufferLength+1);this.buffer[this.bufferLength++]=e}};return e}();t.CCITTFaxStream=s},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.CCITTFaxDecoder=void 0;var r=a(2);const i=function(){const e=[[-1,-1],[-1,-1],[7,8],[7,7],[6,6],[6,6],[6,5],[6,5],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]],t=[[-1,-1],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],a=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]],i=[[-1,-1],[-1,-1],[12,-2],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],n=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],s=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]];function o(e,t={}){if(!e||"function"!=typeof e.next)throw new Error('CCITTFaxDecoder - invalid "source" parameter.');this.source=e;this.eof=!1;this.encoding=t.K||0;this.eoline=t.EndOfLine||!1;this.byteAlign=t.EncodedByteAlign||!1;this.columns=t.Columns||1728;this.rows=t.Rows||0;let a,r=t.EndOfBlock;null==r&&(r=!0);this.eoblock=r;this.black=t.BlackIs1||!1;this.codingLine=new Uint32Array(this.columns+1);this.refLine=new Uint32Array(this.columns+2);this.codingLine[0]=this.columns;this.codingPos=0;this.row=0;this.nextLine2D=this.encoding<0;this.inputBits=0;this.inputBuf=0;this.outputBits=0;this.rowsDone=!1;for(;0===(a=this._lookBits(12));)this._eatBits(1);1===a&&this._eatBits(12);if(this.encoding>0){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}}o.prototype={readNextChar(){if(this.eof)return-1;const e=this.refLine,t=this.codingLine,a=this.columns;let i,n,s,o,c;if(0===this.outputBits){this.rowsDone&&(this.eof=!0);if(this.eof)return-1;this.err=!1;let s,c,l;if(this.nextLine2D){for(o=0;t[o]<a;++o)e[o]=t[o];e[o++]=a;e[o]=a;t[0]=0;this.codingPos=0;i=0;n=0;for(;t[this.codingPos]<a;){s=this._getTwoDimCode();switch(s){case 0:this._addPixels(e[i+1],n);e[i+1]<a&&(i+=2);break;case 1:s=c=0;if(n){do{s+=l=this._getBlackCode()}while(l>=64);do{c+=l=this._getWhiteCode()}while(l>=64)}else{do{s+=l=this._getWhiteCode()}while(l>=64);do{c+=l=this._getBlackCode()}while(l>=64)}this._addPixels(t[this.codingPos]+s,n);t[this.codingPos]<a&&this._addPixels(t[this.codingPos]+c,1^n);for(;e[i]<=t[this.codingPos]&&e[i]<a;)i+=2;break;case 7:this._addPixels(e[i]+3,n);n^=1;if(t[this.codingPos]<a){++i;for(;e[i]<=t[this.codingPos]&&e[i]<a;)i+=2}break;case 5:this._addPixels(e[i]+2,n);n^=1;if(t[this.codingPos]<a){++i;for(;e[i]<=t[this.codingPos]&&e[i]<a;)i+=2}break;case 3:this._addPixels(e[i]+1,n);n^=1;if(t[this.codingPos]<a){++i;for(;e[i]<=t[this.codingPos]&&e[i]<a;)i+=2}break;case 2:this._addPixels(e[i],n);n^=1;if(t[this.codingPos]<a){++i;for(;e[i]<=t[this.codingPos]&&e[i]<a;)i+=2}break;case 8:this._addPixelsNeg(e[i]-3,n);n^=1;if(t[this.codingPos]<a){i>0?--i:++i;for(;e[i]<=t[this.codingPos]&&e[i]<a;)i+=2}break;case 6:this._addPixelsNeg(e[i]-2,n);n^=1;if(t[this.codingPos]<a){i>0?--i:++i;for(;e[i]<=t[this.codingPos]&&e[i]<a;)i+=2}break;case 4:this._addPixelsNeg(e[i]-1,n);n^=1;if(t[this.codingPos]<a){i>0?--i:++i;for(;e[i]<=t[this.codingPos]&&e[i]<a;)i+=2}break;case-1:this._addPixels(a,0);this.eof=!0;break;default:(0,r.info)("bad 2d code");this._addPixels(a,0);this.err=!0}}}else{t[0]=0;this.codingPos=0;n=0;for(;t[this.codingPos]<a;){s=0;if(n)do{s+=l=this._getBlackCode()}while(l>=64);else do{s+=l=this._getWhiteCode()}while(l>=64);this._addPixels(t[this.codingPos]+s,n);n^=1}}let h=!1;this.byteAlign&&(this.inputBits&=-8);if(this.eoblock||this.row!==this.rows-1){s=this._lookBits(12);if(this.eoline)for(;-1!==s&&1!==s;){this._eatBits(1);s=this._lookBits(12)}else for(;0===s;){this._eatBits(1);s=this._lookBits(12)}if(1===s){this._eatBits(12);h=!0}else-1===s&&(this.eof=!0)}else this.rowsDone=!0;if(!this.eof&&this.encoding>0&&!this.rowsDone){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}if(this.eoblock&&h&&this.byteAlign){s=this._lookBits(12);if(1===s){this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}if(this.encoding>=0)for(o=0;o<4;++o){s=this._lookBits(12);1!==s&&(0,r.info)("bad rtc code: "+s);this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}}this.eof=!0}}else if(this.err&&this.eoline){for(;;){s=this._lookBits(13);if(-1===s){this.eof=!0;return-1}if(s>>1==1)break;this._eatBits(1)}this._eatBits(12);if(this.encoding>0){this._eatBits(1);this.nextLine2D=!(1&s)}}t[0]>0?this.outputBits=t[this.codingPos=0]:this.outputBits=t[this.codingPos=1];this.row++}if(this.outputBits>=8){c=1&this.codingPos?0:255;this.outputBits-=8;if(0===this.outputBits&&t[this.codingPos]<a){this.codingPos++;this.outputBits=t[this.codingPos]-t[this.codingPos-1]}}else{s=8;c=0;do{if(this.outputBits>s){c<<=s;1&this.codingPos||(c|=255>>8-s);this.outputBits-=s;s=0}else{c<<=this.outputBits;1&this.codingPos||(c|=255>>8-this.outputBits);s-=this.outputBits;this.outputBits=0;if(t[this.codingPos]<a){this.codingPos++;this.outputBits=t[this.codingPos]-t[this.codingPos-1]}else if(s>0){c<<=s;s=0}}}while(s)}this.black&&(c^=255);return c},_addPixels(e,t){const a=this.codingLine;let i=this.codingPos;if(e>a[i]){if(e>this.columns){(0,r.info)("row is wrong length");this.err=!0;e=this.columns}1&i^t&&++i;a[i]=e}this.codingPos=i},_addPixelsNeg(e,t){const a=this.codingLine;let i=this.codingPos;if(e>a[i]){if(e>this.columns){(0,r.info)("row is wrong length");this.err=!0;e=this.columns}1&i^t&&++i;a[i]=e}else if(e<a[i]){if(e<0){(0,r.info)("invalid code");this.err=!0;e=0}for(;i>0&&e<a[i-1];)--i;a[i]=e}this.codingPos=i},_findTableCode(e,t,a,r){const i=r||0;for(let r=e;r<=t;++r){let e=this._lookBits(r);if(-1===e)return[!0,1,!1];r<t&&(e<<=t-r);if(!i||e>=i){const t=a[e-i];if(t[0]===r){this._eatBits(r);return[!0,t[1],!0]}}}return[!1,0,!1]},_getTwoDimCode(){let t,a=0;if(this.eoblock){a=this._lookBits(7);t=e[a];if(t&&t[0]>0){this._eatBits(t[0]);return t[1]}}else{const t=this._findTableCode(1,7,e);if(t[0]&&t[2])return t[1]}(0,r.info)("Bad two dim code");return-1},_getWhiteCode(){let e,i=0;if(this.eoblock){i=this._lookBits(12);if(-1===i)return 1;e=i>>5==0?t[i]:a[i>>3];if(e[0]>0){this._eatBits(e[0]);return e[1]}}else{let e=this._findTableCode(1,9,a);if(e[0])return e[1];e=this._findTableCode(11,12,t);if(e[0])return e[1]}(0,r.info)("bad white code");this._eatBits(1);return 1},_getBlackCode(){let e,t;if(this.eoblock){e=this._lookBits(13);if(-1===e)return 1;t=e>>7==0?i[e]:e>>9==0&&e>>7!=0?n[(e>>1)-64]:s[e>>7];if(t[0]>0){this._eatBits(t[0]);return t[1]}}else{let e=this._findTableCode(2,6,s);if(e[0])return e[1];e=this._findTableCode(7,12,n,64);if(e[0])return e[1];e=this._findTableCode(10,13,i);if(e[0])return e[1]}(0,r.info)("bad black code");this._eatBits(1);return 1},_lookBits(e){let t;for(;this.inputBits<e;){if(-1===(t=this.source.next()))return 0===this.inputBits?-1:this.inputBuf<<e-this.inputBits&65535>>16-e;this.inputBuf=this.inputBuf<<8|t;this.inputBits+=8}return this.inputBuf>>this.inputBits-e&65535>>16-e},_eatBits(e){(this.inputBits-=e)<0&&(this.inputBits=0)}};return o}();t.CCITTFaxDecoder=i},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.Jbig2Stream=void 0;var r=a(4),i=a(11),n=a(15),s=a(2);const o=function(){function e(e,t,a,r){this.stream=e;this.maybeLength=t;this.dict=a;this.params=r;i.DecodeStream.call(this,t)}e.prototype=Object.create(i.DecodeStream.prototype);Object.defineProperty(e.prototype,"bytes",{get(){return(0,s.shadow)(this,"bytes",this.stream.getBytes(this.maybeLength))},configurable:!0});e.prototype.ensureBuffer=function(e){};e.prototype.readBlock=function(){if(this.eof)return;const e=new n.Jbig2Image,t=[];if((0,r.isDict)(this.params)){const e=this.params.get("JBIG2Globals");if((0,r.isStream)(e)){const a=e.getBytes();t.push({data:a,start:0,end:a.length})}}t.push({data:this.bytes,start:0,end:this.bytes.length});const a=e.parseChunks(t),i=a.length;for(let e=0;e<i;e++)a[e]^=255;this.buffer=a;this.bufferLength=i;this.eof=!0};return e}();t.Jbig2Stream=o},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.Jbig2Image=void 0;var r=a(2),i=a(7),n=a(16),s=a(13);class o extends r.BaseException{constructor(e){super(`JBIG2 error: ${e}`)}}var c=function(){function e(){}e.prototype={getContexts(e){return e in this?this[e]:this[e]=new Int8Array(65536)}};function t(e,t,a){this.data=e;this.start=t;this.end=a}t.prototype={get decoder(){var e=new n.ArithmeticDecoder(this.data,this.start,this.end);return(0,r.shadow)(this,"decoder",e)},get contextCache(){var t=new e;return(0,r.shadow)(this,"contextCache",t)}};function a(e,t,a){var r=e.getContexts(t),i=1;function n(e){for(var t=0,n=0;n<e;n++){var s=a.readBit(r,i);i=i<256?i<<1|s:511&(i<<1|s)|256;t=t<<1|s}return t>>>0}var s=n(1),o=n(1)?n(1)?n(1)?n(1)?n(1)?n(32)+4436:n(12)+340:n(8)+84:n(6)+20:n(4)+4:n(2);return 0===s?o:o>0?-o:null}function c(e,t,a){for(var r=e.getContexts("IAID"),i=1,n=0;n<a;n++){i=i<<1|t.readBit(r,i)}return a<31?i&(1<<a)-1:2147483647&i}var l=["SymbolDictionary",null,null,null,"IntermediateTextRegion",null,"ImmediateTextRegion","ImmediateLosslessTextRegion",null,null,null,null,null,null,null,null,"PatternDictionary",null,null,null,"IntermediateHalftoneRegion",null,"ImmediateHalftoneRegion","ImmediateLosslessHalftoneRegion",null,null,null,null,null,null,null,null,null,null,null,null,"IntermediateGenericRegion",null,"ImmediateGenericRegion","ImmediateLosslessGenericRegion","IntermediateGenericRefinementRegion",null,"ImmediateGenericRefinementRegion","ImmediateLosslessGenericRefinementRegion",null,null,null,null,"PageInformation","EndOfPage","EndOfStripe","EndOfFile","Profiles","Tables",null,null,null,null,null,null,null,null,"Extension"],h=[[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:2,y:-1},{x:-4,y:0},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}],[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:2,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:2,y:-1},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}],[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-2,y:0},{x:-1,y:0}],[{x:-3,y:-1},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-4,y:0},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}]],u=[{coding:[{x:0,y:-1},{x:1,y:-1},{x:-1,y:0}],reference:[{x:0,y:-1},{x:1,y:-1},{x:-1,y:0},{x:0,y:0},{x:1,y:0},{x:-1,y:1},{x:0,y:1},{x:1,y:1}]},{coding:[{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-1,y:0}],reference:[{x:0,y:-1},{x:-1,y:0},{x:0,y:0},{x:1,y:0},{x:0,y:1},{x:1,y:1}]}],d=[39717,1941,229,405],f=[32,8];function g(e,t,a,r,i,n,s,o){if(e){return B(new E(o.data,o.start,o.end),t,a,!1)}if(0===r&&!n&&!i&&4===s.length&&3===s[0].x&&-1===s[0].y&&-3===s[1].x&&-1===s[1].y&&2===s[2].x&&-2===s[2].y&&-2===s[3].x&&-2===s[3].y)return function(e,t,a){var r,i,n,s,o,c,l,h=a.decoder,u=a.contextCache.getContexts("GB"),d=[];for(i=0;i<t;i++){o=d[i]=new Uint8Array(e);c=i<1?o:d[i-1];r=(l=i<2?o:d[i-2])[0]<<13|l[1]<<12|l[2]<<11|c[0]<<7|c[1]<<6|c[2]<<5|c[3]<<4;for(n=0;n<e;n++){o[n]=s=h.readBit(u,r);r=(31735&r)<<1|(n+3<e?l[n+3]<<11:0)|(n+4<e?c[n+4]<<4:0)|s}}return d}(t,a,o);var c=!!n,l=h[r].concat(s);l.sort((function(e,t){return e.y-t.y||e.x-t.x}));var u,f,g=l.length,m=new Int8Array(g),p=new Int8Array(g),b=[],y=0,v=0,w=0,k=0;for(f=0;f<g;f++){m[f]=l[f].x;p[f]=l[f].y;v=Math.min(v,l[f].x);w=Math.max(w,l[f].x);k=Math.min(k,l[f].y);f<g-1&&l[f].y===l[f+1].y&&l[f].x===l[f+1].x-1?y|=1<<g-1-f:b.push(f)}var S=b.length,C=new Int8Array(S),x=new Int8Array(S),A=new Uint16Array(S);for(u=0;u<S;u++){f=b[u];C[u]=l[f].x;x[u]=l[f].y;A[u]=1<<g-1-f}for(var I,F,T,O,P,D=-v,N=-k,M=t-w,L=d[r],R=new Uint8Array(t),U=[],q=o.decoder,j=o.contextCache.getContexts("GB"),_=0,z=0,H=0;H<a;H++){if(i){if(_^=q.readBit(j,L)){U.push(R);continue}}R=new Uint8Array(R);U.push(R);for(I=0;I<t;I++)if(c&&n[H][I])R[I]=0;else{if(I>=D&&I<M&&H>=N){z=z<<1&y;for(f=0;f<S;f++){F=H+x[f];T=I+C[f];(O=U[F][T])&&(z|=O=A[f])}}else{z=0;P=g-1;for(f=0;f<g;f++,P--)(T=I+m[f])>=0&&T<t&&(F=H+p[f])>=0&&(O=U[F][T])&&(z|=O<<P)}var G=q.readBit(j,z);R[I]=G}}return U}function m(e,t,a,r,i,n,s,c,l){var h=u[a].coding;0===a&&(h=h.concat([c[0]]));var d,g=h.length,m=new Int32Array(g),p=new Int32Array(g);for(d=0;d<g;d++){m[d]=h[d].x;p[d]=h[d].y}var b=u[a].reference;0===a&&(b=b.concat([c[1]]));var y=b.length,v=new Int32Array(y),w=new Int32Array(y);for(d=0;d<y;d++){v[d]=b[d].x;w[d]=b[d].y}for(var k=r[0].length,S=r.length,C=f[a],x=[],A=l.decoder,I=l.contextCache.getContexts("GR"),F=0,T=0;T<t;T++){if(s){if(F^=A.readBit(I,C))throw new o("prediction is not supported")}var E=new Uint8Array(e);x.push(E);for(var O=0;O<e;O++){var P,B,D=0;for(d=0;d<g;d++){P=T+p[d];B=O+m[d];P<0||B<0||B>=e?D<<=1:D=D<<1|x[P][B]}for(d=0;d<y;d++){P=T+w[d]-n;B=O+v[d]-i;P<0||P>=S||B<0||B>=k?D<<=1:D=D<<1|r[P][B]}var N=A.readBit(I,D);E[O]=N}}return x}function p(e,t,r,i,n,s,l,h,u,d,f,g,p,b,y,v,w,k,S){if(e&&t)throw new o("refinement with Huffman is not supported");var C,x,A=[];for(C=0;C<i;C++){x=new Uint8Array(r);if(n)for(var I=0;I<r;I++)x[I]=n;A.push(x)}var F=w.decoder,T=w.contextCache,E=e?-b.tableDeltaT.decode(S):-a(T,"IADT",F),O=0;C=0;for(;C<s;){E+=e?b.tableDeltaT.decode(S):a(T,"IADT",F);for(var P=O+=e?b.tableFirstS.decode(S):a(T,"IAFS",F);;){let i=0;l>1&&(i=e?S.readBits(k):a(T,"IAIT",F));var B=l*E+i,D=e?b.symbolIDTable.decode(S):c(T,F,u),N=t&&(e?S.readBit():a(T,"IARI",F)),M=h[D],L=M[0].length,R=M.length;if(N){var U=a(T,"IARDW",F),q=a(T,"IARDH",F);M=m(L+=U,R+=q,y,M,(U>>1)+a(T,"IARDX",F),(q>>1)+a(T,"IARDY",F),!1,v,w)}var j,_,z,H=B-(1&g?0:R-1),G=P-(2&g?L-1:0);if(d){for(j=0;j<R;j++)if(x=A[G+j]){z=M[j];var W=Math.min(r-H,L);switch(p){case 0:for(_=0;_<W;_++)x[H+_]|=z[_];break;case 2:for(_=0;_<W;_++)x[H+_]^=z[_];break;default:throw new o(`operator ${p} is not supported`)}}P+=R-1}else{for(_=0;_<R;_++)if(x=A[H+_]){z=M[_];switch(p){case 0:for(j=0;j<L;j++)x[G+j]|=z[j];break;case 2:for(j=0;j<L;j++)x[G+j]^=z[j];break;default:throw new o(`operator ${p} is not supported`)}}P+=L-1}C++;var X=e?b.tableDeltaS.decode(S):a(T,"IADS",F);if(null===X)break;P+=X+f}}return A}function b(e,t){var a={};a.number=(0,i.readUint32)(e,t);var r=e[t+4],n=63&r;if(!l[n])throw new o("invalid segment type: "+n);a.type=n;a.typeName=l[n];a.deferredNonRetain=!!(128&r);var s=!!(64&r),c=e[t+5],h=c>>5&7,u=[31&c],d=t+6;if(7===c){h=536870911&(0,i.readUint32)(e,d-1);d+=3;var f=h+7>>3;u[0]=e[d++];for(;--f>0;)u.push(e[d++])}else if(5===c||6===c)throw new o("invalid referred-to flags");a.retainBits=u;let g=4;a.number<=256?g=1:a.number<=65536&&(g=2);var m,p,b=[];for(m=0;m<h;m++){let t;t=1===g?e[d]:2===g?(0,i.readUint16)(e,d):(0,i.readUint32)(e,d);b.push(t);d+=g}a.referredTo=b;if(s){a.pageAssociation=(0,i.readUint32)(e,d);d+=4}else a.pageAssociation=e[d++];a.length=(0,i.readUint32)(e,d);d+=4;if(4294967295===a.length){if(38!==n)throw new o("invalid unknown segment length");var y=v(e,d),k=!!(1&e[d+w]),S=new Uint8Array(6);if(!k){S[0]=255;S[1]=172}S[2]=y.height>>>24&255;S[3]=y.height>>16&255;S[4]=y.height>>8&255;S[5]=255&y.height;for(m=d,p=e.length;m<p;m++){for(var C=0;C<6&&S[C]===e[m+C];)C++;if(6===C){a.length=m+6;break}}if(4294967295===a.length)throw new o("segment end was not found")}a.headerEnd=d;return a}function y(e,t,a,r){for(var i=[],n=a;n<r;){var s=b(t,n);n=s.headerEnd;var o={header:s,data:t};if(!e.randomAccess){o.start=n;n+=s.length;o.end=n}i.push(o);if(51===s.type)break}if(e.randomAccess)for(var c=0,l=i.length;c<l;c++){i[c].start=n;n+=i[c].header.length;i[c].end=n}return i}function v(e,t){return{width:(0,i.readUint32)(e,t),height:(0,i.readUint32)(e,t+4),x:(0,i.readUint32)(e,t+8),y:(0,i.readUint32)(e,t+12),combinationOperator:7&e[t+16]}}var w=17;function k(e,t){var a,r,n,s,c=e.header,l=e.data,h=e.start,u=e.end;switch(c.type){case 0:var d={},f=(0,i.readUint16)(l,h);d.huffman=!!(1&f);d.refinement=!!(2&f);d.huffmanDHSelector=f>>2&3;d.huffmanDWSelector=f>>4&3;d.bitmapSizeSelector=f>>6&1;d.aggregationInstancesSelector=f>>7&1;d.bitmapCodingContextUsed=!!(256&f);d.bitmapCodingContextRetained=!!(512&f);d.template=f>>10&3;d.refinementTemplate=f>>12&1;h+=2;if(!d.huffman){s=0===d.template?4:1;r=[];for(n=0;n<s;n++){r.push({x:(0,i.readInt8)(l,h),y:(0,i.readInt8)(l,h+1)});h+=2}d.at=r}if(d.refinement&&!d.refinementTemplate){r=[];for(n=0;n<2;n++){r.push({x:(0,i.readInt8)(l,h),y:(0,i.readInt8)(l,h+1)});h+=2}d.refinementAt=r}d.numberOfExportedSymbols=(0,i.readUint32)(l,h);h+=4;d.numberOfNewSymbols=(0,i.readUint32)(l,h);h+=4;a=[d,c.number,c.referredTo,l,h,u];break;case 6:case 7:var g={};g.info=v(l,h);h+=w;var m=(0,i.readUint16)(l,h);h+=2;g.huffman=!!(1&m);g.refinement=!!(2&m);g.logStripSize=m>>2&3;g.stripSize=1<<g.logStripSize;g.referenceCorner=m>>4&3;g.transposed=!!(64&m);g.combinationOperator=m>>7&3;g.defaultPixelValue=m>>9&1;g.dsOffset=m<<17>>27;g.refinementTemplate=m>>15&1;if(g.huffman){var p=(0,i.readUint16)(l,h);h+=2;g.huffmanFS=3&p;g.huffmanDS=p>>2&3;g.huffmanDT=p>>4&3;g.huffmanRefinementDW=p>>6&3;g.huffmanRefinementDH=p>>8&3;g.huffmanRefinementDX=p>>10&3;g.huffmanRefinementDY=p>>12&3;g.huffmanRefinementSizeSelector=!!(16384&p)}if(g.refinement&&!g.refinementTemplate){r=[];for(n=0;n<2;n++){r.push({x:(0,i.readInt8)(l,h),y:(0,i.readInt8)(l,h+1)});h+=2}g.refinementAt=r}g.numberOfSymbolInstances=(0,i.readUint32)(l,h);h+=4;a=[g,c.referredTo,l,h,u];break;case 16:const e={},t=l[h++];e.mmr=!!(1&t);e.template=t>>1&3;e.patternWidth=l[h++];e.patternHeight=l[h++];e.maxPatternIndex=(0,i.readUint32)(l,h);h+=4;a=[e,c.number,l,h,u];break;case 22:case 23:const C={};C.info=v(l,h);h+=w;const x=l[h++];C.mmr=!!(1&x);C.template=x>>1&3;C.enableSkip=!!(8&x);C.combinationOperator=x>>4&7;C.defaultPixelValue=x>>7&1;C.gridWidth=(0,i.readUint32)(l,h);h+=4;C.gridHeight=(0,i.readUint32)(l,h);h+=4;C.gridOffsetX=4294967295&(0,i.readUint32)(l,h);h+=4;C.gridOffsetY=4294967295&(0,i.readUint32)(l,h);h+=4;C.gridVectorX=(0,i.readUint16)(l,h);h+=2;C.gridVectorY=(0,i.readUint16)(l,h);h+=2;a=[C,c.referredTo,l,h,u];break;case 38:case 39:var b={};b.info=v(l,h);h+=w;var y=l[h++];b.mmr=!!(1&y);b.template=y>>1&3;b.prediction=!!(8&y);if(!b.mmr){s=0===b.template?4:1;r=[];for(n=0;n<s;n++){r.push({x:(0,i.readInt8)(l,h),y:(0,i.readInt8)(l,h+1)});h+=2}b.at=r}a=[b,l,h,u];break;case 48:var k={width:(0,i.readUint32)(l,h),height:(0,i.readUint32)(l,h+4),resolutionX:(0,i.readUint32)(l,h+8),resolutionY:(0,i.readUint32)(l,h+12)};4294967295===k.height&&delete k.height;var S=l[h+16];(0,i.readUint16)(l,h+17);k.lossless=!!(1&S);k.refinement=!!(2&S);k.defaultPixelValue=S>>2&1;k.combinationOperator=S>>3&3;k.requiresBuffer=!!(32&S);k.combinationOperatorOverride=!!(64&S);a=[k];break;case 49:case 50:case 51:break;case 53:a=[c.number,l,h,u];break;case 62:break;default:throw new o(`segment type ${c.typeName}(${c.type})`+" is not implemented")}var C="on"+c.typeName;C in t&&t[C].apply(t,a)}function S(e,t){for(var a=0,r=e.length;a<r;a++)k(e[a],t)}function C(){}C.prototype={onPageInformation:function(e){this.currentPageInfo=e;var t=e.width+7>>3,a=new Uint8ClampedArray(t*e.height);if(e.defaultPixelValue)for(var r=0,i=a.length;r<i;r++)a[r]=255;this.buffer=a},drawBitmap:function(e,t){var a,r,i,n,s=this.currentPageInfo,c=e.width,l=e.height,h=s.width+7>>3,u=s.combinationOperatorOverride?e.combinationOperator:s.combinationOperator,d=this.buffer,f=128>>(7&e.x),g=e.y*h+(e.x>>3);switch(u){case 0:for(a=0;a<l;a++){i=f;n=g;for(r=0;r<c;r++){t[a][r]&&(d[n]|=i);if(!(i>>=1)){i=128;n++}}g+=h}break;case 2:for(a=0;a<l;a++){i=f;n=g;for(r=0;r<c;r++){t[a][r]&&(d[n]^=i);if(!(i>>=1)){i=128;n++}}g+=h}break;default:throw new o(`operator ${u} is not supported`)}},onImmediateGenericRegion:function(e,a,r,i){var n=e.info,s=new t(a,r,i),o=g(e.mmr,n.width,n.height,e.template,e.prediction,null,e.at,s);this.drawBitmap(n,o)},onImmediateLosslessGenericRegion:function(){this.onImmediateGenericRegion.apply(this,arguments)},onSymbolDictionary:function(e,r,n,s,l,h){let u,d;if(e.huffman){u=function(e,t,a){let r,i,n,s,c=0;switch(e.huffmanDHSelector){case 0:case 1:r=T(e.huffmanDHSelector+4);break;case 3:r=O(c,t,a);c++;break;default:throw new o("invalid Huffman DH selector")}switch(e.huffmanDWSelector){case 0:case 1:i=T(e.huffmanDWSelector+2);break;case 3:i=O(c,t,a);c++;break;default:throw new o("invalid Huffman DW selector")}if(e.bitmapSizeSelector){n=O(c,t,a);c++}else n=T(1);s=e.aggregationInstancesSelector?O(c,t,a):T(1);return{tableDeltaHeight:r,tableDeltaWidth:i,tableBitmapSize:n,tableAggregateInstances:s}}(e,n,this.customTables);d=new E(s,l,h)}var f=this.symbols;f||(this.symbols=f={});for(var b=[],y=0,v=n.length;y<v;y++){const e=f[n[y]];e&&(b=b.concat(e))}var w=new t(s,l,h);f[r]=function(e,t,r,n,s,l,h,u,d,f,b,y){if(e&&t)throw new o("symbol refinement with Huffman is not supported");var v=[],w=0,k=(0,i.log2)(r.length+n),S=b.decoder,C=b.contextCache;let x,A;if(e){x=T(1);A=[];k=Math.max(k,1)}for(;v.length<n;){w+=e?l.tableDeltaHeight.decode(y):a(C,"IADH",S);let i=0,n=0;const s=e?A.length:0;for(;;){var I,F=e?l.tableDeltaWidth.decode(y):a(C,"IADW",S);if(null===F)break;i+=F;n+=i;if(t){var E=a(C,"IAAI",S);if(E>1)I=p(e,t,i,w,0,E,1,r.concat(v),k,0,0,1,0,l,d,f,b,0,y);else{var O=c(C,S,k),D=a(C,"IARDX",S),N=a(C,"IARDY",S);I=m(i,w,d,O<r.length?r[O]:v[O-r.length],D,N,!1,f,b)}v.push(I)}else if(e)A.push(i);else{I=g(!1,i,w,h,!1,null,u,b);v.push(I)}}if(e&&!t){const e=l.tableBitmapSize.decode(y);y.byteAlign();let t;if(0===e)t=P(y,n,w);else{const a=y.end,r=y.position+e;y.end=r;t=B(y,n,w,!1);y.end=a;y.position=r}const a=A.length;if(s===a-1)v.push(t);else{let e,r,i,n,o,c=0;for(e=s;e<a;e++){n=A[e];i=c+n;o=[];for(r=0;r<w;r++)o.push(t[r].subarray(c,i));v.push(o);c=i}}}}for(var M=[],L=[],R=!1,U=r.length+n;L.length<U;){for(var q=e?x.decode(y):a(C,"IAEX",S);q--;)L.push(R);R=!R}for(var j=0,_=r.length;j<_;j++)L[j]&&M.push(r[j]);for(var z=0;z<n;j++,z++)L[j]&&M.push(v[z]);return M}(e.huffman,e.refinement,b,e.numberOfNewSymbols,e.numberOfExportedSymbols,u,e.template,e.at,e.refinementTemplate,e.refinementAt,w,d)},onImmediateTextRegion:function(e,a,r,n,s){var c=e.info;let l,h;for(var u=this.symbols,d=[],f=0,g=a.length;f<g;f++){const e=u[a[f]];e&&(d=d.concat(e))}var m=(0,i.log2)(d.length);if(e.huffman){h=new E(r,n,s);l=function(e,t,a,r,i){const n=[];for(let e=0;e<=34;e++){const t=i.readBits(4);n.push(new x([e,t,0,0]))}const s=new I(n,!1);n.length=0;for(let e=0;e<r;){const t=s.decode(i);if(t>=32){let a,r,s;switch(t){case 32:if(0===e)throw new o("no previous value in symbol ID table");r=i.readBits(2)+3;a=n[e-1].prefixLength;break;case 33:r=i.readBits(3)+3;a=0;break;case 34:r=i.readBits(7)+11;a=0;break;default:throw new o("invalid code length in symbol ID table")}for(s=0;s<r;s++){n.push(new x([e,a,0,0]));e++}}else{n.push(new x([e,t,0,0]));e++}}i.byteAlign();const c=new I(n,!1);let l,h,u,d=0;switch(e.huffmanFS){case 0:case 1:l=T(e.huffmanFS+6);break;case 3:l=O(d,t,a);d++;break;default:throw new o("invalid Huffman FS selector")}switch(e.huffmanDS){case 0:case 1:case 2:h=T(e.huffmanDS+8);break;case 3:h=O(d,t,a);d++;break;default:throw new o("invalid Huffman DS selector")}switch(e.huffmanDT){case 0:case 1:case 2:u=T(e.huffmanDT+11);break;case 3:u=O(d,t,a);d++;break;default:throw new o("invalid Huffman DT selector")}if(e.refinement)throw new o("refinement with Huffman is not supported");return{symbolIDTable:c,tableFirstS:l,tableDeltaS:h,tableDeltaT:u}}(e,a,this.customTables,d.length,h)}var b=new t(r,n,s),y=p(e.huffman,e.refinement,c.width,c.height,e.defaultPixelValue,e.numberOfSymbolInstances,e.stripSize,d,m,e.transposed,e.dsOffset,e.referenceCorner,e.combinationOperator,l,e.refinementTemplate,e.refinementAt,b,e.logStripSize,h);this.drawBitmap(c,y)},onImmediateLosslessTextRegion:function(){this.onImmediateTextRegion.apply(this,arguments)},onPatternDictionary(e,a,r,i,n){let s=this.patterns;s||(this.patterns=s={});const o=new t(r,i,n);s[a]=function(e,t,a,r,i,n){const s=[];if(!e){s.push({x:-t,y:0});if(0===i){s.push({x:-3,y:-1});s.push({x:2,y:-2});s.push({x:-2,y:-2})}}const o=g(e,(r+1)*t,a,i,!1,null,s,n),c=[];for(let e=0;e<=r;e++){const r=[],i=t*e,n=i+t;for(let e=0;e<a;e++)r.push(o[e].subarray(i,n));c.push(r)}return c}(e.mmr,e.patternWidth,e.patternHeight,e.maxPatternIndex,e.template,o)},onImmediateHalftoneRegion(e,a,r,n,s){const c=this.patterns[a[0]],l=e.info,h=new t(r,n,s),u=function(e,t,a,r,n,s,c,l,h,u,d,f,m,p,b){if(c)throw new o("skip is not supported");if(0!==l)throw new o("operator "+l+" is not supported in halftone region");const y=[];let v,w,k;for(v=0;v<n;v++){k=new Uint8Array(r);if(s)for(w=0;w<r;w++)k[w]=s;y.push(k)}const S=t.length,C=t[0],x=C[0].length,A=C.length,I=(0,i.log2)(S),F=[];if(!e){F.push({x:a<=1?3:2,y:-1});if(0===a){F.push({x:-3,y:-1});F.push({x:2,y:-2});F.push({x:-2,y:-2})}}const T=[];let O,P,D,N,M,L,R,U,q,j,_;e&&(O=new E(b.data,b.start,b.end));for(v=I-1;v>=0;v--){P=e?B(O,h,u,!0):g(!1,h,u,a,!1,null,F,b);T[v]=P}for(D=0;D<u;D++)for(N=0;N<h;N++){M=0;L=0;for(w=I-1;w>=0;w--){M=T[w][D][N]^M;L|=M<<w}R=t[L];U=d+D*p+N*m>>8;q=f+D*m-N*p>>8;if(U>=0&&U+x<=r&&q>=0&&q+A<=n)for(v=0;v<A;v++){_=y[q+v];j=R[v];for(w=0;w<x;w++)_[U+w]|=j[w]}else{let e,t;for(v=0;v<A;v++){t=q+v;if(!(t<0||t>=n)){_=y[t];j=R[v];for(w=0;w<x;w++){e=U+w;e>=0&&e<r&&(_[e]|=j[w])}}}}}return y}(e.mmr,c,e.template,l.width,l.height,e.defaultPixelValue,e.enableSkip,e.combinationOperator,e.gridWidth,e.gridHeight,e.gridOffsetX,e.gridOffsetY,e.gridVectorX,e.gridVectorY,h);this.drawBitmap(l,u)},onImmediateLosslessHalftoneRegion(){this.onImmediateHalftoneRegion.apply(this,arguments)},onTables(e,t,a,r){let n=this.customTables;n||(this.customTables=n={});n[e]=function(e,t,a){const r=e[t],n=4294967295&(0,i.readUint32)(e,t+1),s=4294967295&(0,i.readUint32)(e,t+5),o=new E(e,t+9,a),c=1+(r>>1&7),l=1+(r>>4&7),h=[];let u,d,f=n;do{u=o.readBits(c);d=o.readBits(l);h.push(new x([f,u,d,0]));f+=1<<d}while(f<s);u=o.readBits(c);h.push(new x([n-1,u,32,0,"lower"]));u=o.readBits(c);h.push(new x([s,u,32,0]));if(1&r){u=o.readBits(c);h.push(new x([u,0]))}return new I(h,!1)}(t,a,r)}};function x(e){if(2===e.length){this.isOOB=!0;this.rangeLow=0;this.prefixLength=e[0];this.rangeLength=0;this.prefixCode=e[1];this.isLowerRange=!1}else{this.isOOB=!1;this.rangeLow=e[0];this.prefixLength=e[1];this.rangeLength=e[2];this.prefixCode=e[3];this.isLowerRange="lower"===e[4]}}function A(e){this.children=[];if(e){this.isLeaf=!0;this.rangeLength=e.rangeLength;this.rangeLow=e.rangeLow;this.isLowerRange=e.isLowerRange;this.isOOB=e.isOOB}else this.isLeaf=!1}A.prototype={buildTree(e,t){const a=e.prefixCode>>t&1;if(t<=0)this.children[a]=new A(e);else{let r=this.children[a];r||(this.children[a]=r=new A(null));r.buildTree(e,t-1)}},decodeNode(e){if(this.isLeaf){if(this.isOOB)return null;const t=e.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-t:t)}const t=this.children[e.readBit()];if(!t)throw new o("invalid Huffman data");return t.decodeNode(e)}};function I(e,t){t||this.assignPrefixCodes(e);this.rootNode=new A(null);for(let t=0,a=e.length;t<a;t++){const a=e[t];a.prefixLength>0&&this.rootNode.buildTree(a,a.prefixLength-1)}}I.prototype={decode(e){return this.rootNode.decodeNode(e)},assignPrefixCodes(e){const t=e.length;let a=0;for(let r=0;r<t;r++)a=Math.max(a,e[r].prefixLength);const r=new Uint32Array(a+1);for(let a=0;a<t;a++)r[e[a].prefixLength]++;let i,n,s,o=1,c=0;r[0]=0;for(;o<=a;){c=c+r[o-1]<<1;i=c;n=0;for(;n<t;){s=e[n];if(s.prefixLength===o){s.prefixCode=i;i++}n++}o++}}};const F={};function T(e){let t,a=F[e];if(a)return a;switch(e){case 1:t=[[0,1,4,0],[16,2,8,2],[272,3,16,6],[65808,3,32,7]];break;case 2:t=[[0,1,0,0],[1,2,0,2],[2,3,0,6],[3,4,3,14],[11,5,6,30],[75,6,32,62],[6,63]];break;case 3:t=[[-256,8,8,254],[0,1,0,0],[1,2,0,2],[2,3,0,6],[3,4,3,14],[11,5,6,30],[-257,8,32,255,"lower"],[75,7,32,126],[6,62]];break;case 4:t=[[1,1,0,0],[2,2,0,2],[3,3,0,6],[4,4,3,14],[12,5,6,30],[76,5,32,31]];break;case 5:t=[[-255,7,8,126],[1,1,0,0],[2,2,0,2],[3,3,0,6],[4,4,3,14],[12,5,6,30],[-256,7,32,127,"lower"],[76,6,32,62]];break;case 6:t=[[-2048,5,10,28],[-1024,4,9,8],[-512,4,8,9],[-256,4,7,10],[-128,5,6,29],[-64,5,5,30],[-32,4,5,11],[0,2,7,0],[128,3,7,2],[256,3,8,3],[512,4,9,12],[1024,4,10,13],[-2049,6,32,62,"lower"],[2048,6,32,63]];break;case 7:t=[[-1024,4,9,8],[-512,3,8,0],[-256,4,7,9],[-128,5,6,26],[-64,5,5,27],[-32,4,5,10],[0,4,5,11],[32,5,5,28],[64,5,6,29],[128,4,7,12],[256,3,8,1],[512,3,9,2],[1024,3,10,3],[-1025,5,32,30,"lower"],[2048,5,32,31]];break;case 8:t=[[-15,8,3,252],[-7,9,1,508],[-5,8,1,253],[-3,9,0,509],[-2,7,0,124],[-1,4,0,10],[0,2,1,0],[2,5,0,26],[3,6,0,58],[4,3,4,4],[20,6,1,59],[22,4,4,11],[38,4,5,12],[70,5,6,27],[134,5,7,28],[262,6,7,60],[390,7,8,125],[646,6,10,61],[-16,9,32,510,"lower"],[1670,9,32,511],[2,1]];break;case 9:t=[[-31,8,4,252],[-15,9,2,508],[-11,8,2,253],[-7,9,1,509],[-5,7,1,124],[-3,4,1,10],[-1,3,1,2],[1,3,1,3],[3,5,1,26],[5,6,1,58],[7,3,5,4],[39,6,2,59],[43,4,5,11],[75,4,6,12],[139,5,7,27],[267,5,8,28],[523,6,8,60],[779,7,9,125],[1291,6,11,61],[-32,9,32,510,"lower"],[3339,9,32,511],[2,0]];break;case 10:t=[[-21,7,4,122],[-5,8,0,252],[-4,7,0,123],[-3,5,0,24],[-2,2,2,0],[2,5,0,25],[3,6,0,54],[4,7,0,124],[5,8,0,253],[6,2,6,1],[70,5,5,26],[102,6,5,55],[134,6,6,56],[198,6,7,57],[326,6,8,58],[582,6,9,59],[1094,6,10,60],[2118,7,11,125],[-22,8,32,254,"lower"],[4166,8,32,255],[2,2]];break;case 11:t=[[1,1,0,0],[2,2,1,2],[4,4,0,12],[5,4,1,13],[7,5,1,28],[9,5,2,29],[13,6,2,60],[17,7,2,122],[21,7,3,123],[29,7,4,124],[45,7,5,125],[77,7,6,126],[141,7,32,127]];break;case 12:t=[[1,1,0,0],[2,2,0,2],[3,3,1,6],[5,5,0,28],[6,5,1,29],[8,6,1,60],[10,7,0,122],[11,7,1,123],[13,7,2,124],[17,7,3,125],[25,7,4,126],[41,8,5,254],[73,8,32,255]];break;case 13:t=[[1,1,0,0],[2,3,0,4],[3,4,0,12],[4,5,0,28],[5,4,1,13],[7,3,3,5],[15,6,1,58],[17,6,2,59],[21,6,3,60],[29,6,4,61],[45,6,5,62],[77,7,6,126],[141,7,32,127]];break;case 14:t=[[-2,3,0,4],[-1,3,0,5],[0,1,0,0],[1,3,0,6],[2,3,0,7]];break;case 15:t=[[-24,7,4,124],[-8,6,2,60],[-4,5,1,28],[-2,4,0,12],[-1,3,0,4],[0,1,0,0],[1,3,0,5],[2,4,0,13],[3,5,1,29],[5,6,2,61],[9,7,4,125],[-25,7,32,126,"lower"],[25,7,32,127]];break;default:throw new o(`standard table B.${e} does not exist`)}for(let e=0,a=t.length;e<a;e++)t[e]=new x(t[e]);a=new I(t,!0);F[e]=a;return a}function E(e,t,a){this.data=e;this.start=t;this.end=a;this.position=t;this.shift=-1;this.currentByte=0}E.prototype={readBit(){if(this.shift<0){if(this.position>=this.end)throw new o("end of data while reading bit");this.currentByte=this.data[this.position++];this.shift=7}const e=this.currentByte>>this.shift&1;this.shift--;return e},readBits(e){let t,a=0;for(t=e-1;t>=0;t--)a|=this.readBit()<<t;return a},byteAlign(){this.shift=-1},next(){return this.position>=this.end?-1:this.data[this.position++]}};function O(e,t,a){let r=0;for(let i=0,n=t.length;i<n;i++){const n=a[t[i]];if(n){if(e===r)return n;r++}}throw new o("can't find custom Huffman table")}function P(e,t,a){const r=[];for(let i=0;i<a;i++){const a=new Uint8Array(t);r.push(a);for(let r=0;r<t;r++)a[r]=e.readBit();e.byteAlign()}return r}function B(e,t,a,r){const i={K:-1,Columns:t,Rows:a,BlackIs1:!0,EndOfBlock:r},n=new s.CCITTFaxDecoder(e,i),o=[];let c,l=!1;for(let e=0;e<a;e++){const e=new Uint8Array(t);o.push(e);let a=-1;for(let r=0;r<t;r++){if(a<0){c=n.readNextChar();if(-1===c){c=0;l=!0}a=7}e[r]=c>>a&1;a--}}if(r&&!l){const e=5;for(let t=0;t<e&&-1!==n.readNextChar();t++);}return o}function D(){}D.prototype={parseChunks:e=>function(e){for(var t=new C,a=0,r=e.length;a<r;a++){var i=e[a];S(y({},i.data,i.start,i.end),t)}return t.buffer}(e),parse(e){const{imgData:t,width:a,height:r}=function(e){const t=e.length;let a=0;if(151!==e[a]||74!==e[a+1]||66!==e[a+2]||50!==e[a+3]||13!==e[a+4]||10!==e[a+5]||26!==e[a+6]||10!==e[a+7])throw new o("parseJbig2 - invalid header.");const r=Object.create(null);a+=8;const n=e[a++];r.randomAccess=!(1&n);if(!(2&n)){r.numberOfPages=(0,i.readUint32)(e,a);a+=4}const s=y(r,e,a,t),c=new C;S(s,c);const{width:l,height:h}=c.currentPageInfo,u=c.buffer,d=new Uint8ClampedArray(l*h);let f=0,g=0;for(let e=0;e<h;e++){let e,t=0;for(let a=0;a<l;a++){if(!t){t=128;e=u[g++]}d[f++]=e&t?0:255;t>>=1}}return{imgData:d,width:l,height:h}}(e);this.width=a;this.height=r;return t}};return D}();t.Jbig2Image=c},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.ArithmeticDecoder=void 0;const r=[{qe:22017,nmps:1,nlps:1,switchFlag:1},{qe:13313,nmps:2,nlps:6,switchFlag:0},{qe:6145,nmps:3,nlps:9,switchFlag:0},{qe:2753,nmps:4,nlps:12,switchFlag:0},{qe:1313,nmps:5,nlps:29,switchFlag:0},{qe:545,nmps:38,nlps:33,switchFlag:0},{qe:22017,nmps:7,nlps:6,switchFlag:1},{qe:21505,nmps:8,nlps:14,switchFlag:0},{qe:18433,nmps:9,nlps:14,switchFlag:0},{qe:14337,nmps:10,nlps:14,switchFlag:0},{qe:12289,nmps:11,nlps:17,switchFlag:0},{qe:9217,nmps:12,nlps:18,switchFlag:0},{qe:7169,nmps:13,nlps:20,switchFlag:0},{qe:5633,nmps:29,nlps:21,switchFlag:0},{qe:22017,nmps:15,nlps:14,switchFlag:1},{qe:21505,nmps:16,nlps:14,switchFlag:0},{qe:20737,nmps:17,nlps:15,switchFlag:0},{qe:18433,nmps:18,nlps:16,switchFlag:0},{qe:14337,nmps:19,nlps:17,switchFlag:0},{qe:13313,nmps:20,nlps:18,switchFlag:0},{qe:12289,nmps:21,nlps:19,switchFlag:0},{qe:10241,nmps:22,nlps:19,switchFlag:0},{qe:9217,nmps:23,nlps:20,switchFlag:0},{qe:8705,nmps:24,nlps:21,switchFlag:0},{qe:7169,nmps:25,nlps:22,switchFlag:0},{qe:6145,nmps:26,nlps:23,switchFlag:0},{qe:5633,nmps:27,nlps:24,switchFlag:0},{qe:5121,nmps:28,nlps:25,switchFlag:0},{qe:4609,nmps:29,nlps:26,switchFlag:0},{qe:4353,nmps:30,nlps:27,switchFlag:0},{qe:2753,nmps:31,nlps:28,switchFlag:0},{qe:2497,nmps:32,nlps:29,switchFlag:0},{qe:2209,nmps:33,nlps:30,switchFlag:0},{qe:1313,nmps:34,nlps:31,switchFlag:0},{qe:1089,nmps:35,nlps:32,switchFlag:0},{qe:673,nmps:36,nlps:33,switchFlag:0},{qe:545,nmps:37,nlps:34,switchFlag:0},{qe:321,nmps:38,nlps:35,switchFlag:0},{qe:273,nmps:39,nlps:36,switchFlag:0},{qe:133,nmps:40,nlps:37,switchFlag:0},{qe:73,nmps:41,nlps:38,switchFlag:0},{qe:37,nmps:42,nlps:39,switchFlag:0},{qe:21,nmps:43,nlps:40,switchFlag:0},{qe:9,nmps:44,nlps:41,switchFlag:0},{qe:5,nmps:45,nlps:42,switchFlag:0},{qe:1,nmps:45,nlps:43,switchFlag:0},{qe:22017,nmps:46,nlps:46,switchFlag:0}];t.ArithmeticDecoder=class{constructor(e,t,a){this.data=e;this.bp=t;this.dataEnd=a;this.chigh=e[t];this.clow=0;this.byteIn();this.chigh=this.chigh<<7&65535|this.clow>>9&127;this.clow=this.clow<<7&65535;this.ct-=7;this.a=32768}byteIn(){const e=this.data;let t=this.bp;if(255===e[t])if(e[t+1]>143){this.clow+=65280;this.ct=8}else{t++;this.clow+=e[t]<<9;this.ct=7;this.bp=t}else{t++;this.clow+=t<this.dataEnd?e[t]<<8:65280;this.ct=8;this.bp=t}if(this.clow>65535){this.chigh+=this.clow>>16;this.clow&=65535}}readBit(e,t){let a=e[t]>>1,i=1&e[t];const n=r[a],s=n.qe;let o,c=this.a-s;if(this.chigh<s)if(c<s){c=s;o=i;a=n.nmps}else{c=s;o=1^i;1===n.switchFlag&&(i=o);a=n.nlps}else{this.chigh-=s;if(0!=(32768&c)){this.a=c;return i}if(c<s){o=1^i;1===n.switchFlag&&(i=o);a=n.nlps}else{o=i;a=n.nmps}}do{0===this.ct&&this.byteIn();c<<=1;this.chigh=this.chigh<<1&65535|this.clow>>15&1;this.clow=this.clow<<1&65535;this.ct--}while(0==(32768&c));this.a=c;e[t]=a<<1|i;return o}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.JpegStream=void 0;var r=a(2),i=a(11),n=a(4),s=a(18);const o=function(){function e(e,t,a,r){let n;for(;-1!==(n=e.getByte());)if(255===n){e.skip(-1);break}this.stream=e;this.maybeLength=t;this.dict=a;this.params=r;i.DecodeStream.call(this,t)}e.prototype=Object.create(i.DecodeStream.prototype);Object.defineProperty(e.prototype,"bytes",{get:function(){return(0,r.shadow)(this,"bytes",this.stream.getBytes(this.maybeLength))},configurable:!0});e.prototype.ensureBuffer=function(e){};e.prototype.readBlock=function(){if(this.eof)return;const e={decodeTransform:void 0,colorTransform:void 0},t=this.dict.getArray("Decode","D");if(this.forceRGB&&Array.isArray(t)){const a=this.dict.get("BitsPerComponent")||8,r=t.length,i=new Int32Array(r);let n=!1;const s=(1<<a)-1;for(let e=0;e<r;e+=2){i[e]=256*(t[e+1]-t[e])|0;i[e+1]=t[e]*s|0;256===i[e]&&0===i[e+1]||(n=!0)}n&&(e.decodeTransform=i)}if((0,n.isDict)(this.params)){const t=this.params.get("ColorTransform");Number.isInteger(t)&&(e.colorTransform=t)}const a=new s.JpegImage(e);a.parse(this.bytes);const r=a.getData({width:this.drawWidth,height:this.drawHeight,forceRGB:this.forceRGB,isSourcePDF:!0});this.buffer=r;this.bufferLength=r.length;this.eof=!0};Object.defineProperty(e.prototype,"maybeValidDimensions",{get:function(){const{dict:e,stream:t}=this,a=e.get("Height","H"),i=t.pos;let n,s=!0,o=!1;for(;-1!==(n=t.getByte());)if(255===n){switch(t.getByte()){case 192:case 193:case 194:o=!0;t.pos+=2;t.pos+=1;const e=t.getUint16();if(e===a)break;if(0===e){s=!1;break}if(e>10*a){s=!1;break}break;case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:o=!0;break;case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:const r=t.getUint16();r>2?t.skip(r-2):t.skip(-2);break;case 255:t.skip(-1);break;case 217:o=!0}if(o)break}t.pos=i;return(0,r.shadow)(this,"maybeValidDimensions",s)},configurable:!0});e.prototype.getIR=function(e=!1){return(0,r.createObjectURL)(this.bytes,"image/jpeg",e)};return e}();t.JpegStream=o},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.JpegImage=void 0;var r=a(2),i=a(7);class n extends r.BaseException{constructor(e){super(`JPEG error: ${e}`)}}class s extends r.BaseException{constructor(e,t){super(e);this.scanLines=t}}class o extends r.BaseException{}var c=function(){var e=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]);function t({decodeTransform:e=null,colorTransform:t=-1}={}){this._decodeTransform=e;this._colorTransform=t}function a(e,t){for(var a,r,i=0,n=[],s=16;s>0&&!e[s-1];)s--;n.push({children:[],index:0});var o,c=n[0];for(a=0;a<s;a++){for(r=0;r<e[a];r++){(c=n.pop()).children[c.index]=t[i];for(;c.index>0;)c=n.pop();c.index++;n.push(c);for(;n.length<=a;){n.push(o={children:[],index:0});c.children[c.index]=o.children;c=o}i++}if(a+1<s){n.push(o={children:[],index:0});c.children[c.index]=o.children;c=o}}return n[0].children}function c(e,t,a){return 64*((e.blocksPerLine+1)*t+a)}function l(t,a,l,h,u,f,g,m,p,b=!1){var y=l.mcusPerLine,v=l.progressive,w=a,k=0,S=0;function C(){if(S>0){S--;return k>>S&1}if(255===(k=t[a++])){var e=t[a++];if(e){if(220===e&&b){a+=2;const e=(0,i.readUint16)(t,a);a+=2;if(e>0&&e!==l.scanLines)throw new s("Found DNL marker (0xFFDC) while parsing scan data",e)}else if(217===e){if(b){const e=8*O;if(e>0&&e<l.scanLines/10)throw new s("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter",e)}throw new o("Found EOI marker (0xFFD9) while parsing scan data")}throw new n(`unexpected marker ${(k<<8|e).toString(16)}`)}}S=7;return k>>>7}function x(e){for(var t=e;;){switch(typeof(t=t[C()])){case"number":return t;case"object":continue}throw new n("invalid huffman sequence")}}function A(e){for(var t=0;e>0;){t=t<<1|C();e--}return t}function I(e){if(1===e)return 1===C()?1:-1;var t=A(e);return t>=1<<e-1?t:t+(-1<<e)+1}var F=0;var T,E=0;let O=0;function P(e,t,a,r,i){var n=a%y;O=(a/y|0)*e.v+r;var s=n*e.h+i;t(e,c(e,O,s))}function B(e,t,a){O=a/e.blocksPerLine|0;var r=a%e.blocksPerLine;t(e,c(e,O,r))}var D,N,M,L,R,U,q=h.length;U=v?0===f?0===m?function(e,t){var a=x(e.huffmanTableDC),r=0===a?0:I(a)<<p;e.blockData[t]=e.pred+=r}:function(e,t){e.blockData[t]|=C()<<p}:0===m?function(t,a){if(F>0)F--;else for(var r=f,i=g;r<=i;){var n=x(t.huffmanTableAC),s=15&n,o=n>>4;if(0!==s){var c=e[r+=o];t.blockData[a+c]=I(s)*(1<<p);r++}else{if(o<15){F=A(o)+(1<<o)-1;break}r+=16}}}:function(t,a){for(var r,i,s=f,o=g,c=0;s<=o;){const o=a+e[s],l=t.blockData[o]<0?-1:1;switch(E){case 0:c=(i=x(t.huffmanTableAC))>>4;if(0===(r=15&i))if(c<15){F=A(c)+(1<<c);E=4}else{c=16;E=1}else{if(1!==r)throw new n("invalid ACn encoding");T=I(r);E=c?2:3}continue;case 1:case 2:t.blockData[o]?t.blockData[o]+=l*(C()<<p):0===--c&&(E=2===E?3:0);break;case 3:if(t.blockData[o])t.blockData[o]+=l*(C()<<p);else{t.blockData[o]=T<<p;E=0}break;case 4:t.blockData[o]&&(t.blockData[o]+=l*(C()<<p))}s++}4===E&&0===--F&&(E=0)}:function(t,a){var r=x(t.huffmanTableDC),i=0===r?0:I(r);t.blockData[a]=t.pred+=i;for(var n=1;n<64;){var s=x(t.huffmanTableAC),o=15&s,c=s>>4;if(0!==o){var l=e[n+=c];t.blockData[a+l]=I(o);n++}else{if(c<15)break;n+=16}}};var j,_,z,H,G=0;_=1===q?h[0].blocksPerLine*h[0].blocksPerColumn:y*l.mcusPerColumn;for(;G<_;){var W=u?Math.min(_-G,u):_;for(N=0;N<q;N++)h[N].pred=0;F=0;if(1===q){D=h[0];for(R=0;R<W;R++){B(D,U,G);G++}}else for(R=0;R<W;R++){for(N=0;N<q;N++){z=(D=h[N]).h;H=D.v;for(M=0;M<H;M++)for(L=0;L<z;L++)P(D,U,G,M,L)}G++}S=0;if(!(j=d(t,a)))break;if(j.invalid){(0,r.warn)("decodeScan - unexpected MCU data, current marker is: "+j.invalid);a=j.offset}var X=j&&j.marker;if(!X||X<=65280)throw new n("decodeScan - a valid marker was not found.");if(!(X>=65488&&X<=65495))break;a+=2}if((j=d(t,a))&&j.invalid){(0,r.warn)("decodeScan - unexpected Scan data, current marker is: "+j.invalid);a=j.offset}return a-w}function h(e,t,a){var r,i,s,o,c,l,h,u,d,f,g,m,p,b,y,v,w,k=e.quantizationTable,S=e.blockData;if(!k)throw new n("missing required Quantization Table.");for(var C=0;C<64;C+=8){d=S[t+C];f=S[t+C+1];g=S[t+C+2];m=S[t+C+3];p=S[t+C+4];b=S[t+C+5];y=S[t+C+6];v=S[t+C+7];d*=k[C];if(0!=(f|g|m|p|b|y|v)){f*=k[C+1];g*=k[C+2];m*=k[C+3];p*=k[C+4];b*=k[C+5];i=(r=(r=5793*d+128>>8)+(i=5793*p+128>>8)+1>>1)-i;w=3784*(s=g)+1567*(o=y*=k[C+6])+128>>8;s=1567*s-3784*o+128>>8;h=(c=(c=2896*(f-(v*=k[C+7]))+128>>8)+(h=b<<4)+1>>1)-h;l=(u=(u=2896*(f+v)+128>>8)+(l=m<<4)+1>>1)-l;o=(r=r+(o=w)+1>>1)-o;s=(i=i+s+1>>1)-s;w=2276*c+3406*u+2048>>12;c=3406*c-2276*u+2048>>12;u=w;w=799*l+4017*h+2048>>12;l=4017*l-799*h+2048>>12;h=w;a[C]=r+u;a[C+7]=r-u;a[C+1]=i+h;a[C+6]=i-h;a[C+2]=s+l;a[C+5]=s-l;a[C+3]=o+c;a[C+4]=o-c}else{w=5793*d+512>>10;a[C]=w;a[C+1]=w;a[C+2]=w;a[C+3]=w;a[C+4]=w;a[C+5]=w;a[C+6]=w;a[C+7]=w}}for(var x=0;x<8;++x){d=a[x];if(0!=((f=a[x+8])|(g=a[x+16])|(m=a[x+24])|(p=a[x+32])|(b=a[x+40])|(y=a[x+48])|(v=a[x+56]))){i=(r=4112+((r=5793*d+2048>>12)+(i=5793*p+2048>>12)+1>>1))-i;w=3784*(s=g)+1567*(o=y)+2048>>12;s=1567*s-3784*o+2048>>12;o=w;h=(c=(c=2896*(f-v)+2048>>12)+(h=b)+1>>1)-h;l=(u=(u=2896*(f+v)+2048>>12)+(l=m)+1>>1)-l;w=2276*c+3406*u+2048>>12;c=3406*c-2276*u+2048>>12;u=w;w=799*l+4017*h+2048>>12;l=4017*l-799*h+2048>>12;(d=(r=r+o+1>>1)+u)<16?d=0:d>=4080?d=255:d>>=4;(f=(i=i+s+1>>1)+(h=w))<16?f=0:f>=4080?f=255:f>>=4;(g=(s=i-s)+l)<16?g=0:g>=4080?g=255:g>>=4;(m=(o=r-o)+c)<16?m=0:m>=4080?m=255:m>>=4;(p=o-c)<16?p=0:p>=4080?p=255:p>>=4;(b=s-l)<16?b=0:b>=4080?b=255:b>>=4;(y=i-h)<16?y=0:y>=4080?y=255:y>>=4;(v=r-u)<16?v=0:v>=4080?v=255:v>>=4;S[t+x]=d;S[t+x+8]=f;S[t+x+16]=g;S[t+x+24]=m;S[t+x+32]=p;S[t+x+40]=b;S[t+x+48]=y;S[t+x+56]=v}else{w=(w=5793*d+8192>>14)<-2040?0:w>=2024?255:w+2056>>4;S[t+x]=w;S[t+x+8]=w;S[t+x+16]=w;S[t+x+24]=w;S[t+x+32]=w;S[t+x+40]=w;S[t+x+48]=w;S[t+x+56]=w}}}function u(e,t){for(var a=t.blocksPerLine,r=t.blocksPerColumn,i=new Int16Array(64),n=0;n<r;n++)for(var s=0;s<a;s++){h(t,c(t,n,s),i)}return t.blockData}function d(e,t,a=t){const r=e.length-1;var n=a<t?a:t;if(t>=r)return null;var s=(0,i.readUint16)(e,t);if(s>=65472&&s<=65534)return{invalid:null,marker:s,offset:t};for(var o=(0,i.readUint16)(e,n);!(o>=65472&&o<=65534);){if(++n>=r)return null;o=(0,i.readUint16)(e,n)}return{invalid:s.toString(16),marker:o,offset:n}}t.prototype={parse(t,{dnlScanLines:c=null}={}){function h(){const e=(0,i.readUint16)(t,p);let a=(p+=2)+e-2;var n=d(t,a,p);if(n&&n.invalid){(0,r.warn)("readDataBlock - incorrect length, current marker is: "+n.invalid);a=n.offset}var s=t.subarray(p,a);p+=s.length;return s}function f(e){for(var t=Math.ceil(e.samplesPerLine/8/e.maxH),a=Math.ceil(e.scanLines/8/e.maxV),r=0;r<e.components.length;r++){z=e.components[r];var i=Math.ceil(Math.ceil(e.samplesPerLine/8)*z.h/e.maxH),n=Math.ceil(Math.ceil(e.scanLines/8)*z.v/e.maxV),s=t*z.h,o=64*(a*z.v)*(s+1);z.blockData=new Int16Array(o);z.blocksPerLine=i;z.blocksPerColumn=n}e.mcusPerLine=t;e.mcusPerColumn=a}var g,m,p=0,b=null,y=null;let v=0;var w=[],k=[],S=[];let C=(0,i.readUint16)(t,p);p+=2;if(65496!==C)throw new n("SOI not found");C=(0,i.readUint16)(t,p);p+=2;e:for(;65497!==C;){var x,A,I;switch(C){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var F=h();65504===C&&74===F[0]&&70===F[1]&&73===F[2]&&70===F[3]&&0===F[4]&&(b={version:{major:F[5],minor:F[6]},densityUnits:F[7],xDensity:F[8]<<8|F[9],yDensity:F[10]<<8|F[11],thumbWidth:F[12],thumbHeight:F[13],thumbData:F.subarray(14,14+3*F[12]*F[13])});65518===C&&65===F[0]&&100===F[1]&&111===F[2]&&98===F[3]&&101===F[4]&&(y={version:F[5]<<8|F[6],flags0:F[7]<<8|F[8],flags1:F[9]<<8|F[10],transformCode:F[11]});break;case 65499:for(var T=(0,i.readUint16)(t,p)+(p+=2)-2;p<T;){var E=t[p++],O=new Uint16Array(64);if(E>>4==0)for(A=0;A<64;A++)O[e[A]]=t[p++];else{if(E>>4!=1)throw new n("DQT - invalid table spec");for(A=0;A<64;A++){O[e[A]]=(0,i.readUint16)(t,p);p+=2}}w[15&E]=O}break;case 65472:case 65473:case 65474:if(g)throw new n("Only single frame JPEGs supported");p+=2;(g={}).extended=65473===C;g.progressive=65474===C;g.precision=t[p++];const u=(0,i.readUint16)(t,p);p+=2;g.scanLines=c||u;g.samplesPerLine=(0,i.readUint16)(t,p);p+=2;g.components=[];g.componentIds={};var P,B=t[p++],D=0,N=0;for(x=0;x<B;x++){P=t[p];var M=t[p+1]>>4,L=15&t[p+1];D<M&&(D=M);N<L&&(N=L);var R=t[p+2];I=g.components.push({h:M,v:L,quantizationId:R,quantizationTable:null});g.componentIds[P]=I-1;p+=3}g.maxH=D;g.maxV=N;f(g);break;case 65476:const J=(0,i.readUint16)(t,p);p+=2;for(x=2;x<J;){var U=t[p++],q=new Uint8Array(16),j=0;for(A=0;A<16;A++,p++)j+=q[A]=t[p];var _=new Uint8Array(j);for(A=0;A<j;A++,p++)_[A]=t[p];x+=17+j;(U>>4==0?S:k)[15&U]=a(q,_)}break;case 65501:p+=2;m=(0,i.readUint16)(t,p);p+=2;break;case 65498:const Z=1==++v&&!c;p+=2;var z,H=t[p++],G=[];for(x=0;x<H;x++){var W=g.componentIds[t[p++]];z=g.components[W];var X=t[p++];z.huffmanTableDC=S[X>>4];z.huffmanTableAC=k[15&X];G.push(z)}var V=t[p++],K=t[p++],Y=t[p++];try{var $=l(t,p,g,G,m,V,K,Y>>4,15&Y,Z);p+=$}catch(e){if(e instanceof s){(0,r.warn)(`${e.message} -- attempting to re-parse the JPEG image.`);return this.parse(t,{dnlScanLines:e.scanLines})}if(e instanceof o){(0,r.warn)(`${e.message} -- ignoring the rest of the image data.`);break e}throw e}break;case 65500:p+=4;break;case 65535:255!==t[p]&&p--;break;default:const Q=d(t,p-2,p-3);if(Q&&Q.invalid){(0,r.warn)("JpegImage.parse - unexpected data, current marker is: "+Q.invalid);p=Q.offset;break}if(p>=t.length-1){(0,r.warn)("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break e}throw new n("JpegImage.parse - unknown marker: "+C.toString(16))}C=(0,i.readUint16)(t,p);p+=2}this.width=g.samplesPerLine;this.height=g.scanLines;this.jfif=b;this.adobe=y;this.components=[];for(x=0;x<g.components.length;x++){var J=w[(z=g.components[x]).quantizationId];J&&(z.quantizationTable=J);this.components.push({output:u(0,z),scaleX:z.h/g.maxH,scaleY:z.v/g.maxV,blocksPerLine:z.blocksPerLine,blocksPerColumn:z.blocksPerColumn})}this.numComponents=this.components.length},_getLinearizedBlockData(e,t,a=!1){var r,i,n,s,o,c,l,h,u,d,f,g=this.width/e,m=this.height/t,p=0,b=this.components.length,y=e*t*b,v=new Uint8ClampedArray(y),w=new Uint32Array(e);let k;for(l=0;l<b;l++){i=(r=this.components[l]).scaleX*g;n=r.scaleY*m;p=l;f=r.output;s=r.blocksPerLine+1<<3;if(i!==k){for(o=0;o<e;o++){h=0|o*i;w[o]=(4294967288&h)<<3|7&h}k=i}for(c=0;c<t;c++){d=s*(4294967288&(h=0|c*n))|(7&h)<<3;for(o=0;o<e;o++){v[p]=f[d+w[o]];p+=b}}}let S=this._decodeTransform;a||4!==b||S||(S=new Int32Array([-256,255,-256,255,-256,255,-256,255]));if(S)for(l=0;l<y;)for(h=0,u=0;h<b;h++,l++,u+=2)v[l]=(v[l]*S[u]>>8)+S[u+1];return v},get _isColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:3===this.numComponents?0!==this._colorTransform:1===this._colorTransform},_convertYccToRgb:function(e){for(var t,a,r,i=0,n=e.length;i<n;i+=3){t=e[i];a=e[i+1];r=e[i+2];e[i]=t-179.456+1.402*r;e[i+1]=t+135.459-.344*a-.714*r;e[i+2]=t-226.816+1.772*a}return e},_convertYcckToRgb:function(e){for(var t,a,r,i,n=0,s=0,o=e.length;s<o;s+=4){t=e[s];a=e[s+1];r=e[s+2];i=e[s+3];e[n++]=a*(-660635669420364e-19*a+.000437130475926232*r-54080610064599e-18*t+.00048449797120281*i-.154362151871126)-122.67195406894+r*(-.000957964378445773*r+.000817076911346625*t-.00477271405408747*i+1.53380253221734)+t*(.000961250184130688*t-.00266257332283933*i+.48357088451265)+i*(-.000336197177618394*i+.484791561490776);e[n++]=107.268039397724+a*(219927104525741e-19*a-.000640992018297945*r+.000659397001245577*t+.000426105652938837*i-.176491792462875)+r*(-.000778269941513683*r+.00130872261408275*t+.000770482631801132*i-.151051492775562)+t*(.00126935368114843*t-.00265090189010898*i+.25802910206845)+i*(-.000318913117588328*i-.213742400323665);e[n++]=a*(-.000570115196973677*a-263409051004589e-19*r+.0020741088115012*t-.00288260236853442*i+.814272968359295)-20.810012546947+r*(-153496057440975e-19*r-.000132689043961446*t+.000560833691242812*i-.195152027534049)+t*(.00174418132927582*t-.00255243321439347*i+.116935020465145)+i*(-.000343531996510555*i+.24165260232407)}return e.subarray(0,n)},_convertYcckToCmyk:function(e){for(var t,a,r,i=0,n=e.length;i<n;i+=4){t=e[i];a=e[i+1];r=e[i+2];e[i]=434.456-t-1.402*r;e[i+1]=119.541-t+.344*a+.714*r;e[i+2]=481.816-t-1.772*a}return e},_convertCmykToRgb:function(e){for(var t,a,r,i,n=0,s=0,o=e.length;s<o;s+=4){t=e[s];a=e[s+1];r=e[s+2];i=e[s+3];e[n++]=255+t*(-6747147073602441e-20*t+.0008379262121013727*a+.0002894718188643294*r+.003264231057537806*i-1.1185611867203937)+a*(26374107616089405e-21*a-8626949158638572e-20*r-.0002748769067499491*i-.02155688794978967)+r*(-3878099212869363e-20*r-.0003267808279485286*i+.0686742238595345)-i*(.0003361971776183937*i+.7430659151342254);e[n++]=255+t*(.00013596372813588848*t+.000924537132573585*a+.00010567359618683593*r+.0004791864687436512*i-.3109689587515875)+a*(-.00023545346108370344*a+.0002702845253534714*r+.0020200308977307156*i-.7488052167015494)+r*(6834815998235662e-20*r+.00015168452363460973*i-.09751927774728933)-i*(.0003189131175883281*i+.7364883807733168);e[n++]=255+t*(13598650411385307e-21*t+.00012423956175490851*a+.0004751985097583589*r-36729317476630422e-22*i-.05562186980264034)+a*(.00016141380598724676*a+.0009692239130725186*r+.0007782692450036253*i-.44015232367526463)+r*(5.068882914068769e-7*r+.0017778369011375071*i-.7591454649749609)-i*(.0003435319965105553*i+.7063770186160144)}return e.subarray(0,n)},getData({width:e,height:t,forceRGB:a=!1,isSourcePDF:r=!1}){if(this.numComponents>4)throw new n("Unsupported color mode");var i=this._getLinearizedBlockData(e,t,r);if(1===this.numComponents&&a){for(var s=i.length,o=new Uint8ClampedArray(3*s),c=0,l=0;l<s;l++){var h=i[l];o[c++]=h;o[c++]=h;o[c++]=h}return o}if(3===this.numComponents&&this._isColorConversionNeeded)return this._convertYccToRgb(i);if(4===this.numComponents){if(this._isColorConversionNeeded)return a?this._convertYcckToRgb(i):this._convertYcckToCmyk(i);if(a)return this._convertCmykToRgb(i)}return i}};return t}();t.JpegImage=c},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.JpxStream=void 0;var r=a(11),i=a(20),n=a(2);const s=function(){function e(e,t,a,i){this.stream=e;this.maybeLength=t;this.dict=a;this.params=i;r.DecodeStream.call(this,t)}e.prototype=Object.create(r.DecodeStream.prototype);Object.defineProperty(e.prototype,"bytes",{get:function(){return(0,n.shadow)(this,"bytes",this.stream.getBytes(this.maybeLength))},configurable:!0});e.prototype.ensureBuffer=function(e){};e.prototype.readBlock=function(){if(this.eof)return;const e=new i.JpxImage;e.parse(this.bytes);const t=e.width,a=e.height,r=e.componentsCount,n=e.tiles.length;if(1===n)this.buffer=e.tiles[0].items;else{const i=new Uint8ClampedArray(t*a*r);for(let a=0;a<n;a++){const n=e.tiles[a],s=n.width,o=n.height,c=n.left,l=n.top,h=n.items;let u=0,d=(t*l+c)*r;const f=t*r,g=s*r;for(let e=0;e<o;e++){const e=h.subarray(u,u+g);i.set(e,d);u+=g;d+=f}}this.buffer=i}this.bufferLength=this.buffer.length;this.eof=!0};return e}();t.JpxStream=s},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.JpxImage=void 0;var r=a(2),i=a(7),n=a(16);class s extends r.BaseException{constructor(e){super(`JPX error: ${e}`)}}var o=function(){var e={LL:0,LH:1,HL:1,HH:2};function t(){this.failOnCorruptedImage=!1}t.prototype={parse:function(e){if(65359!==(0,i.readUint16)(e,0))for(var t=0,a=e.length;t<a;){var n=8,o=(0,i.readUint32)(e,t),c=(0,i.readUint32)(e,t+4);t+=n;if(1===o){o=4294967296*(0,i.readUint32)(e,t)+(0,i.readUint32)(e,t+4);t+=8;n+=8}0===o&&(o=a-t+n);if(o<n)throw new s("Invalid box field size");var l=o-n,h=!0;switch(c){case 1785737832:h=!1;break;case 1668246642:var u=e[t];if(1===u){var d=(0,i.readUint32)(e,t+3);switch(d){case 16:case 17:case 18:break;default:(0,r.warn)("Unknown colorspace "+d)}}else 2===u&&(0,r.info)("ICC profile not supported");break;case 1785737827:this.parseCodestream(e,t,t+l);break;case 1783636e3:218793738!==(0,i.readUint32)(e,t)&&(0,r.warn)("Invalid JP2 signature");break;case 1783634458:case 1718909296:case 1920099697:case 1919251232:case 1768449138:break;default:var f=String.fromCharCode(c>>24&255,c>>16&255,c>>8&255,255&c);(0,r.warn)("Unsupported header type "+c+" ("+f+")")}h&&(t+=l)}else this.parseCodestream(e,0,e.length)},parseImageProperties:function(e){for(var t=e.getByte();t>=0;){if(65361===(t<<8|(t=e.getByte()))){e.skip(4);var a=e.getInt32()>>>0,r=e.getInt32()>>>0,i=e.getInt32()>>>0,n=e.getInt32()>>>0;e.skip(16);var o=e.getUint16();this.width=a-i;this.height=r-n;this.componentsCount=o;this.bitsPerComponent=8;return}}throw new s("No size marker found in JPX stream")},parseCodestream:function(e,t,n){var c={},l=!1;try{for(var h=t;h+1<n;){var u=(0,i.readUint16)(e,h);h+=2;var d,f,g,m,p,b,y=0;switch(u){case 65359:c.mainHeader=!0;break;case 65497:break;case 65361:y=(0,i.readUint16)(e,h);var k={};k.Xsiz=(0,i.readUint32)(e,h+4);k.Ysiz=(0,i.readUint32)(e,h+8);k.XOsiz=(0,i.readUint32)(e,h+12);k.YOsiz=(0,i.readUint32)(e,h+16);k.XTsiz=(0,i.readUint32)(e,h+20);k.YTsiz=(0,i.readUint32)(e,h+24);k.XTOsiz=(0,i.readUint32)(e,h+28);k.YTOsiz=(0,i.readUint32)(e,h+32);var x=(0,i.readUint16)(e,h+36);k.Csiz=x;var A=[];d=h+38;for(var I=0;I<x;I++){var F={precision:1+(127&e[d]),isSigned:!!(128&e[d]),XRsiz:e[d+1],YRsiz:e[d+2]};d+=3;a(F,k);A.push(F)}c.SIZ=k;c.components=A;o(c,A);c.QCC=[];c.COC=[];break;case 65372:y=(0,i.readUint16)(e,h);var T={};d=h+2;switch(31&(f=e[d++])){case 0:m=8;p=!0;break;case 1:m=16;p=!1;break;case 2:m=16;p=!0;break;default:throw new Error("Invalid SQcd value "+f)}T.noQuantization=8===m;T.scalarExpounded=p;T.guardBits=f>>5;g=[];for(;d<y+h;){var E={};if(8===m){E.epsilon=e[d++]>>3;E.mu=0}else{E.epsilon=e[d]>>3;E.mu=(7&e[d])<<8|e[d+1];d+=2}g.push(E)}T.SPqcds=g;if(c.mainHeader)c.QCD=T;else{c.currentTile.QCD=T;c.currentTile.QCC=[]}break;case 65373:y=(0,i.readUint16)(e,h);var O,P={};d=h+2;if(c.SIZ.Csiz<257)O=e[d++];else{O=(0,i.readUint16)(e,d);d+=2}switch(31&(f=e[d++])){case 0:m=8;p=!0;break;case 1:m=16;p=!1;break;case 2:m=16;p=!0;break;default:throw new Error("Invalid SQcd value "+f)}P.noQuantization=8===m;P.scalarExpounded=p;P.guardBits=f>>5;g=[];for(;d<y+h;){E={};if(8===m){E.epsilon=e[d++]>>3;E.mu=0}else{E.epsilon=e[d]>>3;E.mu=(7&e[d])<<8|e[d+1];d+=2}g.push(E)}P.SPqcds=g;c.mainHeader?c.QCC[O]=P:c.currentTile.QCC[O]=P;break;case 65362:y=(0,i.readUint16)(e,h);var B={};d=h+2;var D=e[d++];B.entropyCoderWithCustomPrecincts=!!(1&D);B.sopMarkerUsed=!!(2&D);B.ephMarkerUsed=!!(4&D);B.progressionOrder=e[d++];B.layersCount=(0,i.readUint16)(e,d);d+=2;B.multipleComponentTransform=e[d++];B.decompositionLevelsCount=e[d++];B.xcb=2+(15&e[d++]);B.ycb=2+(15&e[d++]);var N=e[d++];B.selectiveArithmeticCodingBypass=!!(1&N);B.resetContextProbabilities=!!(2&N);B.terminationOnEachCodingPass=!!(4&N);B.verticallyStripe=!!(8&N);B.predictableTermination=!!(16&N);B.segmentationSymbolUsed=!!(32&N);B.reversibleTransformation=e[d++];if(B.entropyCoderWithCustomPrecincts){for(var M=[];d<y+h;){var L=e[d++];M.push({PPx:15&L,PPy:L>>4})}B.precinctsSizes=M}var R=[];B.selectiveArithmeticCodingBypass&&R.push("selectiveArithmeticCodingBypass");B.resetContextProbabilities&&R.push("resetContextProbabilities");B.terminationOnEachCodingPass&&R.push("terminationOnEachCodingPass");B.verticallyStripe&&R.push("verticallyStripe");B.predictableTermination&&R.push("predictableTermination");if(R.length>0){l=!0;throw new Error("Unsupported COD options ("+R.join(", ")+")")}if(c.mainHeader)c.COD=B;else{c.currentTile.COD=B;c.currentTile.COC=[]}break;case 65424:y=(0,i.readUint16)(e,h);(b={}).index=(0,i.readUint16)(e,h+2);b.length=(0,i.readUint32)(e,h+4);b.dataEnd=b.length+h-2;b.partIndex=e[h+8];b.partsCount=e[h+9];c.mainHeader=!1;if(0===b.partIndex){b.COD=c.COD;b.COC=c.COC.slice(0);b.QCD=c.QCD;b.QCC=c.QCC.slice(0)}c.currentTile=b;break;case 65427:if(0===(b=c.currentTile).partIndex){C(c,b.index);v(c)}w(c,e,h,y=b.dataEnd-h);break;case 65365:case 65367:case 65368:case 65380:y=(0,i.readUint16)(e,h);break;case 65363:throw new Error("Codestream code 0xFF53 (COC) is not implemented");default:throw new Error("Unknown codestream code: "+u.toString(16))}h+=y}}catch(e){if(l||this.failOnCorruptedImage)throw new s(e.message);(0,r.warn)("JPX: Trying to recover from: "+e.message)}this.tiles=function(e){for(var t=e.SIZ,a=e.components,r=t.Csiz,i=[],n=0,s=e.tiles.length;n<s;n++){var o,c=e.tiles[n],l=[];for(o=0;o<r;o++)l[o]=S(e,c,o);var h,u,d,f,g,m,p,b=l[0],y=new Uint8ClampedArray(b.items.length*r),v={left:b.left,top:b.top,width:b.width,height:b.height,items:y},w=0;if(c.codingStyleDefaultParameters.multipleComponentTransform){var k=4===r,C=l[0].items,x=l[1].items,A=l[2].items,I=k?l[3].items:null;h=a[0].precision-8;u=.5+(128<<h);var F=c.components[0],T=r-3;f=C.length;if(F.codingStyleParameters.reversibleTransformation)for(d=0;d<f;d++,w+=T){g=C[d]+u;m=x[d];p=A[d];const e=g-(p+m>>2);y[w++]=e+p>>h;y[w++]=e>>h;y[w++]=e+m>>h}else for(d=0;d<f;d++,w+=T){g=C[d]+u;m=x[d];p=A[d];y[w++]=g+1.402*p>>h;y[w++]=g-.34413*m-.71414*p>>h;y[w++]=g+1.772*m>>h}if(k)for(d=0,w=3;d<f;d++,w+=4)y[w]=I[d]+u>>h}else for(o=0;o<r;o++){var E=l[o].items;h=a[o].precision-8;u=.5+(128<<h);for(w=o,d=0,f=E.length;d<f;d++){y[w]=E[d]+u>>h;w+=r}}i.push(v)}return i}(c);this.width=c.SIZ.Xsiz-c.SIZ.XOsiz;this.height=c.SIZ.Ysiz-c.SIZ.YOsiz;this.componentsCount=c.SIZ.Csiz}};function a(e,t){e.x0=Math.ceil(t.XOsiz/e.XRsiz);e.x1=Math.ceil(t.Xsiz/e.XRsiz);e.y0=Math.ceil(t.YOsiz/e.YRsiz);e.y1=Math.ceil(t.Ysiz/e.YRsiz);e.width=e.x1-e.x0;e.height=e.y1-e.y0}function o(e,t){for(var a,r=e.SIZ,i=[],n=Math.ceil((r.Xsiz-r.XTOsiz)/r.XTsiz),s=Math.ceil((r.Ysiz-r.YTOsiz)/r.YTsiz),o=0;o<s;o++)for(var c=0;c<n;c++){(a={}).tx0=Math.max(r.XTOsiz+c*r.XTsiz,r.XOsiz);a.ty0=Math.max(r.YTOsiz+o*r.YTsiz,r.YOsiz);a.tx1=Math.min(r.XTOsiz+(c+1)*r.XTsiz,r.Xsiz);a.ty1=Math.min(r.YTOsiz+(o+1)*r.YTsiz,r.Ysiz);a.width=a.tx1-a.tx0;a.height=a.ty1-a.ty0;a.components=[];i.push(a)}e.tiles=i;for(var l=0,h=r.Csiz;l<h;l++)for(var u=t[l],d=0,f=i.length;d<f;d++){var g={};a=i[d];g.tcx0=Math.ceil(a.tx0/u.XRsiz);g.tcy0=Math.ceil(a.ty0/u.YRsiz);g.tcx1=Math.ceil(a.tx1/u.XRsiz);g.tcy1=Math.ceil(a.ty1/u.YRsiz);g.width=g.tcx1-g.tcx0;g.height=g.tcy1-g.tcy0;a.components[l]=g}}function c(e,t,a){var r=t.codingStyleParameters,i={};if(r.entropyCoderWithCustomPrecincts){i.PPx=r.precinctsSizes[a].PPx;i.PPy=r.precinctsSizes[a].PPy}else{i.PPx=15;i.PPy=15}i.xcb_=a>0?Math.min(r.xcb,i.PPx-1):Math.min(r.xcb,i.PPx);i.ycb_=a>0?Math.min(r.ycb,i.PPy-1):Math.min(r.ycb,i.PPy);return i}function l(e,t,a){var r=1<<a.PPx,i=1<<a.PPy,n=0===t.resLevel,s=1<<a.PPx+(n?0:-1),o=1<<a.PPy+(n?0:-1),c=t.trx1>t.trx0?Math.ceil(t.trx1/r)-Math.floor(t.trx0/r):0,l=t.try1>t.try0?Math.ceil(t.try1/i)-Math.floor(t.try0/i):0,h=c*l;t.precinctParameters={precinctWidth:r,precinctHeight:i,numprecinctswide:c,numprecinctshigh:l,numprecincts:h,precinctWidthInSubband:s,precinctHeightInSubband:o}}function h(e,t,a){var r,i,n,s,o=a.xcb_,c=a.ycb_,l=1<<o,h=1<<c,u=t.tbx0>>o,d=t.tby0>>c,f=t.tbx1+l-1>>o,g=t.tby1+h-1>>c,m=t.resolution.precinctParameters,p=[],b=[];for(i=d;i<g;i++)for(r=u;r<f;r++){(n={cbx:r,cby:i,tbx0:l*r,tby0:h*i,tbx1:l*(r+1),tby1:h*(i+1)}).tbx0_=Math.max(t.tbx0,n.tbx0);n.tby0_=Math.max(t.tby0,n.tby0);n.tbx1_=Math.min(t.tbx1,n.tbx1);n.tby1_=Math.min(t.tby1,n.tby1);s=Math.floor((n.tbx0_-t.tbx0)/m.precinctWidthInSubband)+Math.floor((n.tby0_-t.tby0)/m.precinctHeightInSubband)*m.numprecinctswide;n.precinctNumber=s;n.subbandType=t.type;n.Lblock=3;if(!(n.tbx1_<=n.tbx0_||n.tby1_<=n.tby0_)){p.push(n);var y=b[s];if(void 0!==y){r<y.cbxMin?y.cbxMin=r:r>y.cbxMax&&(y.cbxMax=r);i<y.cbyMin?y.cbxMin=i:i>y.cbyMax&&(y.cbyMax=i)}else b[s]=y={cbxMin:r,cbyMin:i,cbxMax:r,cbyMax:i};n.precinct=y}}t.codeblockParameters={codeblockWidth:o,codeblockHeight:c,numcodeblockwide:f-u+1,numcodeblockhigh:g-d+1};t.codeblocks=p;t.precincts=b}function u(e,t,a){for(var r=[],i=e.subbands,n=0,s=i.length;n<s;n++)for(var o=i[n].codeblocks,c=0,l=o.length;c<l;c++){var h=o[c];h.precinctNumber===t&&r.push(h)}return{layerNumber:a,codeblocks:r}}function d(e){for(var t=e.SIZ,a=e.currentTile.index,r=e.tiles[a],i=r.codingStyleDefaultParameters.layersCount,n=t.Csiz,o=0,c=0;c<n;c++)o=Math.max(o,r.components[c].codingStyleParameters.decompositionLevelsCount);var l=0,h=0,d=0,f=0;this.nextPacket=function(){for(;l<i;l++){for(;h<=o;h++){for(;d<n;d++){var e=r.components[d];if(!(h>e.codingStyleParameters.decompositionLevelsCount)){for(var t=e.resolutions[h],a=t.precinctParameters.numprecincts;f<a;){var c=u(t,f,l);f++;return c}f=0}}d=0}h=0}throw new s("Out of packets")}}function f(e){for(var t=e.SIZ,a=e.currentTile.index,r=e.tiles[a],i=r.codingStyleDefaultParameters.layersCount,n=t.Csiz,o=0,c=0;c<n;c++)o=Math.max(o,r.components[c].codingStyleParameters.decompositionLevelsCount);var l=0,h=0,d=0,f=0;this.nextPacket=function(){for(;l<=o;l++){for(;h<i;h++){for(;d<n;d++){var e=r.components[d];if(!(l>e.codingStyleParameters.decompositionLevelsCount)){for(var t=e.resolutions[l],a=t.precinctParameters.numprecincts;f<a;){var c=u(t,f,h);f++;return c}f=0}}d=0}h=0}throw new s("Out of packets")}}function g(e){var t,a,r,i,n=e.SIZ,o=e.currentTile.index,c=e.tiles[o],l=c.codingStyleDefaultParameters.layersCount,h=n.Csiz,d=0;for(r=0;r<h;r++){var f=c.components[r];d=Math.max(d,f.codingStyleParameters.decompositionLevelsCount)}var g=new Int32Array(d+1);for(a=0;a<=d;++a){var m=0;for(r=0;r<h;++r){var p=c.components[r].resolutions;a<p.length&&(m=Math.max(m,p[a].precinctParameters.numprecincts))}g[a]=m}t=0;a=0;r=0;i=0;this.nextPacket=function(){for(;a<=d;a++){for(;i<g[a];i++){for(;r<h;r++){var e=c.components[r];if(!(a>e.codingStyleParameters.decompositionLevelsCount)){var n=e.resolutions[a],o=n.precinctParameters.numprecincts;if(!(i>=o)){for(;t<l;){var f=u(n,i,t);t++;return f}t=0}}}r=0}i=0}throw new s("Out of packets")}}function m(e){var t=e.SIZ,a=e.currentTile.index,r=e.tiles[a],i=r.codingStyleDefaultParameters.layersCount,n=t.Csiz,o=y(r),c=o,l=0,h=0,d=0,f=0,g=0;this.nextPacket=function(){for(;g<c.maxNumHigh;g++){for(;f<c.maxNumWide;f++){for(;d<n;d++){for(var e=r.components[d],t=e.codingStyleParameters.decompositionLevelsCount;h<=t;h++){var a=e.resolutions[h],m=o.components[d].resolutions[h],p=b(f,g,m,c,a);if(null!==p){for(;l<i;){var y=u(a,p,l);l++;return y}l=0}}h=0}d=0}f=0}throw new s("Out of packets")}}function p(e){var t=e.SIZ,a=e.currentTile.index,r=e.tiles[a],i=r.codingStyleDefaultParameters.layersCount,n=t.Csiz,o=y(r),c=0,l=0,h=0,d=0,f=0;this.nextPacket=function(){for(;h<n;++h){for(var e=r.components[h],t=o.components[h],a=e.codingStyleParameters.decompositionLevelsCount;f<t.maxNumHigh;f++){for(;d<t.maxNumWide;d++){for(;l<=a;l++){var g=e.resolutions[l],m=t.resolutions[l],p=b(d,f,m,t,g);if(null!==p){for(;c<i;){var y=u(g,p,c);c++;return y}c=0}}l=0}d=0}f=0}throw new s("Out of packets")}}function b(e,t,a,r,i){var n=e*r.minWidth,s=t*r.minHeight;if(n%a.width!=0||s%a.height!=0)return null;var o=s/a.width*i.precinctParameters.numprecinctswide;return n/a.height+o}function y(e){for(var t=e.components.length,a=Number.MAX_VALUE,r=Number.MAX_VALUE,i=0,n=0,s=new Array(t),o=0;o<t;o++){for(var c=e.components[o],l=c.codingStyleParameters.decompositionLevelsCount,h=new Array(l+1),u=Number.MAX_VALUE,d=Number.MAX_VALUE,f=0,g=0,m=1,p=l;p>=0;--p){var b=c.resolutions[p],y=m*b.precinctParameters.precinctWidth,v=m*b.precinctParameters.precinctHeight;u=Math.min(u,y);d=Math.min(d,v);f=Math.max(f,b.precinctParameters.numprecinctswide);g=Math.max(g,b.precinctParameters.numprecinctshigh);h[p]={width:y,height:v};m<<=1}a=Math.min(a,u);r=Math.min(r,d);i=Math.max(i,f);n=Math.max(n,g);s[o]={resolutions:h,minWidth:u,minHeight:d,maxNumWide:f,maxNumHigh:g}}return{components:s,minWidth:a,minHeight:r,maxNumWide:i,maxNumHigh:n}}function v(e){for(var t=e.SIZ,a=e.currentTile.index,r=e.tiles[a],i=t.Csiz,n=0;n<i;n++){for(var o=r.components[n],u=o.codingStyleParameters.decompositionLevelsCount,b=[],y=[],v=0;v<=u;v++){var w,k=c(0,o,v),S={},C=1<<u-v;S.trx0=Math.ceil(o.tcx0/C);S.try0=Math.ceil(o.tcy0/C);S.trx1=Math.ceil(o.tcx1/C);S.try1=Math.ceil(o.tcy1/C);S.resLevel=v;l(0,S,k);b.push(S);if(0===v){(w={}).type="LL";w.tbx0=Math.ceil(o.tcx0/C);w.tby0=Math.ceil(o.tcy0/C);w.tbx1=Math.ceil(o.tcx1/C);w.tby1=Math.ceil(o.tcy1/C);w.resolution=S;h(0,w,k);y.push(w);S.subbands=[w]}else{var x=1<<u-v+1,A=[];(w={}).type="HL";w.tbx0=Math.ceil(o.tcx0/x-.5);w.tby0=Math.ceil(o.tcy0/x);w.tbx1=Math.ceil(o.tcx1/x-.5);w.tby1=Math.ceil(o.tcy1/x);w.resolution=S;h(0,w,k);y.push(w);A.push(w);(w={}).type="LH";w.tbx0=Math.ceil(o.tcx0/x);w.tby0=Math.ceil(o.tcy0/x-.5);w.tbx1=Math.ceil(o.tcx1/x);w.tby1=Math.ceil(o.tcy1/x-.5);w.resolution=S;h(0,w,k);y.push(w);A.push(w);(w={}).type="HH";w.tbx0=Math.ceil(o.tcx0/x-.5);w.tby0=Math.ceil(o.tcy0/x-.5);w.tbx1=Math.ceil(o.tcx1/x-.5);w.tby1=Math.ceil(o.tcy1/x-.5);w.resolution=S;h(0,w,k);y.push(w);A.push(w);S.subbands=A}}o.resolutions=b;o.subbands=y}var I=r.codingStyleDefaultParameters.progressionOrder;switch(I){case 0:r.packetsIterator=new d(e);break;case 1:r.packetsIterator=new f(e);break;case 2:r.packetsIterator=new g(e);break;case 3:r.packetsIterator=new m(e);break;case 4:r.packetsIterator=new p(e);break;default:throw new s(`Unsupported progression order ${I}`)}}function w(e,t,a,r){var n,s=0,o=0,c=!1;function l(e){for(;o<e;){var r=t[a+s];s++;if(c){n=n<<7|r;o+=7;c=!1}else{n=n<<8|r;o+=8}255===r&&(c=!0)}return n>>>(o-=e)&(1<<e)-1}function h(e){if(255===t[a+s-1]&&t[a+s]===e){u(1);return!0}if(255===t[a+s]&&t[a+s+1]===e){u(2);return!0}return!1}function u(e){s+=e}function d(){o=0;if(c){s++;c=!1}}function f(){if(0===l(1))return 1;if(0===l(1))return 2;var e=l(2);return e<3?e+3:(e=l(5))<31?e+6:(e=l(7))+37}for(var g=e.currentTile.index,m=e.tiles[g],p=e.COD.sopMarkerUsed,b=e.COD.ephMarkerUsed,y=m.packetsIterator;s<r;){d();p&&h(145)&&u(4);var v=y.nextPacket();if(l(1)){for(var w,k=v.layerNumber,S=[],C=0,I=v.codeblocks.length;C<I;C++){var F=(w=v.codeblocks[C]).precinct,T=w.cbx-F.cbxMin,E=w.cby-F.cbyMin,O=!1,P=!1;if(void 0!==w.included)O=!!l(1);else{var B,D;if(void 0!==(F=w.precinct).inclusionTree)B=F.inclusionTree;else{var N=F.cbxMax-F.cbxMin+1,M=F.cbyMax-F.cbyMin+1;B=new A(N,M,k);D=new x(N,M);F.inclusionTree=B;F.zeroBitPlanesTree=D}if(B.reset(T,E,k))for(;;){if(!l(1)){B.incrementValue(k);break}if(!B.nextLevel()){w.included=!0;O=P=!0;break}}}if(O){if(P){(D=F.zeroBitPlanesTree).reset(T,E);for(;;)if(l(1)){if(!D.nextLevel())break}else D.incrementValue();w.zeroBitPlanes=D.value}for(var L=f();l(1);)w.Lblock++;var R=(0,i.log2)(L),U=l((L<1<<R?R-1:R)+w.Lblock);S.push({codeblock:w,codingpasses:L,dataLength:U})}}d();b&&h(146);for(;S.length>0;){var q=S.shift();void 0===(w=q.codeblock).data&&(w.data=[]);w.data.push({data:t,start:a+s,end:a+s+q.dataLength,codingpasses:q.codingpasses});s+=q.dataLength}}}return s}function k(e,t,a,r,i,s,o,c){for(var l=r.tbx0,h=r.tby0,u=r.tbx1-r.tbx0,d=r.codeblocks,f="H"===r.type.charAt(0)?1:0,g="H"===r.type.charAt(1)?t:0,m=0,p=d.length;m<p;++m){var b=d[m],y=b.tbx1_-b.tbx0_,v=b.tby1_-b.tby0_;if(0!==y&&0!==v&&void 0!==b.data){var w,k;w=new I(y,v,b.subbandType,b.zeroBitPlanes,s);k=2;var S,C,x,A=b.data,F=0,T=0;for(S=0,C=A.length;S<C;S++){F+=(x=A[S]).end-x.start;T+=x.codingpasses}var E=new Uint8Array(F),O=0;for(S=0,C=A.length;S<C;S++){var P=(x=A[S]).data.subarray(x.start,x.end);E.set(P,O);O+=P.length}var B=new n.ArithmeticDecoder(E,0,F);w.setDecoder(B);for(S=0;S<T;S++){switch(k){case 0:w.runSignificancePropagationPass();break;case 1:w.runMagnitudeRefinementPass();break;case 2:w.runCleanupPass();c&&w.checkSegmentationSymbol()}k=(k+1)%3}var D,N,M,L=b.tbx0_-l+(b.tby0_-h)*u,R=w.coefficentsSign,U=w.coefficentsMagnitude,q=w.bitsDecoded,j=o?0:.5;O=0;var _="LL"!==r.type;for(S=0;S<v;S++){var z=2*(L/u|0)*(t-u)+f+g;for(D=0;D<y;D++){if(0!==(N=U[O])){N=(N+j)*i;0!==R[O]&&(N=-N);M=q[O];var H=_?z+(L<<1):L;e[H]=o&&M>=s?N:N*(1<<s-M)}L++;O++}L+=u-y}}}}function S(t,a,r){for(var i=a.components[r],n=i.codingStyleParameters,s=i.quantizationParameters,o=n.decompositionLevelsCount,c=s.SPqcds,l=s.scalarExpounded,h=s.guardBits,u=n.segmentationSymbolUsed,d=t.components[r].precision,f=n.reversibleTransformation,g=f?new E:new T,m=[],p=0,b=0;b<=o;b++){for(var y=i.resolutions[b],v=y.trx1-y.trx0,w=y.try1-y.try0,S=new Float32Array(v*w),C=0,x=y.subbands.length;C<x;C++){var A,I;if(l){A=c[p].mu;I=c[p].epsilon;p++}else{A=c[0].mu;I=c[0].epsilon+(b>0?1-b:0)}var F=y.subbands[C],O=e[F.type];k(S,v,0,F,f?1:2**(d+O-I)*(1+A/2048),h+I-1,f,u)}m.push({width:v,height:w,items:S})}var P=g.calculate(m,i.tcx0,i.tcy0);return{left:i.tcx0,top:i.tcy0,width:P.width,height:P.height,items:P.items}}function C(e,t){for(var a=e.SIZ.Csiz,r=e.tiles[t],i=0;i<a;i++){var n=r.components[i],s=void 0!==e.currentTile.QCC[i]?e.currentTile.QCC[i]:e.currentTile.QCD;n.quantizationParameters=s;var o=void 0!==e.currentTile.COC[i]?e.currentTile.COC[i]:e.currentTile.COD;n.codingStyleParameters=o}r.codingStyleDefaultParameters=e.currentTile.COD}var x=function(){function e(e,t){var a=(0,i.log2)(Math.max(e,t))+1;this.levels=[];for(var r=0;r<a;r++){var n={width:e,height:t,items:[]};this.levels.push(n);e=Math.ceil(e/2);t=Math.ceil(t/2)}}e.prototype={reset:function(e,t){for(var a,r=0,i=0;r<this.levels.length;){var n=e+t*(a=this.levels[r]).width;if(void 0!==a.items[n]){i=a.items[n];break}a.index=n;e>>=1;t>>=1;r++}r--;(a=this.levels[r]).items[a.index]=i;this.currentLevel=r;delete this.value},incrementValue:function(){var e=this.levels[this.currentLevel];e.items[e.index]++},nextLevel:function(){var e=this.currentLevel,t=this.levels[e],a=t.items[t.index];if(--e<0){this.value=a;return!1}this.currentLevel=e;(t=this.levels[e]).items[t.index]=a;return!0}};return e}(),A=function(){function e(e,t,a){var r=(0,i.log2)(Math.max(e,t))+1;this.levels=[];for(var n=0;n<r;n++){for(var s=new Uint8Array(e*t),o=0,c=s.length;o<c;o++)s[o]=a;var l={width:e,height:t,items:s};this.levels.push(l);e=Math.ceil(e/2);t=Math.ceil(t/2)}}e.prototype={reset:function(e,t,a){for(var r=0;r<this.levels.length;){var i=this.levels[r],n=e+t*i.width;i.index=n;var s=i.items[n];if(255===s)break;if(s>a){this.currentLevel=r;this.propagateValues();return!1}e>>=1;t>>=1;r++}this.currentLevel=r-1;return!0},incrementValue:function(e){var t=this.levels[this.currentLevel];t.items[t.index]=e+1;this.propagateValues()},propagateValues:function(){for(var e=this.currentLevel,t=this.levels[e],a=t.items[t.index];--e>=0;)(t=this.levels[e]).items[t.index]=a},nextLevel:function(){var e=this.currentLevel,t=this.levels[e],a=t.items[t.index];t.items[t.index]=255;if(--e<0)return!1;this.currentLevel=e;(t=this.levels[e]).items[t.index]=a;return!0}};return e}(),I=function(){var e=new Uint8Array([0,5,8,0,3,7,8,0,4,7,8,0,0,0,0,0,1,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8]),t=new Uint8Array([0,3,4,0,5,7,7,0,8,8,8,0,0,0,0,0,1,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8]),a=new Uint8Array([0,1,2,0,1,2,2,0,2,2,2,0,0,0,0,0,3,4,5,0,4,5,5,0,5,5,5,0,0,0,0,0,6,7,7,0,7,7,7,0,7,7,7,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8]);function r(r,i,n,s,o){this.width=r;this.height=i;let c;c="HH"===n?a:"HL"===n?t:e;this.contextLabelTable=c;var l=r*i;this.neighborsSignificance=new Uint8Array(l);this.coefficentsSign=new Uint8Array(l);let h;h=o>14?new Uint32Array(l):o>6?new Uint16Array(l):new Uint8Array(l);this.coefficentsMagnitude=h;this.processingFlags=new Uint8Array(l);var u=new Uint8Array(l);if(0!==s)for(var d=0;d<l;d++)u[d]=s;this.bitsDecoded=u;this.reset()}r.prototype={setDecoder:function(e){this.decoder=e},reset:function(){this.contexts=new Int8Array(19);this.contexts[0]=8;this.contexts[17]=92;this.contexts[18]=6},setNeighborsSignificance:function(e,t,a){var r,i=this.neighborsSignificance,n=this.width,s=this.height,o=t>0,c=t+1<n;if(e>0){r=a-n;o&&(i[r-1]+=16);c&&(i[r+1]+=16);i[r]+=4}if(e+1<s){r=a+n;o&&(i[r-1]+=16);c&&(i[r+1]+=16);i[r]+=4}o&&(i[a-1]+=1);c&&(i[a+1]+=1);i[a]|=128},runSignificancePropagationPass:function(){for(var e=this.decoder,t=this.width,a=this.height,r=this.coefficentsMagnitude,i=this.coefficentsSign,n=this.neighborsSignificance,s=this.processingFlags,o=this.contexts,c=this.contextLabelTable,l=this.bitsDecoded,h=0;h<a;h+=4)for(var u=0;u<t;u++)for(var d=h*t+u,f=0;f<4;f++,d+=t){var g=h+f;if(g>=a)break;s[d]&=-2;if(!r[d]&&n[d]){var m=c[n[d]];if(e.readBit(o,m)){var p=this.decodeSignBit(g,u,d);i[d]=p;r[d]=1;this.setNeighborsSignificance(g,u,d);s[d]|=2}l[d]++;s[d]|=1}}},decodeSignBit:function(e,t,a){var r,i,n,s,o,c,l=this.width,h=this.height,u=this.coefficentsMagnitude,d=this.coefficentsSign;s=t>0&&0!==u[a-1];if(t+1<l&&0!==u[a+1]){n=d[a+1];r=s?1-n-(i=d[a-1]):1-n-n}else r=s?1-(i=d[a-1])-i:0;var f=3*r;s=e>0&&0!==u[a-l];if(e+1<h&&0!==u[a+l]){n=d[a+l];r=s?1-n-(i=d[a-l])+f:1-n-n+f}else r=s?1-(i=d[a-l])-i+f:f;if(r>=0){o=9+r;c=this.decoder.readBit(this.contexts,o)}else{o=9-r;c=1^this.decoder.readBit(this.contexts,o)}return c},runMagnitudeRefinementPass:function(){for(var e,t=this.decoder,a=this.width,r=this.height,i=this.coefficentsMagnitude,n=this.neighborsSignificance,s=this.contexts,o=this.bitsDecoded,c=this.processingFlags,l=a*r,h=4*a,u=0;u<l;u=e){e=Math.min(l,u+h);for(var d=0;d<a;d++)for(var f=u+d;f<e;f+=a)if(i[f]&&0==(1&c[f])){var g=16;if(0!=(2&c[f])){c[f]^=2;g=0===(127&n[f])?15:14}var m=t.readBit(s,g);i[f]=i[f]<<1|m;o[f]++;c[f]|=1}}},runCleanupPass:function(){for(var e,t=this.decoder,a=this.width,r=this.height,i=this.neighborsSignificance,n=this.coefficentsMagnitude,s=this.coefficentsSign,o=this.contexts,c=this.contextLabelTable,l=this.bitsDecoded,h=this.processingFlags,u=a,d=2*a,f=3*a,g=0;g<r;g=e){e=Math.min(g+4,r);for(var m=g*a,p=g+3<r,b=0;b<a;b++){var y,v=m+b,w=0,k=v,S=g;if(p&&0===h[v]&&0===h[v+u]&&0===h[v+d]&&0===h[v+f]&&0===i[v]&&0===i[v+u]&&0===i[v+d]&&0===i[v+f]){if(!t.readBit(o,18)){l[v]++;l[v+u]++;l[v+d]++;l[v+f]++;continue}if(0!==(w=t.readBit(o,17)<<1|t.readBit(o,17))){S=g+w;k+=w*a}y=this.decodeSignBit(S,b,k);s[k]=y;n[k]=1;this.setNeighborsSignificance(S,b,k);h[k]|=2;k=v;for(var C=g;C<=S;C++,k+=a)l[k]++;w++}for(S=g+w;S<e;S++,k+=a)if(!n[k]&&0==(1&h[k])){var x=c[i[k]];if(1===t.readBit(o,x)){y=this.decodeSignBit(S,b,k);s[k]=y;n[k]=1;this.setNeighborsSignificance(S,b,k);h[k]|=2}l[k]++}}}},checkSegmentationSymbol:function(){var e=this.decoder,t=this.contexts;if(10!==(e.readBit(t,17)<<3|e.readBit(t,17)<<2|e.readBit(t,17)<<1|e.readBit(t,17)))throw new s("Invalid segmentation symbol")}};return r}(),F=function(){function e(){}e.prototype.calculate=function(e,t,a){for(var r=e[0],i=1,n=e.length;i<n;i++)r=this.iterate(r,e[i],t,a);return r};e.prototype.extend=function(e,t,a){var r=t-1,i=t+1,n=t+a-2,s=t+a;e[r--]=e[i++];e[s++]=e[n--];e[r--]=e[i++];e[s++]=e[n--];e[r--]=e[i++];e[s++]=e[n--];e[r]=e[i];e[s]=e[n]};e.prototype.iterate=function(e,t,a,r){var i,n,s,o,c,l,h=e.width,u=e.height,d=e.items,f=t.width,g=t.height,m=t.items;for(s=0,i=0;i<u;i++){o=2*i*f;for(n=0;n<h;n++,s++,o+=2)m[o]=d[s]}d=e.items=null;var p=new Float32Array(f+8);if(1===f){if(0!=(1&a))for(l=0,s=0;l<g;l++,s+=f)m[s]*=.5}else for(l=0,s=0;l<g;l++,s+=f){p.set(m.subarray(s,s+f),4);this.extend(p,4,f);this.filter(p,4,f);m.set(p.subarray(4,4+f),s)}var b=16,y=[];for(i=0;i<b;i++)y.push(new Float32Array(g+8));var v,w=0;e=4+g;if(1===g){if(0!=(1&r))for(c=0;c<f;c++)m[c]*=.5}else for(c=0;c<f;c++){if(0===w){b=Math.min(f-c,b);for(s=c,o=4;o<e;s+=f,o++)for(v=0;v<b;v++)y[v][o]=m[s+v];w=b}var k=y[--w];this.extend(k,4,g);this.filter(k,4,g);if(0===w){s=c-b+1;for(o=4;o<e;s+=f,o++)for(v=0;v<b;v++)m[s+v]=y[v][o]}}return{width:f,height:g,items:m}};return e}(),T=function(){function e(){F.call(this)}e.prototype=Object.create(F.prototype);e.prototype.filter=function(e,t,a){var r,i,n,s,o=a>>1,c=-1.586134342059924,l=-.052980118572961,h=.882911075530934,u=.443506852043971,d=1.230174104914001;r=(t|=0)-3;for(i=o+4;i--;r+=2)e[r]*=.8128930661159609;n=u*e[(r=t-2)-1];for(i=o+3;i--;r+=2){s=u*e[r+1];e[r]=d*e[r]-n-s;if(!i--)break;n=u*e[(r+=2)+1];e[r]=d*e[r]-n-s}n=h*e[(r=t-1)-1];for(i=o+2;i--;r+=2){s=h*e[r+1];e[r]-=n+s;if(!i--)break;n=h*e[(r+=2)+1];e[r]-=n+s}n=l*e[(r=t)-1];for(i=o+1;i--;r+=2){s=l*e[r+1];e[r]-=n+s;if(!i--)break;n=l*e[(r+=2)+1];e[r]-=n+s}if(0!==o){n=c*e[(r=t+1)-1];for(i=o;i--;r+=2){s=c*e[r+1];e[r]-=n+s;if(!i--)break;n=c*e[(r+=2)+1];e[r]-=n+s}}};return e}(),E=function(){function e(){F.call(this)}e.prototype=Object.create(F.prototype);e.prototype.filter=function(e,t,a){var r,i,n=a>>1;for(r=t|=0,i=n+1;i--;r+=2)e[r]-=e[r-1]+e[r+1]+2>>2;for(r=t+1,i=n;i--;r+=2)e[r]+=e[r-1]+e[r+1]>>1};return e}();return t}();t.JpxImage=o},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.calculateSHA512=t.calculateSHA384=t.calculateSHA256=t.calculateMD5=t.PDF20=t.PDF17=t.CipherTransformFactory=t.ARCFourCipher=t.AES256Cipher=t.AES128Cipher=void 0;var r=a(2),i=a(4),n=a(11),s=function(){function e(e){this.a=0;this.b=0;var t,a,r=new Uint8Array(256),i=0,n=e.length;for(t=0;t<256;++t)r[t]=t;for(t=0;t<256;++t){i=i+(a=r[t])+e[t%n]&255;r[t]=r[i];r[i]=a}this.s=r}e.prototype={encryptBlock:function(e){var t,a,r,i=e.length,n=this.a,s=this.b,o=this.s,c=new Uint8Array(i);for(t=0;t<i;++t){r=o[s=s+(a=o[n=n+1&255])&255];o[n]=r;o[s]=a;c[t]=e[t]^o[a+r&255]}this.a=n;this.b=s;return c}};e.prototype.decryptBlock=e.prototype.encryptBlock;return e}();t.ARCFourCipher=s;var o,c,l=(o=new Uint8Array([7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21]),c=new Int32Array([-680876936,-389564586,606105819,-1044525330,-176418897,1200080426,-1473231341,-45705983,1770035416,-1958414417,-42063,-1990404162,1804603682,-40341101,-1502002290,1236535329,-165796510,-1069501632,643717713,-373897302,-701558691,38016083,-660478335,-405537848,568446438,-1019803690,-187363961,1163531501,-1444681467,-51403784,1735328473,-1926607734,-378558,-2022574463,1839030562,-35309556,-1530992060,1272893353,-155497632,-1094730640,681279174,-358537222,-722521979,76029189,-640364487,-421815835,530742520,-995338651,-198630844,1126891415,-1416354905,-57434055,1700485571,-1894986606,-1051523,-2054922799,1873313359,-30611744,-1560198380,1309151649,-145523070,-1120210379,718787259,-343485551]),function(e,t,a){var r,i,n,s=1732584193,l=-271733879,h=-1732584194,u=271733878,d=a+72&-64,f=new Uint8Array(d);for(r=0;r<a;++r)f[r]=e[t++];f[r++]=128;n=d-8;for(;r<n;)f[r++]=0;f[r++]=a<<3&255;f[r++]=a>>5&255;f[r++]=a>>13&255;f[r++]=a>>21&255;f[r++]=a>>>29&255;f[r++]=0;f[r++]=0;f[r++]=0;var g=new Int32Array(16);for(r=0;r<d;){for(i=0;i<16;++i,r+=4)g[i]=f[r]|f[r+1]<<8|f[r+2]<<16|f[r+3]<<24;var m,p,b=s,y=l,v=h,w=u;for(i=0;i<64;++i){if(i<16){m=y&v|~y&w;p=i}else if(i<32){m=w&y|~w&v;p=5*i+1&15}else if(i<48){m=y^v^w;p=3*i+5&15}else{m=v^(y|~w);p=7*i&15}var k=w,S=b+m+c[i]+g[p]|0,C=o[i];w=v;v=y;y=y+(S<<C|S>>>32-C)|0;b=k}s=s+b|0;l=l+y|0;h=h+v|0;u=u+w|0}return new Uint8Array([255&s,s>>8&255,s>>16&255,s>>>24&255,255&l,l>>8&255,l>>16&255,l>>>24&255,255&h,h>>8&255,h>>16&255,h>>>24&255,255&u,u>>8&255,u>>16&255,u>>>24&255])});t.calculateMD5=l;var h=function(){function e(e,t){this.high=0|e;this.low=0|t}e.prototype={and:function(e){this.high&=e.high;this.low&=e.low},xor:function(e){this.high^=e.high;this.low^=e.low},or:function(e){this.high|=e.high;this.low|=e.low},shiftRight:function(e){if(e>=32){this.low=this.high>>>e-32|0;this.high=0}else{this.low=this.low>>>e|this.high<<32-e;this.high=this.high>>>e|0}},shiftLeft:function(e){if(e>=32){this.high=this.low<<e-32;this.low=0}else{this.high=this.high<<e|this.low>>>32-e;this.low=this.low<<e}},rotateRight:function(e){var t,a;if(32&e){a=this.low;t=this.high}else{t=this.low;a=this.high}e&=31;this.low=t>>>e|a<<32-e;this.high=a>>>e|t<<32-e},not:function(){this.high=~this.high;this.low=~this.low},add:function(e){var t=(this.low>>>0)+(e.low>>>0),a=(this.high>>>0)+(e.high>>>0);t>4294967295&&(a+=1);this.low=0|t;this.high=0|a},copyTo:function(e,t){e[t]=this.high>>>24&255;e[t+1]=this.high>>16&255;e[t+2]=this.high>>8&255;e[t+3]=255&this.high;e[t+4]=this.low>>>24&255;e[t+5]=this.low>>16&255;e[t+6]=this.low>>8&255;e[t+7]=255&this.low},assign:function(e){this.high=e.high;this.low=e.low}};return e}(),u=function(){function e(e,t){return e>>>t|e<<32-t}function t(e,t,a){return e&t^~e&a}function a(e,t,a){return e&t^e&a^t&a}function r(t){return e(t,2)^e(t,13)^e(t,22)}function i(t){return e(t,6)^e(t,11)^e(t,25)}function n(t){return e(t,7)^e(t,18)^t>>>3}var s=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];return function(o,c,l){var h,u,d,f=1779033703,g=3144134277,m=1013904242,p=2773480762,b=1359893119,y=2600822924,v=528734635,w=1541459225,k=64*Math.ceil((l+9)/64),S=new Uint8Array(k);for(h=0;h<l;++h)S[h]=o[c++];S[h++]=128;d=k-8;for(;h<d;)S[h++]=0;S[h++]=0;S[h++]=0;S[h++]=0;S[h++]=l>>>29&255;S[h++]=l>>21&255;S[h++]=l>>13&255;S[h++]=l>>5&255;S[h++]=l<<3&255;var C,x=new Uint32Array(64);for(h=0;h<k;){for(u=0;u<16;++u){x[u]=S[h]<<24|S[h+1]<<16|S[h+2]<<8|S[h+3];h+=4}for(u=16;u<64;++u)x[u]=(e(C=x[u-2],17)^e(C,19)^C>>>10)+x[u-7]+n(x[u-15])+x[u-16]|0;var A,I,F=f,T=g,E=m,O=p,P=b,B=y,D=v,N=w;for(u=0;u<64;++u){A=N+i(P)+t(P,B,D)+s[u]+x[u];I=r(F)+a(F,T,E);N=D;D=B;B=P;P=O+A|0;O=E;E=T;T=F;F=A+I|0}f=f+F|0;g=g+T|0;m=m+E|0;p=p+O|0;b=b+P|0;y=y+B|0;v=v+D|0;w=w+N|0}return new Uint8Array([f>>24&255,f>>16&255,f>>8&255,255&f,g>>24&255,g>>16&255,g>>8&255,255&g,m>>24&255,m>>16&255,m>>8&255,255&m,p>>24&255,p>>16&255,p>>8&255,255&p,b>>24&255,b>>16&255,b>>8&255,255&b,y>>24&255,y>>16&255,y>>8&255,255&y,v>>24&255,v>>16&255,v>>8&255,255&v,w>>24&255,w>>16&255,w>>8&255,255&w])}}();t.calculateSHA256=u;var d=function(){function e(e,t,a,r,i){e.assign(t);e.and(a);i.assign(t);i.not();i.and(r);e.xor(i)}function t(e,t,a,r,i){e.assign(t);e.and(a);i.assign(t);i.and(r);e.xor(i);i.assign(a);i.and(r);e.xor(i)}function a(e,t,a){e.assign(t);e.rotateRight(28);a.assign(t);a.rotateRight(34);e.xor(a);a.assign(t);a.rotateRight(39);e.xor(a)}function r(e,t,a){e.assign(t);e.rotateRight(14);a.assign(t);a.rotateRight(18);e.xor(a);a.assign(t);a.rotateRight(41);e.xor(a)}function i(e,t,a){e.assign(t);e.rotateRight(1);a.assign(t);a.rotateRight(8);e.xor(a);a.assign(t);a.shiftRight(7);e.xor(a)}function n(e,t,a){e.assign(t);e.rotateRight(19);a.assign(t);a.rotateRight(61);e.xor(a);a.assign(t);a.shiftRight(6);e.xor(a)}var s=[new h(1116352408,3609767458),new h(1899447441,602891725),new h(3049323471,3964484399),new h(3921009573,2173295548),new h(961987163,4081628472),new h(1508970993,3053834265),new h(2453635748,2937671579),new h(2870763221,3664609560),new h(3624381080,2734883394),new h(310598401,1164996542),new h(607225278,1323610764),new h(1426881987,3590304994),new h(1925078388,4068182383),new h(2162078206,991336113),new h(2614888103,633803317),new h(3248222580,3479774868),new h(3835390401,2666613458),new h(4022224774,944711139),new h(264347078,2341262773),new h(604807628,2007800933),new h(770255983,1495990901),new h(1249150122,1856431235),new h(1555081692,3175218132),new h(1996064986,2198950837),new h(2554220882,3999719339),new h(2821834349,766784016),new h(2952996808,2566594879),new h(3210313671,3203337956),new h(3336571891,1034457026),new h(3584528711,2466948901),new h(113926993,3758326383),new h(338241895,168717936),new h(666307205,1188179964),new h(773529912,1546045734),new h(1294757372,1522805485),new h(1396182291,2643833823),new h(1695183700,2343527390),new h(1986661051,1014477480),new h(2177026350,1206759142),new h(2456956037,344077627),new h(2730485921,1290863460),new h(2820302411,3158454273),new h(3259730800,3505952657),new h(3345764771,106217008),new h(3516065817,3606008344),new h(3600352804,1432725776),new h(4094571909,1467031594),new h(275423344,851169720),new h(430227734,3100823752),new h(506948616,1363258195),new h(659060556,3750685593),new h(883997877,3785050280),new h(958139571,3318307427),new h(1322822218,3812723403),new h(1537002063,2003034995),new h(1747873779,3602036899),new h(1955562222,1575990012),new h(2024104815,1125592928),new h(2227730452,2716904306),new h(2361852424,442776044),new h(2428436474,593698344),new h(2756734187,3733110249),new h(3204031479,2999351573),new h(3329325298,3815920427),new h(3391569614,3928383900),new h(3515267271,566280711),new h(3940187606,3454069534),new h(4118630271,4000239992),new h(116418474,1914138554),new h(174292421,2731055270),new h(289380356,3203993006),new h(460393269,320620315),new h(685471733,587496836),new h(852142971,1086792851),new h(1017036298,365543100),new h(1126000580,2618297676),new h(1288033470,3409855158),new h(1501505948,4234509866),new h(1607167915,987167468),new h(1816402316,1246189591)];return function(o,c,l,u){var d,f,g,m,p,b,y,v;if(u=!!u){d=new h(3418070365,3238371032);f=new h(1654270250,914150663);g=new h(2438529370,812702999);m=new h(355462360,4144912697);p=new h(1731405415,4290775857);b=new h(2394180231,1750603025);y=new h(3675008525,1694076839);v=new h(1203062813,3204075428)}else{d=new h(1779033703,4089235720);f=new h(3144134277,2227873595);g=new h(1013904242,4271175723);m=new h(2773480762,1595750129);p=new h(1359893119,2917565137);b=new h(2600822924,725511199);y=new h(528734635,4215389547);v=new h(1541459225,327033209)}var w,k,S,C=128*Math.ceil((l+17)/128),x=new Uint8Array(C);for(w=0;w<l;++w)x[w]=o[c++];x[w++]=128;S=C-16;for(;w<S;)x[w++]=0;x[w++]=0;x[w++]=0;x[w++]=0;x[w++]=0;x[w++]=0;x[w++]=0;x[w++]=0;x[w++]=0;x[w++]=0;x[w++]=0;x[w++]=0;x[w++]=l>>>29&255;x[w++]=l>>21&255;x[w++]=l>>13&255;x[w++]=l>>5&255;x[w++]=l<<3&255;var A=new Array(80);for(w=0;w<80;w++)A[w]=new h(0,0);var I,F,T=new h(0,0),E=new h(0,0),O=new h(0,0),P=new h(0,0),B=new h(0,0),D=new h(0,0),N=new h(0,0),M=new h(0,0),L=new h(0,0),R=new h(0,0),U=new h(0,0),q=new h(0,0);for(w=0;w<C;){for(k=0;k<16;++k){A[k].high=x[w]<<24|x[w+1]<<16|x[w+2]<<8|x[w+3];A[k].low=x[w+4]<<24|x[w+5]<<16|x[w+6]<<8|x[w+7];w+=8}for(k=16;k<80;++k){n(I=A[k],A[k-2],q);I.add(A[k-7]);i(U,A[k-15],q);I.add(U);I.add(A[k-16])}T.assign(d);E.assign(f);O.assign(g);P.assign(m);B.assign(p);D.assign(b);N.assign(y);M.assign(v);for(k=0;k<80;++k){L.assign(M);r(U,B,q);L.add(U);e(U,B,D,N,q);L.add(U);L.add(s[k]);L.add(A[k]);a(R,T,q);t(U,T,E,O,q);R.add(U);I=M;M=N;N=D;D=B;P.add(L);B=P;P=O;O=E;E=T;I.assign(L);I.add(R);T=I}d.add(T);f.add(E);g.add(O);m.add(P);p.add(B);b.add(D);y.add(N);v.add(M)}if(u){F=new Uint8Array(48);d.copyTo(F,0);f.copyTo(F,8);g.copyTo(F,16);m.copyTo(F,24);p.copyTo(F,32);b.copyTo(F,40)}else{F=new Uint8Array(64);d.copyTo(F,0);f.copyTo(F,8);g.copyTo(F,16);m.copyTo(F,24);p.copyTo(F,32);b.copyTo(F,40);y.copyTo(F,48);v.copyTo(F,56)}return F}}();t.calculateSHA512=d;var f=function(e,t,a){return d(e,t,a,!0)};t.calculateSHA384=f;var g=function(){function e(){}e.prototype={decryptBlock:function(e){return e}};return e}();class m{constructor(){this.constructor===m&&(0,r.unreachable)("Cannot initialize AESBaseCipher.");this._s=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]);this._inv_s=new Uint8Array([82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125]);this._mix=new Uint32Array([0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795]);this._mixCol=new Uint8Array(256);for(let e=0;e<256;e++)this._mixCol[e]=e<128?e<<1:e<<1^27;this.buffer=new Uint8Array(16);this.bufferPosition=0}_expandKey(e){(0,r.unreachable)("Cannot call `_expandKey` on the base class")}_decrypt(e,t){let a,r,i;const n=new Uint8Array(16);n.set(e);for(let e=0,a=this._keySize;e<16;++e,++a)n[e]^=t[a];for(let e=this._cyclesOfRepetition-1;e>=1;--e){a=n[13];n[13]=n[9];n[9]=n[5];n[5]=n[1];n[1]=a;a=n[14];r=n[10];n[14]=n[6];n[10]=n[2];n[6]=a;n[2]=r;a=n[15];r=n[11];i=n[7];n[15]=n[3];n[11]=a;n[7]=r;n[3]=i;for(let e=0;e<16;++e)n[e]=this._inv_s[n[e]];for(let a=0,r=16*e;a<16;++a,++r)n[a]^=t[r];for(let e=0;e<16;e+=4){const t=this._mix[n[e]],r=this._mix[n[e+1]],i=this._mix[n[e+2]],s=this._mix[n[e+3]];a=t^r>>>8^r<<24^i>>>16^i<<16^s>>>24^s<<8;n[e]=a>>>24&255;n[e+1]=a>>16&255;n[e+2]=a>>8&255;n[e+3]=255&a}}a=n[13];n[13]=n[9];n[9]=n[5];n[5]=n[1];n[1]=a;a=n[14];r=n[10];n[14]=n[6];n[10]=n[2];n[6]=a;n[2]=r;a=n[15];r=n[11];i=n[7];n[15]=n[3];n[11]=a;n[7]=r;n[3]=i;for(let e=0;e<16;++e){n[e]=this._inv_s[n[e]];n[e]^=t[e]}return n}_encrypt(e,t){const a=this._s;let r,i,n;const s=new Uint8Array(16);s.set(e);for(let e=0;e<16;++e)s[e]^=t[e];for(let e=1;e<this._cyclesOfRepetition;e++){for(let e=0;e<16;++e)s[e]=a[s[e]];n=s[1];s[1]=s[5];s[5]=s[9];s[9]=s[13];s[13]=n;n=s[2];i=s[6];s[2]=s[10];s[6]=s[14];s[10]=n;s[14]=i;n=s[3];i=s[7];r=s[11];s[3]=s[15];s[7]=n;s[11]=i;s[15]=r;for(let e=0;e<16;e+=4){const t=s[e+0],a=s[e+1],i=s[e+2],n=s[e+3];r=t^a^i^n;s[e+0]^=r^this._mixCol[t^a];s[e+1]^=r^this._mixCol[a^i];s[e+2]^=r^this._mixCol[i^n];s[e+3]^=r^this._mixCol[n^t]}for(let a=0,r=16*e;a<16;++a,++r)s[a]^=t[r]}for(let e=0;e<16;++e)s[e]=a[s[e]];n=s[1];s[1]=s[5];s[5]=s[9];s[9]=s[13];s[13]=n;n=s[2];i=s[6];s[2]=s[10];s[6]=s[14];s[10]=n;s[14]=i;n=s[3];i=s[7];r=s[11];s[3]=s[15];s[7]=n;s[11]=i;s[15]=r;for(let e=0,a=this._keySize;e<16;++e,++a)s[e]^=t[a];return s}_decryptBlock2(e,t){const a=e.length;let r=this.buffer,i=this.bufferPosition;const n=[];let s=this.iv;for(let t=0;t<a;++t){r[i]=e[t];++i;if(i<16)continue;const a=this._decrypt(r,this._key);for(let e=0;e<16;++e)a[e]^=s[e];s=r;n.push(a);r=new Uint8Array(16);i=0}this.buffer=r;this.bufferLength=i;this.iv=s;if(0===n.length)return new Uint8Array(0);let o=16*n.length;if(t){const e=n[n.length-1];let t=e[15];if(t<=16){for(let a=15,r=16-t;a>=r;--a)if(e[a]!==t){t=0;break}o-=t;n[n.length-1]=e.subarray(0,16-t)}}const c=new Uint8Array(o);for(let e=0,t=0,a=n.length;e<a;++e,t+=16)c.set(n[e],t);return c}decryptBlock(e,t,a=null){const r=e.length,i=this.buffer;let n=this.bufferPosition;if(a)this.iv=a;else{for(let t=0;n<16&&t<r;++t,++n)i[n]=e[t];if(n<16){this.bufferLength=n;return new Uint8Array(0)}this.iv=i;e=e.subarray(16)}this.buffer=new Uint8Array(16);this.bufferLength=0;this.decryptBlock=this._decryptBlock2;return this.decryptBlock(e,t)}encrypt(e,t){const a=e.length;let r=this.buffer,i=this.bufferPosition;const n=[];t||(t=new Uint8Array(16));for(let s=0;s<a;++s){r[i]=e[s];++i;if(i<16)continue;for(let e=0;e<16;++e)r[e]^=t[e];const a=this._encrypt(r,this._key);t=a;n.push(a);r=new Uint8Array(16);i=0}this.buffer=r;this.bufferLength=i;this.iv=t;if(0===n.length)return new Uint8Array(0);const s=16*n.length,o=new Uint8Array(s);for(let e=0,t=0,a=n.length;e<a;++e,t+=16)o.set(n[e],t);return o}}class p extends m{constructor(e){super();this._cyclesOfRepetition=10;this._keySize=160;this._rcon=new Uint8Array([141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141]);this._key=this._expandKey(e)}_expandKey(e){const t=this._s,a=this._rcon,r=new Uint8Array(176);r.set(e);for(let e=16,i=1;e<176;++i){let n=r[e-3],s=r[e-2],o=r[e-1],c=r[e-4];n=t[n];s=t[s];o=t[o];c=t[c];n^=a[i];for(let t=0;t<4;++t){r[e]=n^=r[e-16];e++;r[e]=s^=r[e-16];e++;r[e]=o^=r[e-16];e++;r[e]=c^=r[e-16];e++}}return r}}t.AES128Cipher=p;class b extends m{constructor(e){super();this._cyclesOfRepetition=14;this._keySize=224;this._key=this._expandKey(e)}_expandKey(e){const t=this._s,a=new Uint8Array(240);a.set(e);let r,i,n,s,o=1;for(let e=32,c=1;e<240;++c){if(e%32==16){r=t[r];i=t[i];n=t[n];s=t[s]}else if(e%32==0){r=a[e-3];i=a[e-2];n=a[e-1];s=a[e-4];r=t[r];i=t[i];n=t[n];s=t[s];r^=o;(o<<=1)>=256&&(o=255&(27^o))}for(let t=0;t<4;++t){a[e]=r^=a[e-32];e++;a[e]=i^=a[e-32];e++;a[e]=n^=a[e-32];e++;a[e]=s^=a[e-32];e++}}return a}}t.AES256Cipher=b;var y=function(){function e(e,t){if(e.length!==t.length)return!1;for(var a=0;a<e.length;a++)if(e[a]!==t[a])return!1;return!0}function t(){}t.prototype={checkOwnerPassword:function(t,a,r,i){var n=new Uint8Array(t.length+56);n.set(t,0);n.set(a,t.length);n.set(r,t.length+a.length);return e(u(n,0,n.length),i)},checkUserPassword:function(t,a,r){var i=new Uint8Array(t.length+8);i.set(t,0);i.set(a,t.length);return e(u(i,0,i.length),r)},getOwnerKey:function(e,t,a,r){var i=new Uint8Array(e.length+56);i.set(e,0);i.set(t,e.length);i.set(a,e.length+t.length);var n=u(i,0,i.length);return new b(n).decryptBlock(r,!1,new Uint8Array(16))},getUserKey:function(e,t,a){var r=new Uint8Array(e.length+8);r.set(e,0);r.set(t,e.length);var i=u(r,0,r.length);return new b(i).decryptBlock(a,!1,new Uint8Array(16))}};return t}();t.PDF17=y;var v=function(){function e(e,t){var a=new Uint8Array(e.length+t.length);a.set(e,0);a.set(t,e.length);return a}function t(t,a,r){for(var i=u(a,0,a.length).subarray(0,32),n=[0],s=0;s<64||n[n.length-1]>s-32;){var o=t.length+i.length+r.length,c=new Uint8Array(64*o),l=e(t,i);l=e(l,r);for(var h=0,g=0;h<64;h++,g+=o)c.set(l,g);n=new p(i.subarray(0,16)).encrypt(c,i.subarray(16,32));for(var m=0,b=0;b<16;b++){m*=1;m%=3;m+=(n[b]>>>0)%3;m%=3}0===m?i=u(n,0,n.length):1===m?i=f(n,0,n.length):2===m&&(i=d(n,0,n.length));s++}return i.subarray(0,32)}function a(){}function r(e,t){if(e.length!==t.length)return!1;for(var a=0;a<e.length;a++)if(e[a]!==t[a])return!1;return!0}a.prototype={hash:function(e,a,r){return t(e,a,r)},checkOwnerPassword:function(e,a,i,n){var s=new Uint8Array(e.length+56);s.set(e,0);s.set(a,e.length);s.set(i,e.length+a.length);return r(t(e,s,i),n)},checkUserPassword:function(e,a,i){var n=new Uint8Array(e.length+8);n.set(e,0);n.set(a,e.length);return r(t(e,n,[]),i)},getOwnerKey:function(e,a,r,i){var n=new Uint8Array(e.length+56);n.set(e,0);n.set(a,e.length);n.set(r,e.length+a.length);var s=t(e,n,r);return new b(s).decryptBlock(i,!1,new Uint8Array(16))},getUserKey:function(e,a,r){var i=new Uint8Array(e.length+8);i.set(e,0);i.set(a,e.length);var n=t(e,i,[]);return new b(n).decryptBlock(r,!1,new Uint8Array(16))}};return a}();t.PDF20=v;var w=function(){function e(e,t){this.StringCipherConstructor=e;this.StreamCipherConstructor=t}e.prototype={createStream:function(e,t){var a=new this.StreamCipherConstructor;return new n.DecryptStream(e,t,(function(e,t){return a.decryptBlock(e,t)}))},decryptString:function(e){var t=new this.StringCipherConstructor,a=(0,r.stringToBytes)(e);a=t.decryptBlock(a,!0);return(0,r.bytesToString)(a)}};return e}(),k=function(){var e=new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]);function t(t,a,r,i,n,o,c,h){var u,d,f=40+r.length+t.length,g=new Uint8Array(f),m=0;if(a){d=Math.min(32,a.length);for(;m<d;++m)g[m]=a[m]}u=0;for(;m<32;)g[m++]=e[u++];for(u=0,d=r.length;u<d;++u)g[m++]=r[u];g[m++]=255&n;g[m++]=n>>8&255;g[m++]=n>>16&255;g[m++]=n>>>24&255;for(u=0,d=t.length;u<d;++u)g[m++]=t[u];if(o>=4&&!h){g[m++]=255;g[m++]=255;g[m++]=255;g[m++]=255}var p=l(g,0,m),b=c>>3;if(o>=3)for(u=0;u<50;++u)p=l(p,0,b);var y,v=p.subarray(0,b);if(o>=3){for(m=0;m<32;++m)g[m]=e[m];for(u=0,d=t.length;u<d;++u)g[m++]=t[u];y=new s(v).encryptBlock(l(g,0,m));d=v.length;var w,k=new Uint8Array(d);for(u=1;u<=19;++u){for(w=0;w<d;++w)k[w]=v[w]^u;y=new s(k).encryptBlock(y)}for(u=0,d=y.length;u<d;++u)if(i[u]!==y[u])return null}else for(u=0,d=(y=new s(v).encryptBlock(e)).length;u<d;++u)if(i[u]!==y[u])return null;return v}var a=i.Name.get("Identity");function n(n,o,c){var h=n.get("Filter");if(!(0,i.isName)(h,"Standard"))throw new r.FormatError("unknown encryption method");this.dict=n;var u=n.get("V");if(!Number.isInteger(u)||1!==u&&2!==u&&4!==u&&5!==u)throw new r.FormatError("unsupported encryption algorithm");this.algorithm=u;var d=n.get("Length");if(!d)if(u<=3)d=40;else{var f=n.get("CF"),g=n.get("StmF");if((0,i.isDict)(f)&&(0,i.isName)(g)){f.suppressEncryption=!0;var m=f.get(g.name);(d=m&&m.get("Length")||128)<40&&(d<<=3)}}if(!Number.isInteger(d)||d<40||d%8!=0)throw new r.FormatError("invalid key length");var p=(0,r.stringToBytes)(n.get("O")).subarray(0,32),b=(0,r.stringToBytes)(n.get("U")).subarray(0,32),w=n.get("P"),k=n.get("R"),S=(4===u||5===u)&&!1!==n.get("EncryptMetadata");this.encryptMetadata=S;var C,x,A=(0,r.stringToBytes)(o);if(c){if(6===k)try{c=(0,r.utf8StringToString)(c)}catch(e){(0,r.warn)("CipherTransformFactory: Unable to convert UTF8 encoded password.")}C=(0,r.stringToBytes)(c)}if(5!==u)x=t(A,C,p,b,w,k,d,S);else{var I=(0,r.stringToBytes)(n.get("O")).subarray(32,40),F=(0,r.stringToBytes)(n.get("O")).subarray(40,48),T=(0,r.stringToBytes)(n.get("U")).subarray(0,48),E=(0,r.stringToBytes)(n.get("U")).subarray(32,40),O=(0,r.stringToBytes)(n.get("U")).subarray(40,48),P=(0,r.stringToBytes)(n.get("OE")),B=(0,r.stringToBytes)(n.get("UE"));(0,r.stringToBytes)(n.get("Perms"));x=function(e,t,a,r,i,n,s,o,c,l,h,u){if(t){var d=Math.min(127,t.length);t=t.subarray(0,d)}else t=[];var f;return(f=6===e?new v:new y).checkUserPassword(t,o,s)?f.getUserKey(t,c,h):t.length&&f.checkOwnerPassword(t,r,n,a)?f.getOwnerKey(t,i,n,l):null}(k,C,p,I,F,T,b,E,O,P,B)}if(!x&&!c)throw new r.PasswordException("No password given",r.PasswordResponses.NEED_PASSWORD);if(!x&&c){x=t(A,function(t,a,r,i){var n,o,c=new Uint8Array(32),h=0;o=Math.min(32,t.length);for(;h<o;++h)c[h]=t[h];n=0;for(;h<32;)c[h++]=e[n++];var u,d=l(c,0,h),f=i>>3;if(r>=3)for(n=0;n<50;++n)d=l(d,0,d.length);if(r>=3){u=a;var g,m=new Uint8Array(f);for(n=19;n>=0;n--){for(g=0;g<f;++g)m[g]=d[g]^n;u=new s(m).encryptBlock(u)}}else u=new s(d.subarray(0,f)).encryptBlock(a);return u}(C,p,k,d),p,b,w,k,d,S)}if(!x)throw new r.PasswordException("Incorrect Password",r.PasswordResponses.INCORRECT_PASSWORD);this.encryptionKey=x;if(u>=4){var D=n.get("CF");(0,i.isDict)(D)&&(D.suppressEncryption=!0);this.cf=D;this.stmf=n.get("StmF")||a;this.strf=n.get("StrF")||a;this.eff=n.get("EFF")||this.stmf}}function o(e,t,a,r){var i,n,s=new Uint8Array(a.length+9);for(i=0,n=a.length;i<n;++i)s[i]=a[i];s[i++]=255&e;s[i++]=e>>8&255;s[i++]=e>>16&255;s[i++]=255&t;s[i++]=t>>8&255;if(r){s[i++]=115;s[i++]=65;s[i++]=108;s[i++]=84}return l(s,0,i).subarray(0,Math.min(a.length+5,16))}function c(e,t,a,n,c){if(!(0,i.isName)(t))throw new r.FormatError("Invalid crypt filter name.");var l,h=e.get(t.name);null!=h&&(l=h.get("CFM"));if(!l||"None"===l.name)return function(){return new g};if("V2"===l.name)return function(){return new s(o(a,n,c,!1))};if("AESV2"===l.name)return function(){return new p(o(a,n,c,!0))};if("AESV3"===l.name)return function(){return new b(c)};throw new r.FormatError("Unknown crypto method")}n.prototype={createCipherTransform:function(e,t){if(4===this.algorithm||5===this.algorithm)return new w(c(this.cf,this.stmf,e,t,this.encryptionKey),c(this.cf,this.strf,e,t,this.encryptionKey));var a=o(e,t,this.encryptionKey,!1),r=function(){return new s(a)};return new w(r,r)}};return n}();t.CipherTransformFactory=k},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.ColorSpace=void 0;var r=a(2),i=a(4);class n{constructor(e,t){this.constructor===n&&(0,r.unreachable)("Cannot initialize ColorSpace.");this.name=e;this.numComps=t}getRgb(e,t){const a=new Uint8ClampedArray(3);this.getRgbItem(e,t,a,0);return a}getRgbItem(e,t,a,i){(0,r.unreachable)("Should not call ColorSpace.getRgbItem")}getRgbBuffer(e,t,a,i,n,s,o){(0,r.unreachable)("Should not call ColorSpace.getRgbBuffer")}getOutputLength(e,t){(0,r.unreachable)("Should not call ColorSpace.getOutputLength")}isPassthrough(e){return!1}isDefaultDecode(e,t){return n.isDefaultDecode(e,this.numComps)}fillRgb(e,t,a,r,i,n,s,o,c){const l=t*a;let h=null;const u=1<<s,d=a!==i||t!==r;if(this.isPassthrough(s))h=o;else if(1===this.numComps&&l>u&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){const t=s<=8?new Uint8Array(u):new Uint16Array(u);for(let e=0;e<u;e++)t[e]=e;const a=new Uint8ClampedArray(3*u);this.getRgbBuffer(t,0,u,a,0,s,0);if(d){h=new Uint8Array(3*l);let e=0;for(let t=0;t<l;++t){const r=3*o[t];h[e++]=a[r];h[e++]=a[r+1];h[e++]=a[r+2]}}else{let t=0;for(let r=0;r<l;++r){const i=3*o[r];e[t++]=a[i];e[t++]=a[i+1];e[t++]=a[i+2];t+=c}}}else if(d){h=new Uint8ClampedArray(3*l);this.getRgbBuffer(o,0,l,h,0,s,0)}else this.getRgbBuffer(o,0,r*n,e,0,s,c);if(h)if(d)!function(e,t,a,r,i,n,s){s=1!==s?0:s;const o=a/i,c=r/n;let l,h=0;const u=new Uint16Array(i),d=3*a;for(let e=0;e<i;e++)u[e]=3*Math.floor(e*o);for(let a=0;a<n;a++){const r=Math.floor(a*c)*d;for(let a=0;a<i;a++){l=r+u[a];t[h++]=e[l++];t[h++]=e[l++];t[h++]=e[l++];h+=s}}}(h,e,t,a,r,i,c);else{let t=0,a=0;for(let i=0,s=r*n;i<s;i++){e[t++]=h[a++];e[t++]=h[a++];e[t++]=h[a++];t+=c}}}get usesZeroToOneRange(){return(0,r.shadow)(this,"usesZeroToOneRange",!0)}static parse(e,t,a,r){const i=this.parseToIR(e,t,a,r);return this.fromIR(i)}static fromIR(e){const t=Array.isArray(e)?e[0]:e;let a,i,n;switch(t){case"DeviceGrayCS":return this.singletons.gray;case"DeviceRgbCS":return this.singletons.rgb;case"DeviceCmykCS":return this.singletons.cmyk;case"CalGrayCS":a=e[1];i=e[2];n=e[3];return new d(a,i,n);case"CalRGBCS":a=e[1];i=e[2];n=e[3];const l=e[4];return new f(a,i,n,l);case"PatternCS":let h=e[1];h&&(h=this.fromIR(h));return new o(h);case"IndexedCS":const u=e[1],m=e[2],p=e[3];return new c(this.fromIR(u),m,p);case"AlternateCS":const b=e[1],y=e[2],v=e[3];return new s(b,this.fromIR(y),v);case"LabCS":a=e[1];i=e[2];const w=e[3];return new g(a,i,w);default:throw new r.FormatError(`Unknown colorspace name: ${t}`)}}static parseToIR(e,t,a=null,n){e=t.fetchIfRef(e);if((0,i.isName)(e))switch(e.name){case"DeviceGray":case"G":return"DeviceGrayCS";case"DeviceRGB":case"RGB":return"DeviceRgbCS";case"DeviceCMYK":case"CMYK":return"DeviceCmykCS";case"Pattern":return["PatternCS",null];default:if((0,i.isDict)(a)){const r=a.get("ColorSpace");if((0,i.isDict)(r)){const s=r.get(e.name);if(s){if((0,i.isName)(s))return this.parseToIR(s,t,a,n);e=s;break}}}throw new r.FormatError(`unrecognized colorspace ${e.name}`)}if(Array.isArray(e)){const s=t.fetchIfRef(e[0]).name;let o,c,l,h,u,d;switch(s){case"DeviceGray":case"G":return"DeviceGrayCS";case"DeviceRGB":case"RGB":return"DeviceRgbCS";case"DeviceCMYK":case"CMYK":return"DeviceCmykCS";case"CalGray":c=t.fetchIfRef(e[1]);h=c.getArray("WhitePoint");u=c.getArray("BlackPoint");d=c.get("Gamma");return["CalGrayCS",h,u,d];case"CalRGB":c=t.fetchIfRef(e[1]);h=c.getArray("WhitePoint");u=c.getArray("BlackPoint");d=c.getArray("Gamma");return["CalRGBCS",h,u,d,c.getArray("Matrix")];case"ICCBased":const f=t.fetchIfRef(e[1]).dict;o=f.get("N");l=f.get("Alternate");if(l){const e=this.parseToIR(l,t,a,n);if(this.fromIR(e,n).numComps===o)return e;(0,r.warn)("ICCBased color space: Ignoring incorrect /Alternate entry.")}if(1===o)return"DeviceGrayCS";if(3===o)return"DeviceRgbCS";if(4===o)return"DeviceCmykCS";break;case"Pattern":let g=e[1]||null;g&&(g=this.parseToIR(g,t,a,n));return["PatternCS",g];case"Indexed":case"I":const m=this.parseToIR(e[1],t,a,n),p=t.fetchIfRef(e[2])+1;let b=t.fetchIfRef(e[3]);(0,i.isStream)(b)&&(b=b.getBytes());return["IndexedCS",m,p,b];case"Separation":case"DeviceN":const y=t.fetchIfRef(e[1]);o=Array.isArray(y)?y.length:1;l=this.parseToIR(e[2],t,a,n);return["AlternateCS",o,l,n.create(t.fetchIfRef(e[3]))];case"Lab":c=t.fetchIfRef(e[1]);h=c.getArray("WhitePoint");u=c.getArray("BlackPoint");return["LabCS",h,u,c.getArray("Range")];default:throw new r.FormatError(`unimplemented color space object "${s}"`)}}throw new r.FormatError(`unrecognized color space object: "${e}"`)}static isDefaultDecode(e,t){if(!Array.isArray(e))return!0;if(2*t!==e.length){(0,r.warn)("The decode map is not the correct length");return!0}for(let t=0,a=e.length;t<a;t+=2)if(0!==e[t]||1!==e[t+1])return!1;return!0}static get singletons(){return(0,r.shadow)(this,"singletons",{get gray(){return(0,r.shadow)(this,"gray",new l)},get rgb(){return(0,r.shadow)(this,"rgb",new h)},get cmyk(){return(0,r.shadow)(this,"cmyk",new u)}})}}t.ColorSpace=n;class s extends n{constructor(e,t,a){super("Alternate",e);this.base=t;this.tintFn=a;this.tmpBuf=new Float32Array(t.numComps)}getRgbItem(e,t,a,r){const i=this.tmpBuf;this.tintFn(e,t,i,0);this.base.getRgbItem(i,0,a,r)}getRgbBuffer(e,t,a,r,i,n,s){const o=this.tintFn,c=this.base,l=1/((1<<n)-1),h=c.numComps,u=c.usesZeroToOneRange,d=(c.isPassthrough(8)||!u)&&0===s;let f=d?i:0;const g=d?r:new Uint8ClampedArray(h*a),m=this.numComps,p=new Float32Array(m),b=new Float32Array(h);let y,v;for(y=0;y<a;y++){for(v=0;v<m;v++)p[v]=e[t++]*l;o(p,0,b,0);if(u)for(v=0;v<h;v++)g[f++]=255*b[v];else{c.getRgbItem(b,0,g,f);f+=h}}d||c.getRgbBuffer(g,0,a,r,i,8,s)}getOutputLength(e,t){return this.base.getOutputLength(e*this.base.numComps/this.numComps,t)}}class o extends n{constructor(e){super("Pattern",null);this.base=e}isDefaultDecode(e,t){(0,r.unreachable)("Should not call PatternCS.isDefaultDecode")}}class c extends n{constructor(e,t,a){super("Indexed",1);this.base=e;this.highVal=t;const n=e.numComps*t;if((0,i.isStream)(a)){this.lookup=new Uint8Array(n);const e=a.getBytes(n);this.lookup.set(e)}else if((0,r.isString)(a)){this.lookup=new Uint8Array(n);for(let e=0;e<n;++e)this.lookup[e]=a.charCodeAt(e)}else{if(!(a instanceof Uint8Array))throw new r.FormatError(`Unrecognized lookup table: ${a}`);this.lookup=a}}getRgbItem(e,t,a,r){const i=this.base.numComps,n=e[t]*i;this.base.getRgbBuffer(this.lookup,n,1,a,r,8,0)}getRgbBuffer(e,t,a,r,i,n,s){const o=this.base,c=o.numComps,l=o.getOutputLength(c,s),h=this.lookup;for(let n=0;n<a;++n){const a=e[t++]*c;o.getRgbBuffer(h,a,1,r,i,8,s);i+=l}}getOutputLength(e,t){return this.base.getOutputLength(e*this.base.numComps,t)}isDefaultDecode(e,t){if(!Array.isArray(e))return!0;if(2!==e.length){(0,r.warn)("Decode map length is not correct");return!0}if(!Number.isInteger(t)||t<1){(0,r.warn)("Bits per component is not correct");return!0}return 0===e[0]&&e[1]===(1<<t)-1}}class l extends n{constructor(){super("DeviceGray",1)}getRgbItem(e,t,a,r){const i=255*e[t];a[r]=a[r+1]=a[r+2]=i}getRgbBuffer(e,t,a,r,i,n,s){const o=255/((1<<n)-1);let c=t,l=i;for(let t=0;t<a;++t){const t=o*e[c++];r[l++]=t;r[l++]=t;r[l++]=t;l+=s}}getOutputLength(e,t){return e*(3+t)}}class h extends n{constructor(){super("DeviceRGB",3)}getRgbItem(e,t,a,r){a[r]=255*e[t];a[r+1]=255*e[t+1];a[r+2]=255*e[t+2]}getRgbBuffer(e,t,a,r,i,n,s){if(8===n&&0===s){r.set(e.subarray(t,t+3*a),i);return}const o=255/((1<<n)-1);let c=t,l=i;for(let t=0;t<a;++t){r[l++]=o*e[c++];r[l++]=o*e[c++];r[l++]=o*e[c++];l+=s}}getOutputLength(e,t){return e*(3+t)/3|0}isPassthrough(e){return 8===e}}const u=function(){function e(e,t,a,r,i){const n=e[t]*a,s=e[t+1]*a,o=e[t+2]*a,c=e[t+3]*a;r[i]=255+n*(-4.387332384609988*n+54.48615194189176*s+18.82290502165302*o+212.25662451639585*c-285.2331026137004)+s*(1.7149763477362134*s-5.6096736904047315*o+-17.873870861415444*c-5.497006427196366)+o*(-2.5217340131683033*o-21.248923337353073*c+17.5119270841813)+c*(-21.86122147463605*c-189.48180835922747);r[i+1]=255+n*(8.841041422036149*n+60.118027045597366*s+6.871425592049007*o+31.159100130055922*c-79.2970844816548)+s*(-15.310361306967817*s+17.575251261109482*o+131.35250912493976*c-190.9453302588951)+o*(4.444339102852739*o+9.8632861493405*c-24.86741582555878)+c*(-20.737325471181034*c-187.80453709719578);r[i+2]=255+n*(.8842522430003296*n+8.078677503112928*s+30.89978309703729*o-.23883238689178934*c-14.183576799673286)+s*(10.49593273432072*s+63.02378494754052*o+50.606957656360734*c-112.23884253719248)+o*(.03296041114873217*o+115.60384449646641*c-193.58209356861505)+c*(-22.33816807309886*c-180.12613974708367)}return class extends n{constructor(){super("DeviceCMYK",4)}getRgbItem(t,a,r,i){e(t,a,1,r,i)}getRgbBuffer(t,a,r,i,n,s,o){const c=1/((1<<s)-1);for(let s=0;s<r;s++){e(t,a,c,i,n);a+=4;n+=3+o}}getOutputLength(e,t){return e/4*(3+t)|0}}}(),d=function(){function e(e,t,a,r,i,n){const s=(t[a]*n)**e.G,o=e.YW*s,c=Math.max(295.8*o**.3333333333333333-40.8,0);r[i]=c;r[i+1]=c;r[i+2]=c}return class extends n{constructor(e,t,a){super("CalGray",1);if(!e)throw new r.FormatError("WhitePoint missing - required for color space CalGray");t=t||[0,0,0];a=a||1;this.XW=e[0];this.YW=e[1];this.ZW=e[2];this.XB=t[0];this.YB=t[1];this.ZB=t[2];this.G=a;if(this.XW<0||this.ZW<0||1!==this.YW)throw new r.FormatError(`Invalid WhitePoint components for ${this.name}`+", no fallback available");if(this.XB<0||this.YB<0||this.ZB<0){(0,r.info)(`Invalid BlackPoint for ${this.name}, falling back to default.`);this.XB=this.YB=this.ZB=0}0===this.XB&&0===this.YB&&0===this.ZB||(0,r.warn)(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, `+`ZB: ${this.ZB}, only default values are supported.`);if(this.G<1){(0,r.info)(`Invalid Gamma: ${this.G} for ${this.name}, `+"falling back to default.");this.G=1}}getRgbItem(t,a,r,i){e(this,t,a,r,i,1)}getRgbBuffer(t,a,r,i,n,s,o){const c=1/((1<<s)-1);for(let s=0;s<r;++s){e(this,t,a,i,n,c);a+=1;n+=3+o}}getOutputLength(e,t){return e*(3+t)}}}(),f=function(){const e=new Float32Array([.8951,.2664,-.1614,-.7502,1.7135,.0367,.0389,-.0685,1.0296]),t=new Float32Array([.9869929,-.1470543,.1599627,.4323053,.5183603,.0492912,-.0085287,.0400428,.9684867]),a=new Float32Array([3.2404542,-1.5371385,-.4985314,-.969266,1.8760108,.041556,.0556434,-.2040259,1.0572252]),i=new Float32Array([1,1,1]),s=new Float32Array(3),o=new Float32Array(3),c=new Float32Array(3);function l(e,t,a){a[0]=e[0]*t[0]+e[1]*t[1]+e[2]*t[2];a[1]=e[3]*t[0]+e[4]*t[1]+e[5]*t[2];a[2]=e[6]*t[0]+e[7]*t[1]+e[8]*t[2]}function h(e){return u(0,1,e<=.0031308?12.92*e:1.055*e**(1/2.4)-.055)}function u(e,t,a){return Math.max(e,Math.min(t,a))}function d(e){return e<0?-d(-e):e>8?((e+16)/116)**3:e*((24/116)**3/8)}function f(r,n,f,g,m,p){const b=u(0,1,n[f]*p),y=u(0,1,n[f+1]*p),v=u(0,1,n[f+2]*p),w=b**r.GR,k=y**r.GG,S=v**r.GB,C=r.MXA*w+r.MXB*k+r.MXC*S,x=r.MYA*w+r.MYB*k+r.MYC*S,A=r.MZA*w+r.MZB*k+r.MZC*S,I=o;I[0]=C;I[1]=x;I[2]=A;const F=c;!function(a,r,i){if(1===a[0]&&1===a[2]){i[0]=r[0];i[1]=r[1];i[2]=r[2];return}const n=i;l(e,r,n);const o=s;!function(e,t,a){a[0]=1*t[0]/e[0];a[1]=1*t[1]/e[1];a[2]=1*t[2]/e[2]}(a,n,o);l(t,o,i)}(r.whitePoint,I,F);const T=o;!function(e,t,a){if(0===e[0]&&0===e[1]&&0===e[2]){a[0]=t[0];a[1]=t[1];a[2]=t[2];return}const r=d(0),i=(1-r)/(1-d(e[0])),n=1-i,s=(1-r)/(1-d(e[1])),o=1-s,c=(1-r)/(1-d(e[2])),l=1-c;a[0]=t[0]*i+n;a[1]=t[1]*s+o;a[2]=t[2]*c+l}(r.blackPoint,F,T);const E=c;!function(a,r,i){const n=i;l(e,r,n);const o=s;!function(e,t,a){a[0]=.95047*t[0]/e[0];a[1]=1*t[1]/e[1];a[2]=1.08883*t[2]/e[2]}(a,n,o);l(t,o,i)}(i,T,E);const O=o;l(a,E,O);g[m]=255*h(O[0]);g[m+1]=255*h(O[1]);g[m+2]=255*h(O[2])}return class extends n{constructor(e,t,a,i){super("CalRGB",3);if(!e)throw new r.FormatError("WhitePoint missing - required for color space CalRGB");t=t||new Float32Array(3);a=a||new Float32Array([1,1,1]);i=i||new Float32Array([1,0,0,0,1,0,0,0,1]);const n=e[0],s=e[1],o=e[2];this.whitePoint=e;const c=t[0],l=t[1],h=t[2];this.blackPoint=t;this.GR=a[0];this.GG=a[1];this.GB=a[2];this.MXA=i[0];this.MYA=i[1];this.MZA=i[2];this.MXB=i[3];this.MYB=i[4];this.MZB=i[5];this.MXC=i[6];this.MYC=i[7];this.MZC=i[8];if(n<0||o<0||1!==s)throw new r.FormatError(`Invalid WhitePoint components for ${this.name}`+", no fallback available");if(c<0||l<0||h<0){(0,r.info)(`Invalid BlackPoint for ${this.name} [${c}, ${l}, ${h}], `+"falling back to default.");this.blackPoint=new Float32Array(3)}if(this.GR<0||this.GG<0||this.GB<0){(0,r.info)(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for `+`${this.name}, falling back to default.`);this.GR=this.GG=this.GB=1}}getRgbItem(e,t,a,r){f(this,e,t,a,r,1)}getRgbBuffer(e,t,a,r,i,n,s){const o=1/((1<<n)-1);for(let n=0;n<a;++n){f(this,e,t,r,i,o);t+=3;i+=3+s}}getOutputLength(e,t){return e*(3+t)/3|0}}}(),g=function(){function e(e){let t;t=e>=6/29?e*e*e:108/841*(e-4/29);return t}function t(e,t,a,r){return a+e*(r-a)/t}function a(a,r,i,n,s,o){let c=r[i],l=r[i+1],h=r[i+2];if(!1!==n){c=t(c,n,0,100);l=t(l,n,a.amin,a.amax);h=t(h,n,a.bmin,a.bmax)}l>a.amax?l=a.amax:l<a.amin&&(l=a.amin);h>a.bmax?h=a.bmax:h<a.bmin&&(h=a.bmin);const u=(c+16)/116,d=u+l/500,f=u-h/200,g=a.XW*e(d),m=a.YW*e(u),p=a.ZW*e(f);let b,y,v;if(a.ZW<1){b=3.1339*g+-1.617*m+-.4906*p;y=-.9785*g+1.916*m+.0333*p;v=.072*g+-.229*m+1.4057*p}else{b=3.2406*g+-1.5372*m+-.4986*p;y=-.9689*g+1.8758*m+.0415*p;v=.0557*g+-.204*m+1.057*p}s[o]=255*Math.sqrt(b);s[o+1]=255*Math.sqrt(y);s[o+2]=255*Math.sqrt(v)}return class extends n{constructor(e,t,a){super("Lab",3);if(!e)throw new r.FormatError("WhitePoint missing - required for color space Lab");t=t||[0,0,0];a=a||[-100,100,-100,100];this.XW=e[0];this.YW=e[1];this.ZW=e[2];this.amin=a[0];this.amax=a[1];this.bmin=a[2];this.bmax=a[3];this.XB=t[0];this.YB=t[1];this.ZB=t[2];if(this.XW<0||this.ZW<0||1!==this.YW)throw new r.FormatError("Invalid WhitePoint components, no fallback available");if(this.XB<0||this.YB<0||this.ZB<0){(0,r.info)("Invalid BlackPoint, falling back to default");this.XB=this.YB=this.ZB=0}if(this.amin>this.amax||this.bmin>this.bmax){(0,r.info)("Invalid Range, falling back to defaults");this.amin=-100;this.amax=100;this.bmin=-100;this.bmax=100}}getRgbItem(e,t,r,i){a(this,e,t,!1,r,i)}getRgbBuffer(e,t,r,i,n,s,o){const c=(1<<s)-1;for(let s=0;s<r;s++){a(this,e,t,c,i,n);t+=3;n+=3+o}}getOutputLength(e,t){return e*(3+t)/3|0}isDefaultDecode(e,t){return!0}get usesZeroToOneRange(){return(0,r.shadow)(this,"usesZeroToOneRange",!1)}}}()},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.getQuadPoints=h;t.MarkupAnnotation=t.AnnotationFactory=t.AnnotationBorderStyle=t.Annotation=void 0;var r=a(2),i=a(9),n=a(4),s=a(22),o=a(7),c=a(24),l=a(11);t.AnnotationFactory=class{static create(e,t,a,r){return a.ensure(this,"_create",[e,t,a,r])}static _create(e,t,a,i){const s=e.fetchIfRef(t);if(!(0,n.isDict)(s))return;const c=(0,n.isRef)(t)?t.toString():`annot_${i.createObjId()}`;let l=s.get("Subtype");l=(0,n.isName)(l)?l.name:null;const h={xref:e,dict:s,subtype:l,id:c,pdfManager:a};switch(l){case"Link":return new v(h);case"Text":return new y(h);case"Widget":let e=(0,o.getInheritableProperty)({dict:s,key:"FT"});e=(0,n.isName)(e)?e.name:null;switch(e){case"Tx":return new m(h);case"Btn":return new p(h);case"Ch":return new b(h)}(0,r.warn)('Unimplemented widget field type "'+e+'", falling back to base field type.');return new g(h);case"Popup":return new w(h);case"FreeText":return new k(h);case"Line":return new S(h);case"Square":return new C(h);case"Circle":return new x(h);case"PolyLine":return new A(h);case"Polygon":return new I(h);case"Caret":return new F(h);case"Ink":return new T(h);case"Highlight":return new E(h);case"Underline":return new O(h);case"Squiggly":return new P(h);case"StrikeOut":return new B(h);case"Stamp":return new D(h);case"FileAttachment":return new N(h);default:l?(0,r.warn)('Unimplemented annotation type "'+l+'", falling back to base annotation.'):(0,r.warn)("Annotation is missing the required /Subtype.");return new u(h)}}};function h(e,t){if(!e.has("QuadPoints"))return null;const a=e.getArray("QuadPoints");if(!Array.isArray(a)||a.length%8>0)return null;const r=[];for(let e=0,i=a.length/8;e<i;e++){r.push([]);for(let i=8*e,n=8*e+8;i<n;i+=2){const n=a[i],s=a[i+1];if(n<t[0]||n>t[2]||s<t[1]||s>t[3])return null;r[e].push({x:n,y:s})}}return r}class u{constructor(e){const t=e.dict;this.setContents(t.get("Contents"));this.setModificationDate(t.get("M"));this.setFlags(t.get("F"));this.setRectangle(t.getArray("Rect"));this.setColor(t.getArray("C"));this.setBorderStyle(t);this.setAppearance(t);this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,contents:this.contents,hasAppearance:!!this.appearance,id:e.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:e.subtype}}_hasFlag(e,t){return!!(e&t)}_isViewable(e){return!this._hasFlag(e,r.AnnotationFlag.INVISIBLE)&&!this._hasFlag(e,r.AnnotationFlag.HIDDEN)&&!this._hasFlag(e,r.AnnotationFlag.NOVIEW)}_isPrintable(e){return this._hasFlag(e,r.AnnotationFlag.PRINT)&&!this._hasFlag(e,r.AnnotationFlag.INVISIBLE)&&!this._hasFlag(e,r.AnnotationFlag.HIDDEN)}get viewable(){return 0===this.flags||this._isViewable(this.flags)}get printable(){return 0!==this.flags&&this._isPrintable(this.flags)}setContents(e){this.contents=(0,r.stringToPDFString)(e||"")}setModificationDate(e){this.modificationDate=(0,r.isString)(e)?e:null}setFlags(e){this.flags=Number.isInteger(e)&&e>0?e:0}hasFlag(e){return this._hasFlag(this.flags,e)}setRectangle(e){Array.isArray(e)&&4===e.length?this.rectangle=r.Util.normalizeRect(e):this.rectangle=[0,0,0,0]}setColor(e){const t=new Uint8ClampedArray(3);if(Array.isArray(e))switch(e.length){case 0:this.color=null;break;case 1:s.ColorSpace.singletons.gray.getRgbItem(e,0,t,0);this.color=t;break;case 3:s.ColorSpace.singletons.rgb.getRgbItem(e,0,t,0);this.color=t;break;case 4:s.ColorSpace.singletons.cmyk.getRgbItem(e,0,t,0);this.color=t;break;default:this.color=t}else this.color=t}setBorderStyle(e){this.borderStyle=new d;if((0,n.isDict)(e))if(e.has("BS")){const t=e.get("BS"),a=t.get("Type");if(!a||(0,n.isName)(a,"Border")){this.borderStyle.setWidth(t.get("W"),this.rectangle);this.borderStyle.setStyle(t.get("S"));this.borderStyle.setDashArray(t.getArray("D"))}}else if(e.has("Border")){const t=e.getArray("Border");if(Array.isArray(t)&&t.length>=3){this.borderStyle.setHorizontalCornerRadius(t[0]);this.borderStyle.setVerticalCornerRadius(t[1]);this.borderStyle.setWidth(t[2],this.rectangle);4===t.length&&this.borderStyle.setDashArray(t[3])}}else this.borderStyle.setWidth(0)}setAppearance(e){this.appearance=null;const t=e.get("AP");if(!(0,n.isDict)(t))return;const a=t.get("N");if((0,n.isStream)(a)){this.appearance=a;return}if(!(0,n.isDict)(a))return;const r=e.get("AS");(0,n.isName)(r)&&a.has(r.name)&&(this.appearance=a.get(r.name))}loadResources(e){return this.appearance.dict.getAsync("Resources").then(t=>{if(!t)return;return new i.ObjectLoader(t,e,t.xref).load().then((function(){return t}))})}getOperatorList(e,t,a){if(!this.appearance)return Promise.resolve(new c.OperatorList);const i=this.data,n=this.appearance.dict,s=this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"]),o=n.getArray("BBox")||[0,0,1,1],l=n.getArray("Matrix")||[1,0,0,1,0,0],h=function(e,t,a){const[i,n,s,o]=r.Util.getAxialAlignedBoundingBox(t,a);if(i===s||n===o)return[1,0,0,1,e[0],e[1]];const c=(e[2]-e[0])/(s-i),l=(e[3]-e[1])/(o-n);return[c,0,0,l,e[0]-i*c,e[1]-n*l]}(i.rect,o,l);return s.then(a=>{const n=new c.OperatorList;n.addOp(r.OPS.beginAnnotation,[i.rect,h,l]);return e.getOperatorList({stream:this.appearance,task:t,resources:a,operatorList:n}).then(()=>{n.addOp(r.OPS.endAnnotation,[]);this.appearance.reset();return n})})}}t.Annotation=u;class d{constructor(){this.width=1;this.style=r.AnnotationBorderStyleType.SOLID;this.dashArray=[3];this.horizontalCornerRadius=0;this.verticalCornerRadius=0}setWidth(e,t=[0,0,0,0]){if((0,n.isName)(e))this.width=0;else if(Number.isInteger(e)){if(e>0){const a=(t[2]-t[0])/2,i=(t[3]-t[1])/2;if(a>0&&i>0&&(e>a||e>i)){(0,r.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${e}`);e=1}}this.width=e}}setStyle(e){if((0,n.isName)(e))switch(e.name){case"S":this.style=r.AnnotationBorderStyleType.SOLID;break;case"D":this.style=r.AnnotationBorderStyleType.DASHED;break;case"B":this.style=r.AnnotationBorderStyleType.BEVELED;break;case"I":this.style=r.AnnotationBorderStyleType.INSET;break;case"U":this.style=r.AnnotationBorderStyleType.UNDERLINE}}setDashArray(e){if(Array.isArray(e)&&e.length>0){let t=!0,a=!0;for(const r of e){if(!(+r>=0)){t=!1;break}r>0&&(a=!1)}t&&!a?this.dashArray=e:this.width=0}else e&&(this.width=0)}setHorizontalCornerRadius(e){Number.isInteger(e)&&(this.horizontalCornerRadius=e)}setVerticalCornerRadius(e){Number.isInteger(e)&&(this.verticalCornerRadius=e)}}t.AnnotationBorderStyle=d;class f extends u{constructor(e){super(e);const t=e.dict;if(t.has("IRT")){const e=t.getRaw("IRT");this.data.inReplyTo=(0,n.isRef)(e)?e.toString():null;const a=t.get("RT");this.data.replyType=(0,n.isName)(a)?a.name:r.AnnotationReplyType.REPLY}if(this.data.replyType===r.AnnotationReplyType.GROUP){const e=t.get("IRT");this.data.title=(0,r.stringToPDFString)(e.get("T")||"");this.setContents(e.get("Contents"));this.data.contents=this.contents;if(e.has("CreationDate")){this.setCreationDate(e.get("CreationDate"));this.data.creationDate=this.creationDate}else this.data.creationDate=null;if(e.has("M")){this.setModificationDate(e.get("M"));this.data.modificationDate=this.modificationDate}else this.data.modificationDate=null;this.data.hasPopup=e.has("Popup");if(e.has("C")){this.setColor(e.getArray("C"));this.data.color=this.color}else this.data.color=null}else{this.data.title=(0,r.stringToPDFString)(t.get("T")||"");this.setCreationDate(t.get("CreationDate"));this.data.creationDate=this.creationDate;this.data.hasPopup=t.has("Popup");t.has("C")||(this.data.color=null)}}setCreationDate(e){this.creationDate=(0,r.isString)(e)?e:null}}t.MarkupAnnotation=f;class g extends u{constructor(e){super(e);const t=e.dict,a=this.data;a.annotationType=r.AnnotationType.WIDGET;a.fieldName=this._constructFieldName(t);a.fieldValue=(0,o.getInheritableProperty)({dict:t,key:"V",getArray:!0});a.alternativeText=(0,r.stringToPDFString)(t.get("TU")||"");a.defaultAppearance=(0,o.getInheritableProperty)({dict:t,key:"DA"})||"";const i=(0,o.getInheritableProperty)({dict:t,key:"FT"});a.fieldType=(0,n.isName)(i)?i.name:null;this.fieldResources=(0,o.getInheritableProperty)({dict:t,key:"DR"})||n.Dict.empty;a.fieldFlags=(0,o.getInheritableProperty)({dict:t,key:"Ff"});(!Number.isInteger(a.fieldFlags)||a.fieldFlags<0)&&(a.fieldFlags=0);a.readOnly=this.hasFieldFlag(r.AnnotationFieldFlag.READONLY);if("Sig"===a.fieldType){a.fieldValue=null;this.setFlags(r.AnnotationFlag.HIDDEN)}}_constructFieldName(e){if(!e.has("T")&&!e.has("Parent")){(0,r.warn)("Unknown field name, falling back to empty field name.");return""}if(!e.has("Parent"))return(0,r.stringToPDFString)(e.get("T"));const t=[];e.has("T")&&t.unshift((0,r.stringToPDFString)(e.get("T")));let a=e;for(;a.has("Parent");){a=a.get("Parent");if(!(0,n.isDict)(a))break;a.has("T")&&t.unshift((0,r.stringToPDFString)(a.get("T")))}return t.join(".")}hasFieldFlag(e){return!!(this.data.fieldFlags&e)}getOperatorList(e,t,a){return a?Promise.resolve(new c.OperatorList):super.getOperatorList(e,t,a)}}class m extends g{constructor(e){super(e);const t=e.dict;this.data.fieldValue=(0,r.stringToPDFString)(this.data.fieldValue||"");let a=(0,o.getInheritableProperty)({dict:t,key:"Q"});(!Number.isInteger(a)||a<0||a>2)&&(a=null);this.data.textAlignment=a;let i=(0,o.getInheritableProperty)({dict:t,key:"MaxLen"});(!Number.isInteger(i)||i<0)&&(i=null);this.data.maxLen=i;this.data.multiLine=this.hasFieldFlag(r.AnnotationFieldFlag.MULTILINE);this.data.comb=this.hasFieldFlag(r.AnnotationFieldFlag.COMB)&&!this.hasFieldFlag(r.AnnotationFieldFlag.MULTILINE)&&!this.hasFieldFlag(r.AnnotationFieldFlag.PASSWORD)&&!this.hasFieldFlag(r.AnnotationFieldFlag.FILESELECT)&&null!==this.data.maxLen}getOperatorList(e,t,a){if(a||this.appearance)return super.getOperatorList(e,t,a);const i=new c.OperatorList;if(!this.data.defaultAppearance)return Promise.resolve(i);const n=new l.Stream((0,r.stringToBytes)(this.data.defaultAppearance));return e.getOperatorList({stream:n,task:t,resources:this.fieldResources,operatorList:i}).then((function(){return i}))}}class p extends g{constructor(e){super(e);this.data.checkBox=!this.hasFieldFlag(r.AnnotationFieldFlag.RADIO)&&!this.hasFieldFlag(r.AnnotationFieldFlag.PUSHBUTTON);this.data.radioButton=this.hasFieldFlag(r.AnnotationFieldFlag.RADIO)&&!this.hasFieldFlag(r.AnnotationFieldFlag.PUSHBUTTON);this.data.pushButton=this.hasFieldFlag(r.AnnotationFieldFlag.PUSHBUTTON);this.data.checkBox?this._processCheckBox(e):this.data.radioButton?this._processRadioButton(e):this.data.pushButton?this._processPushButton(e):(0,r.warn)("Invalid field flags for button widget annotation")}_processCheckBox(e){(0,n.isName)(this.data.fieldValue)&&(this.data.fieldValue=this.data.fieldValue.name);const t=e.dict.get("AP");if(!(0,n.isDict)(t))return;const a=t.get("D");if(!(0,n.isDict)(a))return;const r=a.getKeys();2===r.length&&(this.data.exportValue="Off"===r[0]?r[1]:r[0])}_processRadioButton(e){this.data.fieldValue=this.data.buttonValue=null;const t=e.dict.get("Parent");if((0,n.isDict)(t)&&t.has("V")){const e=t.get("V");(0,n.isName)(e)&&(this.data.fieldValue=e.name)}const a=e.dict.get("AP");if(!(0,n.isDict)(a))return;const r=a.get("N");if((0,n.isDict)(r))for(const e of r.getKeys())if("Off"!==e){this.data.buttonValue=e;break}}_processPushButton(e){e.dict.has("A")?i.Catalog.parseDestDictionary({destDict:e.dict,resultObj:this.data,docBaseUrl:e.pdfManager.docBaseUrl}):(0,r.warn)("Push buttons without action dictionaries are not supported")}}class b extends g{constructor(e){super(e);this.data.options=[];const t=(0,o.getInheritableProperty)({dict:e.dict,key:"Opt"});if(Array.isArray(t)){const a=e.xref;for(let e=0,i=t.length;e<i;e++){const i=a.fetchIfRef(t[e]),n=Array.isArray(i);this.data.options[e]={exportValue:n?a.fetchIfRef(i[0]):i,displayValue:(0,r.stringToPDFString)(n?a.fetchIfRef(i[1]):i)}}}Array.isArray(this.data.fieldValue)||(this.data.fieldValue=[this.data.fieldValue]);this.data.combo=this.hasFieldFlag(r.AnnotationFieldFlag.COMBO);this.data.multiSelect=this.hasFieldFlag(r.AnnotationFieldFlag.MULTISELECT)}}class y extends f{constructor(e){super(e);const t=e.dict;this.data.annotationType=r.AnnotationType.TEXT;if(this.data.hasAppearance)this.data.name="NoIcon";else{this.data.rect[1]=this.data.rect[3]-22;this.data.rect[2]=this.data.rect[0]+22;this.data.name=t.has("Name")?t.get("Name").name:"Note"}if(t.has("State")){this.data.state=t.get("State")||null;this.data.stateModel=t.get("StateModel")||null}else{this.data.state=null;this.data.stateModel=null}}}class v extends u{constructor(e){super(e);this.data.annotationType=r.AnnotationType.LINK;const t=h(e.dict,this.rectangle);t&&(this.data.quadPoints=t);i.Catalog.parseDestDictionary({destDict:e.dict,resultObj:this.data,docBaseUrl:e.pdfManager.docBaseUrl})}}class w extends u{constructor(e){super(e);this.data.annotationType=r.AnnotationType.POPUP;let t=e.dict.get("Parent");if(!t){(0,r.warn)("Popup annotation has a missing or invalid parent annotation.");return}const a=t.get("Subtype");this.data.parentType=(0,n.isName)(a)?a.name:null;const i=e.dict.getRaw("Parent");this.data.parentId=(0,n.isRef)(i)?i.toString():null;const s=t.get("RT");(0,n.isName)(s,r.AnnotationReplyType.GROUP)&&(t=t.get("IRT"));if(t.has("M")){this.setModificationDate(t.get("M"));this.data.modificationDate=this.modificationDate}else this.data.modificationDate=null;if(t.has("C")){this.setColor(t.getArray("C"));this.data.color=this.color}else this.data.color=null;if(!this.viewable){const e=t.get("F");this._isViewable(e)&&this.setFlags(e)}this.data.title=(0,r.stringToPDFString)(t.get("T")||"");this.data.contents=(0,r.stringToPDFString)(t.get("Contents")||"")}}class k extends f{constructor(e){super(e);this.data.annotationType=r.AnnotationType.FREETEXT}}class S extends f{constructor(e){super(e);this.data.annotationType=r.AnnotationType.LINE;this.data.lineCoordinates=r.Util.normalizeRect(e.dict.getArray("L"))}}class C extends f{constructor(e){super(e);this.data.annotationType=r.AnnotationType.SQUARE}}class x extends f{constructor(e){super(e);this.data.annotationType=r.AnnotationType.CIRCLE}}class A extends f{constructor(e){super(e);this.data.annotationType=r.AnnotationType.POLYLINE;const t=e.dict.getArray("Vertices");this.data.vertices=[];for(let e=0,a=t.length;e<a;e+=2)this.data.vertices.push({x:t[e],y:t[e+1]})}}class I extends A{constructor(e){super(e);this.data.annotationType=r.AnnotationType.POLYGON}}class F extends f{constructor(e){super(e);this.data.annotationType=r.AnnotationType.CARET}}class T extends f{constructor(e){super(e);this.data.annotationType=r.AnnotationType.INK;const t=e.xref,a=e.dict.getArray("InkList");this.data.inkLists=[];for(let e=0,r=a.length;e<r;++e){this.data.inkLists.push([]);for(let r=0,i=a[e].length;r<i;r+=2)this.data.inkLists[e].push({x:t.fetchIfRef(a[e][r]),y:t.fetchIfRef(a[e][r+1])})}}}class E extends f{constructor(e){super(e);this.data.annotationType=r.AnnotationType.HIGHLIGHT;const t=h(e.dict,this.rectangle);t&&(this.data.quadPoints=t)}}class O extends f{constructor(e){super(e);this.data.annotationType=r.AnnotationType.UNDERLINE;const t=h(e.dict,this.rectangle);t&&(this.data.quadPoints=t)}}class P extends f{constructor(e){super(e);this.data.annotationType=r.AnnotationType.SQUIGGLY;const t=h(e.dict,this.rectangle);t&&(this.data.quadPoints=t)}}class B extends f{constructor(e){super(e);this.data.annotationType=r.AnnotationType.STRIKEOUT;const t=h(e.dict,this.rectangle);t&&(this.data.quadPoints=t)}}class D extends f{constructor(e){super(e);this.data.annotationType=r.AnnotationType.STAMP}}class N extends f{constructor(e){super(e);const t=new i.FileSpec(e.dict.get("FS"),e.xref);this.data.annotationType=r.AnnotationType.FILEATTACHMENT;this.data.file=t.serializable}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.OperatorList=void 0;var r=a(2),i=function(){function e(e,t,a,r,i){for(var n=e,s=0,o=t.length-1;s<o;s++){var c=t[s];n=n[c]||(n[c]=[])}n[t[t.length-1]]={checkFn:a,iterateFn:r,processFn:i}}var t=[];e(t,[r.OPS.save,r.OPS.transform,r.OPS.paintInlineImageXObject,r.OPS.restore],null,(function(e,t){var a=e.fnArray,i=(t-(e.iCurr-3))%4;switch(i){case 0:return a[t]===r.OPS.save;case 1:return a[t]===r.OPS.transform;case 2:return a[t]===r.OPS.paintInlineImageXObject;case 3:return a[t]===r.OPS.restore}throw new Error(`iterateInlineImageGroup - invalid pos: ${i}`)}),(function(e,t){var a=e.fnArray,i=e.argsArray,n=e.iCurr,s=n-3,o=n-2,c=n-1,l=Math.min(Math.floor((t-s)/4),200);if(l<10)return t-(t-s)%4;var h,u=0,d=[],f=0,g=1,m=1;for(h=0;h<l;h++){var p=i[o+(h<<2)],b=i[c+(h<<2)][0];if(g+b.width>1e3){u=Math.max(u,g);m+=f+2;g=0;f=0}d.push({transform:p,x:g,y:m,w:b.width,h:b.height});g+=b.width+2;f=Math.max(f,b.height)}var y=Math.max(u,g)+1,v=m+f+1,w=new Uint8ClampedArray(y*v*4),k=y<<2;for(h=0;h<l;h++){var S=i[c+(h<<2)][0].data,C=d[h].w<<2,x=0,A=d[h].x+d[h].y*y<<2;w.set(S.subarray(0,C),A-k);for(var I=0,F=d[h].h;I<F;I++){w.set(S.subarray(x,x+C),A);x+=C;A+=k}w.set(S.subarray(x-C,x),A);for(;A>=0;){S[A-4]=S[A];S[A-3]=S[A+1];S[A-2]=S[A+2];S[A-1]=S[A+3];S[A+C]=S[A+C-4];S[A+C+1]=S[A+C-3];S[A+C+2]=S[A+C-2];S[A+C+3]=S[A+C-1];A-=k}}a.splice(s,4*l,r.OPS.paintInlineImageXObjectGroup);i.splice(s,4*l,[{width:y,height:v,kind:r.ImageKind.RGBA_32BPP,data:w},d]);return s+1}));e(t,[r.OPS.save,r.OPS.transform,r.OPS.paintImageMaskXObject,r.OPS.restore],null,(function(e,t){var a=e.fnArray,i=(t-(e.iCurr-3))%4;switch(i){case 0:return a[t]===r.OPS.save;case 1:return a[t]===r.OPS.transform;case 2:return a[t]===r.OPS.paintImageMaskXObject;case 3:return a[t]===r.OPS.restore}throw new Error(`iterateImageMaskGroup - invalid pos: ${i}`)}),(function(e,t){var a,i=e.fnArray,n=e.argsArray,s=e.iCurr,o=s-3,c=s-2,l=s-1,h=Math.floor((t-o)/4);if((h=function(e,t,a,i){for(var n=e+2,s=0;s<t;s++){var o=i[n+4*s],c=1===o.length&&o[0];if(!c||1!==c.width||1!==c.height||c.data.length&&(1!==c.data.length||0!==c.data[0]))break;a[n+4*s]=r.OPS.paintSolidColorImageMask}return t-s}(o,h,i,n))<10)return t-(t-o)%4;var u,d,f=!1,g=n[l][0];if(0===n[c][1]&&0===n[c][2]){f=!0;var m=n[c][0],p=n[c][3];u=c+4;var b=l+4;for(a=1;a<h;a++,u+=4,b+=4){d=n[u];if(n[b][0]!==g||d[0]!==m||0!==d[1]||0!==d[2]||d[3]!==p){a<10?f=!1:h=a;break}}}if(f){h=Math.min(h,1e3);var y=new Float32Array(2*h);u=c;for(a=0;a<h;a++,u+=4){d=n[u];y[a<<1]=d[4];y[1+(a<<1)]=d[5]}i.splice(o,4*h,r.OPS.paintImageMaskXObjectRepeat);n.splice(o,4*h,[g,m,p,y])}else{h=Math.min(h,100);var v=[];for(a=0;a<h;a++){d=n[c+(a<<2)];var w=n[l+(a<<2)][0];v.push({data:w.data,width:w.width,height:w.height,transform:d})}i.splice(o,4*h,r.OPS.paintImageMaskXObjectGroup);n.splice(o,4*h,[v])}return o+1}));e(t,[r.OPS.save,r.OPS.transform,r.OPS.paintImageXObject,r.OPS.restore],(function(e){var t=e.argsArray,a=e.iCurr-2;return 0===t[a][1]&&0===t[a][2]}),(function(e,t){var a=e.fnArray,i=e.argsArray,n=(t-(e.iCurr-3))%4;switch(n){case 0:return a[t]===r.OPS.save;case 1:if(a[t]!==r.OPS.transform)return!1;var s=e.iCurr-2,o=i[s][0],c=i[s][3];return i[t][0]===o&&0===i[t][1]&&0===i[t][2]&&i[t][3]===c;case 2:if(a[t]!==r.OPS.paintImageXObject)return!1;var l=i[e.iCurr-1][0];return i[t][0]===l;case 3:return a[t]===r.OPS.restore}throw new Error(`iterateImageGroup - invalid pos: ${n}`)}),(function(e,t){var a=e.fnArray,i=e.argsArray,n=e.iCurr,s=n-3,o=n-2,c=i[n-1][0],l=i[o][0],h=i[o][3],u=Math.min(Math.floor((t-s)/4),1e3);if(u<3)return t-(t-s)%4;for(var d=new Float32Array(2*u),f=o,g=0;g<u;g++,f+=4){var m=i[f];d[g<<1]=m[4];d[1+(g<<1)]=m[5]}var p=[c,l,h,d];a.splice(s,4*u,r.OPS.paintImageXObjectRepeat);i.splice(s,4*u,p);return s+1}));e(t,[r.OPS.beginText,r.OPS.setFont,r.OPS.setTextMatrix,r.OPS.showText,r.OPS.endText],null,(function(e,t){var a=e.fnArray,i=e.argsArray,n=(t-(e.iCurr-4))%5;switch(n){case 0:return a[t]===r.OPS.beginText;case 1:return a[t]===r.OPS.setFont;case 2:return a[t]===r.OPS.setTextMatrix;case 3:if(a[t]!==r.OPS.showText)return!1;var s=e.iCurr-3,o=i[s][0],c=i[s][1];return i[t][0]===o&&i[t][1]===c;case 4:return a[t]===r.OPS.endText}throw new Error(`iterateShowTextGroup - invalid pos: ${n}`)}),(function(e,t){var a=e.fnArray,r=e.argsArray,i=e.iCurr,n=i-4,s=i-3,o=i-2,c=i-1,l=i,h=r[s][0],u=r[s][1],d=Math.min(Math.floor((t-n)/5),1e3);if(d<3)return t-(t-n)%5;var f=n;if(n>=4&&a[n-4]===a[s]&&a[n-3]===a[o]&&a[n-2]===a[c]&&a[n-1]===a[l]&&r[n-4][0]===h&&r[n-4][1]===u){d++;f-=5}for(var g=f+4,m=1;m<d;m++){a.splice(g,3);r.splice(g,3);g+=2}return g+1}));function a(e){this.queue=e;this.state=null;this.context={iCurr:0,fnArray:e.fnArray,argsArray:e.argsArray};this.match=null;this.lastProcessed=0}a.prototype={_optimize(){const e=this.queue.fnArray;let a=this.lastProcessed,r=e.length,i=this.state,n=this.match;if(!i&&!n&&a+1===r&&!t[e[a]]){this.lastProcessed=r;return}const s=this.context;for(;a<r;){if(n){if((0,n.iterateFn)(s,a)){a++;continue}a=(0,n.processFn)(s,a+1);r=e.length;n=null;i=null;if(a>=r)break}i=(i||t)[e[a]];if(i&&!Array.isArray(i)){s.iCurr=a;a++;if(!i.checkFn||(0,i.checkFn)(s)){n=i;i=null}else i=null}else a++}this.state=i;this.match=n;this.lastProcessed=a},push(e,t){this.queue.fnArray.push(e);this.queue.argsArray.push(t);this._optimize()},flush(){for(;this.match;){const e=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,e);this.match=null;this.state=null;this._optimize()}},reset(){this.state=null;this.match=null;this.lastProcessed=0}};return a}(),n=function(){function e(e){this.queue=e}e.prototype={push(e,t){this.queue.fnArray.push(e);this.queue.argsArray.push(t)},flush(){},reset(){}};return e}(),s=function(){function e(e,t,a){this._streamSink=t;this.fnArray=[];this.argsArray=[];this.optimizer=t&&"oplist"!==e?new i(this):new n(this);this.dependencies=Object.create(null);this._totalLength=0;this.pageIndex=a;this.intent=e;this.weight=0;this._resolved=t?null:Promise.resolve()}e.prototype={get length(){return this.argsArray.length},get ready(){return this._resolved||this._streamSink.ready},get totalLength(){return this._totalLength+this.length},addOp(e,t){this.optimizer.push(e,t);this.weight++;this._streamSink&&(this.weight>=1e3||this.weight>=995&&(e===r.OPS.restore||e===r.OPS.endText))&&this.flush()},addDependency(e){if(!(e in this.dependencies)){this.dependencies[e]=!0;this.addOp(r.OPS.dependency,[e])}},addDependencies(e){for(var t in e)this.addDependency(t)},addOpList(e){Object.assign(this.dependencies,e.dependencies);for(var t=0,a=e.length;t<a;t++)this.addOp(e.fnArray[t],e.argsArray[t])},getIR(){return{fnArray:this.fnArray,argsArray:this.argsArray,length:this.length}},get _transfers(){const e=[],{fnArray:t,argsArray:a,length:i}=this;for(let n=0;n<i;n++)switch(t[n]){case r.OPS.paintInlineImageXObject:case r.OPS.paintInlineImageXObjectGroup:case r.OPS.paintImageMaskXObject:const t=a[n][0];t.cached||e.push(t.data.buffer)}return e},flush(e=!1){this.optimizer.flush();const t=this.length;this._totalLength+=t;this._streamSink.enqueue({fnArray:this.fnArray,argsArray:this.argsArray,lastChunk:e,length:t},1,this._transfers);this.dependencies=Object.create(null);this.fnArray.length=0;this.argsArray.length=0;this.weight=0;this.optimizer.reset()}};return e}();t.OperatorList=s},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.PartialEvaluator=void 0;var r=a(2),i=a(26),n=a(4),s=a(27),o=a(30),c=a(7),l=a(33),h=a(32),u=a(36),d=a(10),f=a(37),g=a(22),m=a(11),p=a(31),b=a(38),y=a(39),v=a(17),w=a(41),k=a(42),S=a(24),C=a(43),x=function(){const e={forceDataSchema:!1,maxImageSize:-1,disableFontFace:!1,nativeImageDecoderSupport:r.NativeImageDecoding.DECODE,ignoreErrors:!1,isEvalSupported:!0};function t({xref:t,handler:a,pageIndex:i,idFactory:n,fontCache:s,builtInCMapCache:o,options:c=null,pdfFunctionFactory:l}){this.xref=t;this.handler=a;this.pageIndex=i;this.idFactory=n;this.fontCache=s;this.builtInCMapCache=o;this.options=c||e;this.pdfFunctionFactory=l;this.parsingType3Font=!1;this.fetchBuiltInCMap=async e=>{if(this.builtInCMapCache.has(e))return this.builtInCMapCache.get(e);const t=this.handler.sendWithStream("FetchBuiltInCMap",{name:e}).getReader(),a=await new Promise((function(e,a){!function r(){t.read().then((function({value:t,done:a}){if(!a){e(t);r()}}),a)}()}));a.compressionType!==r.CMapCompressionType.NONE&&this.builtInCMapCache.set(e,a);return a}}function a(){this.reset()}a.prototype={check:function(){if(++this.checked<100)return!1;this.checked=0;return this.endTime<=Date.now()},reset:function(){this.endTime=Date.now()+20;this.checked=0}};function d(e,t=!1){if(Array.isArray(e)){for(let t=0,a=e.length;t<a;t++){const a=d(e[t],!0);if(a)return a}(0,r.warn)(`Unsupported blend mode Array: ${e}`);return"source-over"}if(!(0,n.isName)(e))return t?null:"source-over";switch(e.name){case"Normal":case"Compatible":return"source-over";case"Multiply":return"multiply";case"Screen":return"screen";case"Overlay":return"overlay";case"Darken":return"darken";case"Lighten":return"lighten";case"ColorDodge":return"color-dodge";case"ColorBurn":return"color-burn";case"HardLight":return"hard-light";case"SoftLight":return"soft-light";case"Difference":return"difference";case"Exclusion":return"exclusion";case"Hue":return"hue";case"Saturation":return"saturation";case"Color":return"color";case"Luminosity":return"luminosity"}if(t)return null;(0,r.warn)(`Unsupported blend mode: ${e.name}`);return"source-over"}var x=Promise.resolve();t.prototype={clone(t=e){var a=Object.create(this);a.options=t;return a},hasBlendModes:function(e){if(!(e instanceof n.Dict))return!1;var t=Object.create(null);e.objId&&(t[e.objId]=!0);for(var a=[e],i=this.xref;a.length;){var s=a.shift(),o=s.get("ExtGState");if(o instanceof n.Dict){var l=o.getKeys();for(let e=0,a=l.length;e<a;e++){const a=l[e];let s=o.getRaw(a);if(s instanceof n.Ref){if(t[s.toString()])continue;try{s=i.fetch(s)}catch(e){if(e instanceof c.MissingDataException)throw e;if(this.options.ignoreErrors){s instanceof n.Ref&&(t[s.toString()]=!0);this.handler.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.unknown});(0,r.warn)(`hasBlendModes - ignoring ExtGState: "${e}".`);continue}throw e}}if(!(s instanceof n.Dict))continue;s.objId&&(t[s.objId]=!0);const h=s.get("BM");if(h instanceof n.Name){if("Normal"!==h.name)return!0}else if(void 0!==h&&Array.isArray(h))for(let e=0,t=h.length;e<t;e++)if(h[e]instanceof n.Name&&"Normal"!==h[e].name)return!0}}var h=s.get("XObject");if(h instanceof n.Dict){var u=h.getKeys();for(let e=0,s=u.length;e<s;e++){const s=u[e];var d=h.getRaw(s);if(d instanceof n.Ref){if(t[d.toString()])continue;try{d=i.fetch(d)}catch(e){if(e instanceof c.MissingDataException)throw e;if(this.options.ignoreErrors){d instanceof n.Ref&&(t[d.toString()]=!0);this.handler.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.unknown});(0,r.warn)(`hasBlendModes - ignoring XObject: "${e}".`);continue}throw e}}if((0,n.isStream)(d)){if(d.dict.objId){if(t[d.dict.objId])continue;t[d.dict.objId]=!0}var f=d.dict.get("Resources");if(f instanceof n.Dict&&(!f.objId||!t[f.objId])){a.push(f);f.objId&&(t[f.objId]=!0)}}}}}return!1},async buildFormXObject(e,t,a,i,s,o){var c=t.dict,l=c.getArray("Matrix"),h=c.getArray("BBox");h=Array.isArray(h)&&4===h.length?r.Util.normalizeRect(h):null;var u=c.get("Group");if(u){var d={matrix:l,bbox:h,smask:a,isolated:!1,knockout:!1},f=u.get("S"),m=null;if((0,n.isName)(f,"Transparency")){d.isolated=u.get("I")||!1;d.knockout=u.get("K")||!1;u.has("CS")&&(m=await this.parseColorSpace({cs:u.get("CS"),resources:e}))}if(a&&a.backdrop){m=m||g.ColorSpace.singletons.rgb;a.backdrop=m.getRgb(a.backdrop,0)}i.addOp(r.OPS.beginGroup,[d])}i.addOp(r.OPS.paintFormXObjectBegin,[l,h]);return this.getOperatorList({stream:t,task:s,resources:c.get("Resources")||e,operatorList:i,initialState:o}).then((function(){i.addOp(r.OPS.paintFormXObjectEnd,[]);u&&i.addOp(r.OPS.endGroup,[d])}))},async buildPaintImageXObject({resources:e,image:t,isInline:a=!1,operatorList:i,cacheKey:n,imageCache:s,forceDisableNativeImageDecoder:o=!1}){var c=t.dict,l=c.get("Width","W"),h=c.get("Height","H");if(!(l&&(0,r.isNum)(l)&&h&&(0,r.isNum)(h))){(0,r.warn)("Image dimensions are missing, or not numbers.");return}var u,d,f=this.options.maxImageSize;if(-1!==f&&l*h>f){(0,r.warn)("Image exceeded maximum allowed size and was removed.");return}if(c.get("ImageMask","IM")||!1){var g=c.get("Width","W"),p=c.get("Height","H"),b=g+7>>3,y=t.getBytes(b*p,!0),w=c.getArray("Decode","D");(u=C.PDFImage.createMask({imgArray:y,width:g,height:p,imageIsFromDecodeStream:t instanceof m.DecodeStream,inverseDecode:!!w&&w[0]>0})).cached=!!n;d=[u];i.addOp(r.OPS.paintImageMaskXObject,d);n&&(s[n]={fn:r.OPS.paintImageMaskXObject,args:d});return}var S=c.get("SMask","SM")||!1,x=c.get("Mask")||!1;if(a&&!S&&!x&&!(t instanceof v.JpegStream)&&l+h<200){u=new C.PDFImage({xref:this.xref,res:e,image:t,isInline:a,pdfFunctionFactory:this.pdfFunctionFactory}).createImageData(!0);i.addOp(r.OPS.paintInlineImageXObject,[u]);return}const A=o?r.NativeImageDecoding.NONE:this.options.nativeImageDecoderSupport;let I=`img_${this.idFactory.createObjId()}`;if(this.parsingType3Font){(0,r.assert)(A===r.NativeImageDecoding.NONE,"Type3 image resources should be completely decoded in the worker.");I=`${this.idFactory.getDocId()}_type3res_${I}`}if(A!==r.NativeImageDecoding.NONE&&!S&&!x&&t instanceof v.JpegStream&&k.NativeImageDecoder.isSupported(t,this.xref,e,this.pdfFunctionFactory)&&t.maybeValidDimensions)return this.handler.sendWithPromise("obj",[I,this.pageIndex,"JpegStream",t.getIR(this.options.forceDataSchema)]).then((function(){i.addDependency(I);d=[I,l,h];i.addOp(r.OPS.paintJpegXObject,d);n&&(s[n]={fn:r.OPS.paintJpegXObject,args:d})}),o=>{(0,r.warn)("Native JPEG decoding failed -- trying to recover: "+(o&&o.message));return this.buildPaintImageXObject({resources:e,image:t,isInline:a,operatorList:i,cacheKey:n,imageCache:s,forceDisableNativeImageDecoder:!0})});var F=null;A===r.NativeImageDecoding.DECODE&&(t instanceof v.JpegStream||x instanceof v.JpegStream||S instanceof v.JpegStream)&&(F=new k.NativeImageDecoder({xref:this.xref,resources:e,handler:this.handler,forceDataSchema:this.options.forceDataSchema,pdfFunctionFactory:this.pdfFunctionFactory}));i.addDependency(I);d=[I,l,h];const T=C.PDFImage.buildImage({handler:this.handler,xref:this.xref,res:e,image:t,isInline:a,nativeDecoder:F,pdfFunctionFactory:this.pdfFunctionFactory}).then(e=>{var t=e.createImageData(!1);if(this.parsingType3Font)return this.handler.sendWithPromise("commonobj",[I,"FontType3Res",t],[t.data.buffer]);this.handler.send("obj",[I,this.pageIndex,"Image",t],[t.data.buffer])}).catch(e=>{(0,r.warn)("Unable to decode image: "+e);if(this.parsingType3Font)return this.handler.sendWithPromise("commonobj",[I,"FontType3Res",null]);this.handler.send("obj",[I,this.pageIndex,"Image",null])});this.parsingType3Font&&await T;i.addOp(r.OPS.paintImageXObject,d);n&&(s[n]={fn:r.OPS.paintImageXObject,args:d})},handleSMask:function(e,t,a,r,i){var n=e.get("G"),s={subtype:e.get("S").name,backdrop:e.get("BC")},o=e.get("TR");if((0,y.isPDFFunction)(o)){const e=this.pdfFunctionFactory.create(o);for(var c=new Uint8Array(256),l=new Float32Array(1),h=0;h<256;h++){l[0]=h/255;e(l,0,l,0);c[h]=255*l[0]|0}s.transferMap=c}return this.buildFormXObject(t,n,s,a,r,i.state.clone())},handleTilingType(e,t,a,i,s,o,c){const l=new S.OperatorList,h=[s.get("Resources"),a],d=n.Dict.merge(this.xref,h);return this.getOperatorList({stream:i,task:c,resources:d,operatorList:l}).then((function(){return(0,u.getTilingPatternIR)({fnArray:l.fnArray,argsArray:l.argsArray},s,t)})).then((function(t){o.addDependencies(l.dependencies);o.addOp(e,t)}),e=>{if(!(e instanceof r.AbortException)){if(!this.options.ignoreErrors)throw e;this.handler.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.unknown});(0,r.warn)(`handleTilingType - ignoring pattern: "${e}".`)}})},handleSetFont:function(e,t,a,i,n,o){var c;t&&(c=(t=t.slice())[0].name);return this.loadFont(c,a,e).then(t=>t.font.isType3Font?t.loadType3Data(this,e,i,n).then((function(){return t})).catch(e=>{this.handler.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.font});return new A("g_font_error",new s.ErrorFont("Type3 font load error: "+e),t.font)}):t).then(e=>{o.font=e.font;e.send(this.handler);return e.loadedName})},handleText(e,a){const i=a.font,n=i.charsToGlyphs(e);if(i.data){(!!(a.textRenderingMode&r.TextRenderingMode.ADD_TO_PATH_FLAG)||"Pattern"===a.fillColorSpace.name||i.disableFontFace||this.options.disableFontFace)&&t.buildFontPaths(i,n,this.handler)}return n},ensureStateFont(e){if(e.font)return;const t=new r.FormatError("Missing setFont (Tf) operator before text rendering operator.");if(!this.options.ignoreErrors)throw t;this.handler.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.font});(0,r.warn)(`ensureStateFont: "${t}".`)},setGState:function(e,t,a,i,s){for(var o=[],c=t.getKeys(),l=Promise.resolve(),h=0,u=c.length;h<u;h++){const u=c[h],f=t.get(u);switch(u){case"Type":break;case"LW":case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":o.push([u,f]);break;case"Font":l=l.then(()=>this.handleSetFont(e,null,f[0],a,i,s.state).then((function(e){a.addDependency(e);o.push([u,[e,f[1]]])})));break;case"BM":o.push([u,d(f)]);break;case"SMask":if((0,n.isName)(f,"None")){o.push([u,!1]);break}if((0,n.isDict)(f)){l=l.then(()=>this.handleSMask(f,e,a,i,s));o.push([u,!0])}else(0,r.warn)("Unsupported SMask type");break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":(0,r.info)("graphic state operator "+u);break;default:(0,r.info)("Unknown graphic state operator "+u)}}return l.then((function(){o.length>0&&a.addOp(r.OPS.setGState,[o])}))},loadFont:function(e,a,i){function o(){return Promise.resolve(new A("g_font_error",new s.ErrorFont("Font "+e+" is not available"),a))}var c,l=this.xref;if(a){if(!(0,n.isRef)(a))throw new r.FormatError('The "font" object should be a reference.');c=a}else{var h=i.get("Font");h&&(c=h.getRaw(e))}if(!c){const i=`Font "${e||a&&a.toString()}" is not available`;if(!this.options.ignoreErrors&&!this.parsingType3Font){(0,r.warn)(`${i}.`);return o()}this.handler.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.font});(0,r.warn)(`${i} -- attempting to fallback to a default font.`);c=t.getFallbackFontDict()}if(this.fontCache.has(c))return this.fontCache.get(c);a=l.fetchIfRef(c);if(!(0,n.isDict)(a))return o();if(a.translated)return a.translated;var u=(0,r.createPromiseCapability)(),d=this.preEvaluateFont(a);const{descriptor:f,hash:g}=d;var m,p,b=(0,n.isRef)(c);b&&(m=c.toString());if(g&&(0,n.isDict)(f)){f.fontAliases||(f.fontAliases=Object.create(null));var y=f.fontAliases;if(y[g]){var v=y[g].aliasRef;if(b&&v&&this.fontCache.has(v)){this.fontCache.putAlias(c,v);return this.fontCache.get(c)}}else y[g]={fontID:s.Font.getFontID()};b&&(y[g].aliasRef=c);m=y[g].fontID}if(b)this.fontCache.put(c,u.promise);else{m||(m=this.idFactory.createObjId());this.fontCache.put(`id_${m}`,u.promise)}(0,r.assert)(m,'The "fontID" must be defined.');a.loadedName=`${this.idFactory.getDocId()}_f${m}`;a.translated=u.promise;try{p=this.translateFont(d)}catch(e){p=Promise.reject(e)}p.then((function(e){if(void 0!==e.fontType){l.stats.fontTypes[e.fontType]=!0}u.resolve(new A(a.loadedName,e,a))})).catch(e=>{this.handler.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.font});try{var t=f&&f.get("FontFile3"),i=t&&t.get("Subtype"),n=(0,s.getFontType)(d.type,i&&i.name);l.stats.fontTypes[n]=!0}catch(e){}u.resolve(new A(a.loadedName,new s.ErrorFont(e instanceof Error?e.message:e),a))});return u.promise},buildPath(e,t,a,i=!1){var n=e.length-1;a||(a=[]);if(n<0||e.fnArray[n]!==r.OPS.constructPath){if(i){(0,r.warn)(`Encountered path operator "${t}" inside of a text object.`);e.addOp(r.OPS.save,null)}e.addOp(r.OPS.constructPath,[[t],a]);i&&e.addOp(r.OPS.restore,null)}else{var s=e.argsArray[n];s[0].push(t);Array.prototype.push.apply(s[1],a)}},parseColorSpace({cs:e,resources:t}){return new Promise(a=>{a(g.ColorSpace.parse(e,this.xref,t,this.pdfFunctionFactory))}).catch(e=>{if(e instanceof r.AbortException)return null;if(this.options.ignoreErrors){this.handler.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.unknown});(0,r.warn)(`parseColorSpace - ignoring ColorSpace: "${e}".`);return null}throw e})},async handleColorN(e,t,a,i,s,o,c){var l,h=a[a.length-1];if((0,n.isName)(h)&&(l=s.get(h.name))){var d=(0,n.isStream)(l)?l.dict:l,f=d.get("PatternType");if(1===f){var g=i.base?i.base.getRgb(a,0):null;return this.handleTilingType(t,g,o,l,d,e,c)}if(2===f){var m=d.get("Shading"),p=d.getArray("Matrix");l=u.Pattern.parseShading(m,p,this.xref,o,this.handler,this.pdfFunctionFactory);e.addOp(t,l.getIR());return}throw new r.FormatError(`Unknown PatternType: ${f}`)}throw new r.FormatError(`Unknown PatternName: ${h}`)},getOperatorList({stream:e,task:t,resources:i,operatorList:s,initialState:o=null}){i=i||n.Dict.empty;o=o||new T;if(!s)throw new Error('getOperatorList: missing "operatorList" parameter');var c=this,l=this.xref;let h=!1;var d=Object.create(null),f=i.get("XObject")||n.Dict.empty,m=i.get("Pattern")||n.Dict.empty,p=new I(o),b=new E(e,l,p),y=new a;function v(e){for(var t=0,a=b.savedStatesDepth;t<a;t++)s.addOp(r.OPS.restore,[])}return new Promise((function e(a,o){const w=function(t){Promise.all([t,s.ready]).then((function(){try{e(a,o)}catch(e){o(e)}}),o)};t.ensureNotTerminated();y.reset();for(var k,S,C,A,I={};!(k=y.check());){I.args=null;if(!b.read(I))break;var F=I.args,T=I.fn;switch(0|T){case r.OPS.paintXObject:var E=F[0].name;if(E&&void 0!==d[E]){s.addOp(d[E].fn,d[E].args);F=null;continue}w(new Promise((function(e,a){if(!E)throw new r.FormatError("XObject must be referred to by name.");const o=f.get(E);if(!o){s.addOp(T,F);e();return}if(!(0,n.isStream)(o))throw new r.FormatError("XObject should be a stream");const l=o.dict.get("Subtype");if(!(0,n.isName)(l))throw new r.FormatError("XObject should have a Name subtype");if("Form"!==l.name)if("Image"!==l.name){if("PS"!==l.name)throw new r.FormatError(`Unhandled XObject subtype ${l.name}`);(0,r.info)("Ignored XObject subtype PS");e()}else c.buildPaintImageXObject({resources:i,image:o,operatorList:s,cacheKey:E,imageCache:d}).then(e,a);else{p.save();c.buildFormXObject(i,o,null,s,t,p.state.clone()).then((function(){p.restore();e()}),a)}})).catch((function(e){if(!(e instanceof r.AbortException)){if(!c.options.ignoreErrors)throw e;c.handler.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.unknown});(0,r.warn)(`getOperatorList - ignoring XObject: "${e}".`)}})));return;case r.OPS.setFont:var O=F[1];w(c.handleSetFont(i,F,null,s,t,p.state).then((function(e){s.addDependency(e);s.addOp(r.OPS.setFont,[e,O])})));return;case r.OPS.beginText:h=!0;break;case r.OPS.endText:h=!1;break;case r.OPS.endInlineImage:var P=F[0].cacheKey;if(P){var B=d[P];if(void 0!==B){s.addOp(B.fn,B.args);F=null;continue}}w(c.buildPaintImageXObject({resources:i,image:F[0],isInline:!0,operatorList:s,cacheKey:P,imageCache:d}));return;case r.OPS.showText:if(!p.state.font){c.ensureStateFont(p.state);continue}F[0]=c.handleText(F[0],p.state);break;case r.OPS.showSpacedText:if(!p.state.font){c.ensureStateFont(p.state);continue}var D=F[0],N=[],M=D.length,L=p.state;for(S=0;S<M;++S){var R=D[S];(0,r.isString)(R)?Array.prototype.push.apply(N,c.handleText(R,L)):(0,r.isNum)(R)&&N.push(R)}F[0]=N;T=r.OPS.showText;break;case r.OPS.nextLineShowText:if(!p.state.font){c.ensureStateFont(p.state);continue}s.addOp(r.OPS.nextLine);F[0]=c.handleText(F[0],p.state);T=r.OPS.showText;break;case r.OPS.nextLineSetSpacingShowText:if(!p.state.font){c.ensureStateFont(p.state);continue}s.addOp(r.OPS.nextLine);s.addOp(r.OPS.setWordSpacing,[F.shift()]);s.addOp(r.OPS.setCharSpacing,[F.shift()]);F[0]=c.handleText(F[0],p.state);T=r.OPS.showText;break;case r.OPS.setTextRenderingMode:p.state.textRenderingMode=F[0];break;case r.OPS.setFillColorSpace:w(c.parseColorSpace({cs:F[0],resources:i}).then((function(e){e&&(p.state.fillColorSpace=e)})));return;case r.OPS.setStrokeColorSpace:w(c.parseColorSpace({cs:F[0],resources:i}).then((function(e){e&&(p.state.strokeColorSpace=e)})));return;case r.OPS.setFillColor:A=p.state.fillColorSpace;F=A.getRgb(F,0);T=r.OPS.setFillRGBColor;break;case r.OPS.setStrokeColor:A=p.state.strokeColorSpace;F=A.getRgb(F,0);T=r.OPS.setStrokeRGBColor;break;case r.OPS.setFillGray:p.state.fillColorSpace=g.ColorSpace.singletons.gray;F=g.ColorSpace.singletons.gray.getRgb(F,0);T=r.OPS.setFillRGBColor;break;case r.OPS.setStrokeGray:p.state.strokeColorSpace=g.ColorSpace.singletons.gray;F=g.ColorSpace.singletons.gray.getRgb(F,0);T=r.OPS.setStrokeRGBColor;break;case r.OPS.setFillCMYKColor:p.state.fillColorSpace=g.ColorSpace.singletons.cmyk;F=g.ColorSpace.singletons.cmyk.getRgb(F,0);T=r.OPS.setFillRGBColor;break;case r.OPS.setStrokeCMYKColor:p.state.strokeColorSpace=g.ColorSpace.singletons.cmyk;F=g.ColorSpace.singletons.cmyk.getRgb(F,0);T=r.OPS.setStrokeRGBColor;break;case r.OPS.setFillRGBColor:p.state.fillColorSpace=g.ColorSpace.singletons.rgb;F=g.ColorSpace.singletons.rgb.getRgb(F,0);break;case r.OPS.setStrokeRGBColor:p.state.strokeColorSpace=g.ColorSpace.singletons.rgb;F=g.ColorSpace.singletons.rgb.getRgb(F,0);break;case r.OPS.setFillColorN:if("Pattern"===(A=p.state.fillColorSpace).name){w(c.handleColorN(s,r.OPS.setFillColorN,F,A,m,i,t));return}F=A.getRgb(F,0);T=r.OPS.setFillRGBColor;break;case r.OPS.setStrokeColorN:if("Pattern"===(A=p.state.strokeColorSpace).name){w(c.handleColorN(s,r.OPS.setStrokeColorN,F,A,m,i,t));return}F=A.getRgb(F,0);T=r.OPS.setStrokeRGBColor;break;case r.OPS.shadingFill:var U=i.get("Shading");if(!U)throw new r.FormatError("No shading resource found");var q=U.get(F[0].name);if(!q)throw new r.FormatError("No shading object found");var j=u.Pattern.parseShading(q,null,l,i,c.handler,c.pdfFunctionFactory).getIR();F=[j];T=r.OPS.shadingFill;break;case r.OPS.setGState:var _=F[0],z=i.get("ExtGState");if(!(0,n.isDict)(z)||!z.has(_.name))break;var H=z.get(_.name);w(c.setGState(i,H,s,t,p));return;case r.OPS.moveTo:case r.OPS.lineTo:case r.OPS.curveTo:case r.OPS.curveTo2:case r.OPS.curveTo3:case r.OPS.closePath:case r.OPS.rectangle:c.buildPath(s,T,F,h);continue;case r.OPS.markPoint:case r.OPS.markPointProps:case r.OPS.beginMarkedContent:case r.OPS.beginMarkedContentProps:case r.OPS.endMarkedContent:case r.OPS.beginCompat:case r.OPS.endCompat:continue;default:if(null!==F){for(S=0,C=F.length;S<C&&!(F[S]instanceof n.Dict);S++);if(S<C){(0,r.warn)("getOperatorList - ignoring operator: "+T);continue}}}s.addOp(T,F)}if(k)w(x);else{v();a()}})).catch(e=>{if(!(e instanceof r.AbortException)){if(!this.options.ignoreErrors)throw e;this.handler.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.unknown});(0,r.warn)(`getOperatorList - ignoring errors during "${t.name}" `+`task: "${e}".`);v()}})},getTextContent({stream:e,task:t,resources:i,stateManager:s=null,normalizeWhitespace:o=!1,combineTextItems:c=!1,sink:h,seenStyles:u=Object.create(null)}){i=i||n.Dict.empty;s=s||new I(new F);var d,g=/\s/g,m={items:[],styles:Object.create(null)},p={initialized:!1,str:[],width:0,height:0,vertical:!1,lastAdvanceWidth:0,lastAdvanceHeight:0,textAdvanceScale:0,spaceWidth:0,fakeSpaceMin:1/0,fakeMultiSpaceMin:1/0,fakeMultiSpaceMax:-0,textRunBreakAllowed:!1,transform:null,fontName:null},b=this,y=this.xref,v=null,w=Object.create(null),k=new E(e,y,s);function S(){if(p.initialized)return p;var e=d.font;if(!(e.loadedName in u)){u[e.loadedName]=!0;m.styles[e.loadedName]={fontFamily:e.fallbackName,ascent:e.ascent,descent:e.descent,vertical:!!e.vertical}}p.fontName=e.loadedName;var t=[d.fontSize*d.textHScale,0,0,d.fontSize,0,d.textRise];if(e.isType3Font&&d.fontSize<=1&&!(0,r.isArrayEqual)(d.fontMatrix,r.FONT_IDENTITY_MATRIX)){const a=e.bbox[3]-e.bbox[1];a>0&&(t[3]*=a*d.fontMatrix[3])}var a=r.Util.transform(d.ctm,r.Util.transform(d.textMatrix,t));p.transform=a;if(e.vertical){p.width=Math.sqrt(a[0]*a[0]+a[1]*a[1]);p.height=0;p.vertical=!0}else{p.width=0;p.height=Math.sqrt(a[2]*a[2]+a[3]*a[3]);p.vertical=!1}var i=d.textLineMatrix[0],n=d.textLineMatrix[1],s=Math.sqrt(i*i+n*n);i=d.ctm[0];n=d.ctm[1];var o=Math.sqrt(i*i+n*n);p.textAdvanceScale=o*s;p.lastAdvanceWidth=0;p.lastAdvanceHeight=0;var c=e.spaceWidth/1e3*d.fontSize;if(c){p.spaceWidth=c;p.fakeSpaceMin=.3*c;p.fakeMultiSpaceMin=1.5*c;p.fakeMultiSpaceMax=4*c;p.textRunBreakAllowed=!e.isMonospace}else{p.spaceWidth=0;p.fakeSpaceMin=1/0;p.fakeMultiSpaceMin=1/0;p.fakeMultiSpaceMax=0;p.textRunBreakAllowed=!1}p.initialized=!0;return p}function C(e){for(var t,a=0,r=e.length;a<r&&(t=e.charCodeAt(a))>=32&&t<=127;)a++;return a<r?e.replace(g," "):e}function A(e,t){return b.loadFont(e,t,i).then((function(e){d.font=e.font;d.fontMatrix=e.font.fontMatrix||r.FONT_IDENTITY_MATRIX}))}function T(e){for(var t=d.font,a=S(),r=0,i=0,n=t.charsToGlyphs(e),s=0;s<n.length;s++){var o=n[s],c=null;c=t.vertical&&o.vmetric?o.vmetric[0]:o.width;var h=o.unicode,u=(0,l.getNormalizedUnicodes)();void 0!==u[h]&&(h=u[h]);h=(0,l.reverseIfRtl)(h);var f=d.charSpacing;if(o.isSpace){var g=d.wordSpacing;f+=g;g>0&&O(g,a.str)}var m=0,p=0;if(t.vertical){i+=p=c*d.fontMatrix[0]*d.fontSize+f}else{r+=m=(c*d.fontMatrix[0]*d.fontSize+f)*d.textHScale}d.translateTextMatrix(m,p);a.str.push(h)}if(t.vertical){a.lastAdvanceHeight=i;a.height+=Math.abs(i)}else{a.lastAdvanceWidth=r;a.width+=r}return a}function O(e,t){if(!(e<p.fakeSpaceMin))if(e<p.fakeMultiSpaceMin)t.push(" ");else for(var a=Math.round(e/p.spaceWidth);a-- >0;)t.push(" ")}function P(){if(p.initialized){p.vertical?p.height*=p.textAdvanceScale:p.width*=p.textAdvanceScale;m.items.push((t=(e=p).str.join(""),a=(0,f.bidi)(t,-1,e.vertical),{str:o?C(a.str):a.str,dir:a.dir,width:e.width,height:e.height,transform:e.transform,fontName:e.fontName}));var e,t,a;p.initialized=!1;p.str.length=0}}function B(){const e=m.items.length;if(e>0){h.enqueue(m,e);m.items=[];m.styles=Object.create(null)}}var D=new a;return new Promise((function e(a,l){const f=function(t){B();Promise.all([t,h.ready]).then((function(){try{e(a,l)}catch(e){l(e)}}),l)};t.ensureNotTerminated();D.reset();for(var g,y={},C=[];!(g=D.check());){C.length=0;y.args=C;if(!k.read(y))break;d=s.state;var F,E=y.fn;C=y.args;switch(0|E){case r.OPS.setFont:var N=C[0].name,M=C[1];if(d.font&&N===d.fontName&&M===d.fontSize)break;P();d.fontName=N;d.fontSize=M;f(A(N,null));return;case r.OPS.setTextRise:P();d.textRise=C[0];break;case r.OPS.setHScale:P();d.textHScale=C[0]/100;break;case r.OPS.setLeading:P();d.leading=C[0];break;case r.OPS.moveText:var L=!!d.font&&0===(d.font.vertical?C[0]:C[1]);F=C[0]-C[1];if(c&&L&&p.initialized&&F>0&&F<=p.fakeMultiSpaceMax){d.translateTextLineMatrix(C[0],C[1]);p.width+=C[0]-p.lastAdvanceWidth;p.height+=C[1]-p.lastAdvanceHeight;O(C[0]-p.lastAdvanceWidth-(C[1]-p.lastAdvanceHeight),p.str);break}P();d.translateTextLineMatrix(C[0],C[1]);d.textMatrix=d.textLineMatrix.slice();break;case r.OPS.setLeadingMoveText:P();d.leading=-C[1];d.translateTextLineMatrix(C[0],C[1]);d.textMatrix=d.textLineMatrix.slice();break;case r.OPS.nextLine:P();d.carriageReturn();break;case r.OPS.setTextMatrix:F=d.calcTextLineMatrixAdvance(C[0],C[1],C[2],C[3],C[4],C[5]);if(c&&null!==F&&p.initialized&&F.value>0&&F.value<=p.fakeMultiSpaceMax){d.translateTextLineMatrix(F.width,F.height);p.width+=F.width-p.lastAdvanceWidth;p.height+=F.height-p.lastAdvanceHeight;O(F.width-p.lastAdvanceWidth-(F.height-p.lastAdvanceHeight),p.str);break}P();d.setTextMatrix(C[0],C[1],C[2],C[3],C[4],C[5]);d.setTextLineMatrix(C[0],C[1],C[2],C[3],C[4],C[5]);break;case r.OPS.setCharSpacing:d.charSpacing=C[0];break;case r.OPS.setWordSpacing:d.wordSpacing=C[0];break;case r.OPS.beginText:P();d.textMatrix=r.IDENTITY_MATRIX.slice();d.textLineMatrix=r.IDENTITY_MATRIX.slice();break;case r.OPS.showSpacedText:if(!s.state.font){b.ensureStateFont(s.state);continue}for(var R,U=C[0],q=0,j=U.length;q<j;q++)if("string"==typeof U[q])T(U[q]);else if((0,r.isNum)(U[q])){S();F=U[q]*d.fontSize/1e3;var _=!1;if(d.font.vertical){R=F;d.translateTextMatrix(0,R);(_=p.textRunBreakAllowed&&F>p.fakeMultiSpaceMax)||(p.height+=R)}else{R=(F=-F)*d.textHScale;d.translateTextMatrix(R,0);(_=p.textRunBreakAllowed&&F>p.fakeMultiSpaceMax)||(p.width+=R)}_?P():F>0&&O(F,p.str)}break;case r.OPS.showText:if(!s.state.font){b.ensureStateFont(s.state);continue}T(C[0]);break;case r.OPS.nextLineShowText:if(!s.state.font){b.ensureStateFont(s.state);continue}P();d.carriageReturn();T(C[0]);break;case r.OPS.nextLineSetSpacingShowText:if(!s.state.font){b.ensureStateFont(s.state);continue}P();d.wordSpacing=C[0];d.charSpacing=C[1];d.carriageReturn();T(C[2]);break;case r.OPS.paintXObject:P();v||(v=i.get("XObject")||n.Dict.empty);var z=C[0].name;if(z&&void 0!==w[z])break;f(new Promise((function(e,a){if(!z)throw new r.FormatError("XObject must be referred to by name.");const l=v.get(z);if(!l){e();return}if(!(0,n.isStream)(l))throw new r.FormatError("XObject should be a stream");const d=l.dict.get("Subtype");if(!(0,n.isName)(d))throw new r.FormatError("XObject should have a Name subtype");if("Form"!==d.name){w[z]=!0;e();return}const f=s.state.clone(),g=new I(f),m=l.dict.getArray("Matrix");Array.isArray(m)&&6===m.length&&g.transform(m);B();const p={enqueueInvoked:!1,enqueue(e,t){this.enqueueInvoked=!0;h.enqueue(e,t)},get desiredSize(){return h.desiredSize},get ready(){return h.ready}};b.getTextContent({stream:l,task:t,resources:l.dict.get("Resources")||i,stateManager:g,normalizeWhitespace:o,combineTextItems:c,sink:p,seenStyles:u}).then((function(){p.enqueueInvoked||(w[z]=!0);e()}),a)})).catch((function(e){if(!(e instanceof r.AbortException)){if(!b.options.ignoreErrors)throw e;(0,r.warn)(`getTextContent - ignoring XObject: "${e}".`)}})));return;case r.OPS.setGState:P();var H=C[0],G=i.get("ExtGState");if(!(0,n.isDict)(G)||!(0,n.isName)(H))break;var W=G.get(H.name);if(!(0,n.isDict)(W))break;var X=W.get("Font");if(X){d.fontName=null;d.fontSize=X[1];f(A(null,X[0]));return}}if(m.items.length>=h.desiredSize){g=!0;break}}if(g)f(x);else{P();B();a()}})).catch(e=>{if(!(e instanceof r.AbortException)){if(!this.options.ignoreErrors)throw e;(0,r.warn)(`getTextContent - ignoring errors during "${t.name}" `+`task: "${e}".`);P();B()}})},extractDataStructures:function(e,t,a){const i=this.xref;let c;var l=e.get("ToUnicode")||t.get("ToUnicode"),h=l?this.readToUnicode(l):Promise.resolve(void 0);if(a.composite){var u=e.get("CIDSystemInfo");(0,n.isDict)(u)&&(a.cidSystemInfo={registry:(0,r.stringToPDFString)(u.get("Registry")),ordering:(0,r.stringToPDFString)(u.get("Ordering")),supplement:u.get("Supplement")});var d=e.get("CIDToGIDMap");(0,n.isStream)(d)&&(c=d.getBytes())}var f,g=[],m=null;if(e.has("Encoding")){f=e.get("Encoding");if((0,n.isDict)(f)){m=f.get("BaseEncoding");m=(0,n.isName)(m)?m.name:null;if(f.has("Differences"))for(var p=f.get("Differences"),b=0,y=0,v=p.length;y<v;y++){var w=i.fetchIfRef(p[y]);if((0,r.isNum)(w))b=w;else{if(!(0,n.isName)(w))throw new r.FormatError(`Invalid entry in 'Differences' array: ${w}`);g[b++]=w.name}}}else{if(!(0,n.isName)(f))throw new r.FormatError("Encoding is not a Name nor a Dict");m=f.name}"MacRomanEncoding"!==m&&"MacExpertEncoding"!==m&&"WinAnsiEncoding"!==m&&(m=null)}if(m)a.defaultEncoding=(0,o.getEncoding)(m).slice();else{var k=!!(a.flags&s.FontFlags.Symbolic),S=!!(a.flags&s.FontFlags.Nonsymbolic);f=o.StandardEncoding;"TrueType"!==a.type||S||(f=o.WinAnsiEncoding);if(k){f=o.MacRomanEncoding;a.file||(/Symbol/i.test(a.name)?f=o.SymbolSetEncoding:/Dingbats|Wingdings/i.test(a.name)&&(f=o.ZapfDingbatsEncoding))}a.defaultEncoding=f}a.differences=g;a.baseEncodingName=m;a.hasEncoding=!!m||g.length>0;a.dict=e;return h.then(e=>{a.toUnicode=e;return this.buildToUnicode(a)}).then(e=>{a.toUnicode=e;c&&(a.cidToGidMap=this.readCidToGidMap(c,e));return a})},_buildSimpleFontToUnicode(e,t=!1){(0,r.assert)(!e.composite,"Must be a simple font.");const a=[],i=e.defaultEncoding.slice(),n=e.baseEncodingName,c=e.differences;for(const e in c){const t=c[e];".notdef"!==t&&(i[e]=t)}const h=(0,p.getGlyphsUnicode)();for(const r in i){let s=i[r];if(""!==s)if(void 0!==h[s])a[r]=String.fromCharCode(h[s]);else{let i=0;switch(s[0]){case"G":3===s.length&&(i=parseInt(s.substring(1),16));break;case"g":5===s.length&&(i=parseInt(s.substring(1),16));break;case"C":case"c":if(s.length>=3&&s.length<=4){const a=s.substring(1);if(t){i=parseInt(a,16);break}i=+a;if(Number.isNaN(i)&&Number.isInteger(parseInt(a,16)))return this._buildSimpleFontToUnicode(e,!0)}break;default:const a=(0,l.getUnicodeForGlyph)(s,h);-1!==a&&(i=a)}if(i>0&&Number.isInteger(i)){if(n&&i===+r){const e=(0,o.getEncoding)(n);if(e&&(s=e[r])){a[r]=String.fromCharCode(h[s]);continue}}a[r]=String.fromCodePoint(i)}}}return new s.ToUnicodeMap(a)},buildToUnicode(e){e.hasIncludedToUnicodeMap=!!e.toUnicode&&e.toUnicode.length>0;if(e.hasIncludedToUnicodeMap){!e.composite&&e.hasEncoding&&(e.fallbackToUnicode=this._buildSimpleFontToUnicode(e));return Promise.resolve(e.toUnicode)}if(!e.composite)return Promise.resolve(this._buildSimpleFontToUnicode(e));if(e.composite&&(e.cMap.builtInCMap&&!(e.cMap instanceof i.IdentityCMap)||"Adobe"===e.cidSystemInfo.registry&&("GB1"===e.cidSystemInfo.ordering||"CNS1"===e.cidSystemInfo.ordering||"Japan1"===e.cidSystemInfo.ordering||"Korea1"===e.cidSystemInfo.ordering))){const t=e.cidSystemInfo.registry,a=e.cidSystemInfo.ordering,o=n.Name.get(t+"-"+a+"-UCS2");return i.CMapFactory.create({encoding:o,fetchBuiltInCMap:this.fetchBuiltInCMap,useCMap:null}).then((function(t){const a=e.cMap,i=[];a.forEach((function(e,a){if(a>65535)throw new r.FormatError("Max size of CID is 65,535");const n=t.lookup(a);n&&(i[e]=String.fromCharCode((n.charCodeAt(0)<<8)+n.charCodeAt(1)))}));return new s.ToUnicodeMap(i)}))}return Promise.resolve(new s.IdentityToUnicodeMap(e.firstChar,e.lastChar))},readToUnicode:function(e){var t=e;return(0,n.isName)(t)?i.CMapFactory.create({encoding:t,fetchBuiltInCMap:this.fetchBuiltInCMap,useCMap:null}).then((function(e){return e instanceof i.IdentityCMap?new s.IdentityToUnicodeMap(0,65535):new s.ToUnicodeMap(e.getMap())})):(0,n.isStream)(t)?i.CMapFactory.create({encoding:t,fetchBuiltInCMap:this.fetchBuiltInCMap,useCMap:null}).then((function(e){if(e instanceof i.IdentityCMap)return new s.IdentityToUnicodeMap(0,65535);var t=new Array(e.length);e.forEach((function(e,a){for(var r=[],i=0;i<a.length;i+=2){var n=a.charCodeAt(i)<<8|a.charCodeAt(i+1);if(55296==(63488&n)){i+=2;var s=a.charCodeAt(i)<<8|a.charCodeAt(i+1);r.push(((1023&n)<<10)+(1023&s)+65536)}else r.push(n)}t[e]=String.fromCodePoint.apply(String,r)}));return new s.ToUnicodeMap(t)}),e=>{if(e instanceof r.AbortException)return null;if(this.options.ignoreErrors){this.handler.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.font});(0,r.warn)(`readToUnicode - ignoring ToUnicode data: "${e}".`);return null}throw e}):Promise.resolve(null)},readCidToGidMap(e,t){for(var a=[],r=0,i=e.length;r<i;r++){var n=e[r++]<<8|e[r];const i=r>>1;(0!==n||t.has(i))&&(a[i]=n)}return a},extractWidths:function(e,t,a){var r,i,o,c,l,h,u,d,f=this.xref,g=[],m=0,p=[];if(a.composite){m=e.has("DW")?e.get("DW"):1e3;if(d=e.get("W"))for(i=0,o=d.length;i<o;i++){h=f.fetchIfRef(d[i++]);u=f.fetchIfRef(d[i]);if(Array.isArray(u))for(c=0,l=u.length;c<l;c++)g[h++]=f.fetchIfRef(u[c]);else{var b=f.fetchIfRef(d[++i]);for(c=h;c<=u;c++)g[c]=b}}if(a.vertical){var y=e.getArray("DW2")||[880,-1e3];r=[y[1],.5*m,y[0]];if(y=e.get("W2"))for(i=0,o=y.length;i<o;i++){h=f.fetchIfRef(y[i++]);u=f.fetchIfRef(y[i]);if(Array.isArray(u))for(c=0,l=u.length;c<l;c++)p[h++]=[f.fetchIfRef(u[c++]),f.fetchIfRef(u[c++]),f.fetchIfRef(u[c])];else{var v=[f.fetchIfRef(y[++i]),f.fetchIfRef(y[++i]),f.fetchIfRef(y[++i])];for(c=h;c<=u;c++)p[c]=v}}}}else{var w=a.firstChar;if(d=e.get("Widths")){c=w;for(i=0,o=d.length;i<o;i++)g[c++]=f.fetchIfRef(d[i]);m=parseFloat(t.get("MissingWidth"))||0}else{var k=e.get("BaseFont");if((0,n.isName)(k)){var S=this.getBaseFontMetrics(k.name);g=this.buildCharCodeToWidth(S.widths,a);m=S.defaultWidth}}}var C=!0,x=m;for(var A in g){var I=g[A];if(I)if(x){if(x!==I){C=!1;break}}else x=I}C&&(a.flags|=s.FontFlags.FixedPitch);a.defaultWidth=m;a.widths=g;a.defaultVMetrics=r;a.vmetrics=p},isSerifFont:function(e){var t=e.split("-")[0];return t in(0,h.getSerifFonts)()||-1!==t.search(/serif/gi)},getBaseFontMetrics:function(e){var t=0,a=[],i=!1,n=(0,h.getStdFontMap)()[e]||e,s=(0,b.getMetrics)();n in s||(n=this.isSerifFont(e)?"Times-Roman":"Helvetica");var o=s[n];if((0,r.isNum)(o)){t=o;i=!0}else a=o();return{defaultWidth:t,monospace:i,widths:a}},buildCharCodeToWidth:function(e,t){for(var a=Object.create(null),r=t.differences,i=t.defaultEncoding,n=0;n<256;n++)n in r&&e[r[n]]?a[n]=e[r[n]]:n in i&&e[i[n]]&&(a[n]=e[i[n]]);return a},preEvaluateFont:function(e){var t=e,a=e.get("Subtype");if(!(0,n.isName)(a))throw new r.FormatError("invalid font Subtype");var i,s=!1;if("Type0"===a.name){var o=e.get("DescendantFonts");if(!o)throw new r.FormatError("Descendant fonts are not specified");a=(e=Array.isArray(o)?this.xref.fetchIfRef(o[0]):o).get("Subtype");if(!(0,n.isName)(a))throw new r.FormatError("invalid font Subtype");s=!0}var c=e.get("FontDescriptor");if(c){var l=new w.MurmurHash3_64,h=t.getRaw("Encoding");if((0,n.isName)(h))l.update(h.name);else if((0,n.isRef)(h))l.update(h.toString());else if((0,n.isDict)(h))for(var u=h.getKeys(),d=0,f=u.length;d<f;d++){var g=h.getRaw(u[d]);if((0,n.isName)(g))l.update(g.name);else if((0,n.isRef)(g))l.update(g.toString());else if(Array.isArray(g)){for(var m=g.length,p=new Array(m),b=0;b<m;b++){var y=g[b];(0,n.isName)(y)?p[b]=y.name:((0,r.isNum)(y)||(0,n.isRef)(y))&&(p[b]=y.toString())}l.update(p.join())}}const a=e.get("FirstChar")||0,o=e.get("LastChar")||(s?65535:255);l.update(`${a}-${o}`);var v=e.get("ToUnicode")||t.get("ToUnicode");if((0,n.isStream)(v)){var k=v.str||v;i=k.buffer?new Uint8Array(k.buffer.buffer,0,k.bufferLength):new Uint8Array(k.bytes.buffer,k.start,k.end-k.start);l.update(i)}else(0,n.isName)(v)&&l.update(v.name);var S=e.get("Widths")||t.get("Widths");if(S){i=new Uint8Array(new Uint32Array(S).buffer);l.update(i)}}return{descriptor:c,dict:e,baseDict:t,composite:s,type:a.name,hash:l?l.hexdigest():""}},translateFont:function(e){var t,a=e.baseDict,o=e.dict,c=e.composite,l=e.descriptor,u=e.type,d=c?65535:255;const f=o.get("FirstChar")||0,g=o.get("LastChar")||d;if(!l){if("Type3"!==u){var m=o.get("BaseFont");if(!(0,n.isName)(m))throw new r.FormatError("Base font is not specified");m=m.name.replace(/[,_]/g,"-");var p=this.getBaseFontMetrics(m),b=m.split("-")[0],y=(this.isSerifFont(b)?s.FontFlags.Serif:0)|(p.monospace?s.FontFlags.FixedPitch:0)|((0,h.getSymbolsFonts)()[b]?s.FontFlags.Symbolic:s.FontFlags.Nonsymbolic);t={type:u,name:m,widths:p.widths,defaultWidth:p.defaultWidth,flags:y,firstChar:f,lastChar:g};const e=o.get("Widths");return this.extractDataStructures(o,o,t).then(t=>{if(e){const a=[];let r=f;for(let t=0,i=e.length;t<i;t++)a[r++]=this.xref.fetchIfRef(e[t]);t.widths=a}else t.widths=this.buildCharCodeToWidth(p.widths,t);return new s.Font(m,null,t)})}(l=new n.Dict(null)).set("FontName",n.Name.get(u));l.set("FontBBox",o.getArray("FontBBox")||[0,0,0,0])}var v=l.get("FontName"),w=o.get("BaseFont");(0,r.isString)(v)&&(v=n.Name.get(v));(0,r.isString)(w)&&(w=n.Name.get(w));if("Type3"!==u){var k=v&&v.name,S=w&&w.name;if(k!==S){(0,r.info)(`The FontDescriptor's FontName is "${k}" but `+`should be the same as the Font's BaseFont "${S}".`);k&&S&&S.startsWith(k)&&(v=w)}}v=v||w;if(!(0,n.isName)(v))throw new r.FormatError("invalid font name");var C,x=l.get("FontFile","FontFile2","FontFile3");if(x&&x.dict){var A=x.dict.get("Subtype");A&&(A=A.name);var I=x.dict.get("Length1"),F=x.dict.get("Length2"),T=x.dict.get("Length3")}t={type:u,name:v.name,subtype:A,file:x,length1:I,length2:F,length3:T,loadedName:a.loadedName,composite:c,wideChars:c,fixedPitch:!1,fontMatrix:o.getArray("FontMatrix")||r.FONT_IDENTITY_MATRIX,firstChar:f||0,lastChar:g||d,bbox:l.getArray("FontBBox"),ascent:l.get("Ascent"),descent:l.get("Descent"),xHeight:l.get("XHeight"),capHeight:l.get("CapHeight"),flags:l.get("Flags"),italicAngle:l.get("ItalicAngle"),isType3Font:!1};if(c){var E=a.get("Encoding");(0,n.isName)(E)&&(t.cidEncoding=E.name);C=i.CMapFactory.create({encoding:E,fetchBuiltInCMap:this.fetchBuiltInCMap,useCMap:null}).then((function(e){t.cMap=e;t.vertical=t.cMap.vertical}))}else C=Promise.resolve(void 0);return C.then(()=>this.extractDataStructures(o,a,t)).then(e=>{this.extractWidths(o,l,e);"Type3"===u&&(e.isType3Font=!0);return new s.Font(v.name,x,e)})}};t.buildFontPaths=function(e,t,a){function r(t){e.renderer.hasBuiltPath(t)||a.send("commonobj",[`${e.loadedName}_path_${t}`,"FontPath",e.renderer.getPathJs(t)])}for(const e of t){r(e.fontChar);const t=e.accent;t&&t.fontChar&&r(t.fontChar)}};t.getFallbackFontDict=function(){if(this._fallbackFontDict)return this._fallbackFontDict;const e=new n.Dict;e.set("BaseFont",n.Name.get("PDFJS-FallbackFont"));e.set("Type",n.Name.get("FallbackType"));e.set("Subtype",n.Name.get("FallbackType"));e.set("Encoding",n.Name.get("WinAnsiEncoding"));return this._fallbackFontDict=e};return t}();t.PartialEvaluator=x;var A=function(){function e(e,t,a){this.loadedName=e;this.font=t;this.dict=a;this.type3Loaded=null;this.sent=!1}e.prototype={send(e){if(!this.sent){this.sent=!0;e.send("commonobj",[this.loadedName,"Font",this.font.exportData()])}},fallback(e){if(!this.font.data)return;this.font.disableFontFace=!0;const t=this.font.glyphCacheValues;x.buildFontPaths(this.font,t,e)},loadType3Data(e,t,a,i){if(!this.font.isType3Font)throw new Error("Must be a Type3 font.");if(this.type3Loaded)return this.type3Loaded;var n=Object.create(e.options);n.ignoreErrors=!1;n.nativeImageDecoderSupport=r.NativeImageDecoding.NONE;var s=e.clone(n);s.parsingType3Font=!0;for(var o=this.font,c=Promise.resolve(),l=this.dict.get("CharProcs"),h=this.dict.get("Resources")||t,u=l.getKeys(),d=Object.create(null),f=0,g=u.length;f<g;++f){const e=u[f];c=c.then((function(){var t=l.get(e),n=new S.OperatorList;return s.getOperatorList({stream:t,task:i,resources:h,operatorList:n}).then((function(){d[e]=n.getIR();a.addDependencies(n.dependencies)})).catch((function(t){(0,r.warn)(`Type3 font resource "${e}" is not available.`);var a=new S.OperatorList;d[e]=a.getIR()}))}))}this.type3Loaded=c.then((function(){o.charProcOperatorList=d}));return this.type3Loaded}};return e}(),I=function(){function e(e){this.state=e;this.stateStack=[]}e.prototype={save(){var e=this.state;this.stateStack.push(this.state);this.state=e.clone()},restore(){var e=this.stateStack.pop();e&&(this.state=e)},transform(e){this.state.ctm=r.Util.transform(this.state.ctm,e)}};return e}(),F=function(){function e(){this.ctm=new Float32Array(r.IDENTITY_MATRIX);this.fontName=null;this.fontSize=0;this.font=null;this.fontMatrix=r.FONT_IDENTITY_MATRIX;this.textMatrix=r.IDENTITY_MATRIX.slice();this.textLineMatrix=r.IDENTITY_MATRIX.slice();this.charSpacing=0;this.wordSpacing=0;this.leading=0;this.textHScale=1;this.textRise=0}e.prototype={setTextMatrix:function(e,t,a,r,i,n){var s=this.textMatrix;s[0]=e;s[1]=t;s[2]=a;s[3]=r;s[4]=i;s[5]=n},setTextLineMatrix:function(e,t,a,r,i,n){var s=this.textLineMatrix;s[0]=e;s[1]=t;s[2]=a;s[3]=r;s[4]=i;s[5]=n},translateTextMatrix:function(e,t){var a=this.textMatrix;a[4]=a[0]*e+a[2]*t+a[4];a[5]=a[1]*e+a[3]*t+a[5]},translateTextLineMatrix:function(e,t){var a=this.textLineMatrix;a[4]=a[0]*e+a[2]*t+a[4];a[5]=a[1]*e+a[3]*t+a[5]},calcTextLineMatrixAdvance:function(e,t,a,r,i,n){var s=this.font;if(!s)return null;var o=this.textLineMatrix;if(e!==o[0]||t!==o[1]||a!==o[2]||r!==o[3])return null;var c=i-o[4],l=n-o[5];if(s.vertical&&0!==c||!s.vertical&&0!==l)return null;var h,u,d=e*r-t*a;if(s.vertical){h=-l*a/d;u=l*e/d}else{h=c*r/d;u=-c*t/d}return{width:h,height:u,value:s.vertical?u:h}},calcRenderMatrix:function(e){var t=[this.fontSize*this.textHScale,0,0,this.fontSize,0,this.textRise];return r.Util.transform(e,r.Util.transform(this.textMatrix,t))},carriageReturn:function(){this.translateTextLineMatrix(0,-this.leading);this.textMatrix=this.textLineMatrix.slice()},clone:function(){var e=Object.create(this);e.textMatrix=this.textMatrix.slice();e.textLineMatrix=this.textLineMatrix.slice();e.fontMatrix=this.fontMatrix.slice();return e}};return e}(),T=function(){function e(){this.ctm=new Float32Array(r.IDENTITY_MATRIX);this.font=null;this.textRenderingMode=r.TextRenderingMode.FILL;this.fillColorSpace=g.ColorSpace.singletons.gray;this.strokeColorSpace=g.ColorSpace.singletons.gray}e.prototype={clone:function(){return Object.create(this)}};return e}(),E=function(){var e=(0,c.getLookupTableFactory)((function(e){e.w={id:r.OPS.setLineWidth,numArgs:1,variableArgs:!1};e.J={id:r.OPS.setLineCap,numArgs:1,variableArgs:!1};e.j={id:r.OPS.setLineJoin,numArgs:1,variableArgs:!1};e.M={id:r.OPS.setMiterLimit,numArgs:1,variableArgs:!1};e.d={id:r.OPS.setDash,numArgs:2,variableArgs:!1};e.ri={id:r.OPS.setRenderingIntent,numArgs:1,variableArgs:!1};e.i={id:r.OPS.setFlatness,numArgs:1,variableArgs:!1};e.gs={id:r.OPS.setGState,numArgs:1,variableArgs:!1};e.q={id:r.OPS.save,numArgs:0,variableArgs:!1};e.Q={id:r.OPS.restore,numArgs:0,variableArgs:!1};e.cm={id:r.OPS.transform,numArgs:6,variableArgs:!1};e.m={id:r.OPS.moveTo,numArgs:2,variableArgs:!1};e.l={id:r.OPS.lineTo,numArgs:2,variableArgs:!1};e.c={id:r.OPS.curveTo,numArgs:6,variableArgs:!1};e.v={id:r.OPS.curveTo2,numArgs:4,variableArgs:!1};e.y={id:r.OPS.curveTo3,numArgs:4,variableArgs:!1};e.h={id:r.OPS.closePath,numArgs:0,variableArgs:!1};e.re={id:r.OPS.rectangle,numArgs:4,variableArgs:!1};e.S={id:r.OPS.stroke,numArgs:0,variableArgs:!1};e.s={id:r.OPS.closeStroke,numArgs:0,variableArgs:!1};e.f={id:r.OPS.fill,numArgs:0,variableArgs:!1};e.F={id:r.OPS.fill,numArgs:0,variableArgs:!1};e["f*"]={id:r.OPS.eoFill,numArgs:0,variableArgs:!1};e.B={id:r.OPS.fillStroke,numArgs:0,variableArgs:!1};e["B*"]={id:r.OPS.eoFillStroke,numArgs:0,variableArgs:!1};e.b={id:r.OPS.closeFillStroke,numArgs:0,variableArgs:!1};e["b*"]={id:r.OPS.closeEOFillStroke,numArgs:0,variableArgs:!1};e.n={id:r.OPS.endPath,numArgs:0,variableArgs:!1};e.W={id:r.OPS.clip,numArgs:0,variableArgs:!1};e["W*"]={id:r.OPS.eoClip,numArgs:0,variableArgs:!1};e.BT={id:r.OPS.beginText,numArgs:0,variableArgs:!1};e.ET={id:r.OPS.endText,numArgs:0,variableArgs:!1};e.Tc={id:r.OPS.setCharSpacing,numArgs:1,variableArgs:!1};e.Tw={id:r.OPS.setWordSpacing,numArgs:1,variableArgs:!1};e.Tz={id:r.OPS.setHScale,numArgs:1,variableArgs:!1};e.TL={id:r.OPS.setLeading,numArgs:1,variableArgs:!1};e.Tf={id:r.OPS.setFont,numArgs:2,variableArgs:!1};e.Tr={id:r.OPS.setTextRenderingMode,numArgs:1,variableArgs:!1};e.Ts={id:r.OPS.setTextRise,numArgs:1,variableArgs:!1};e.Td={id:r.OPS.moveText,numArgs:2,variableArgs:!1};e.TD={id:r.OPS.setLeadingMoveText,numArgs:2,variableArgs:!1};e.Tm={id:r.OPS.setTextMatrix,numArgs:6,variableArgs:!1};e["T*"]={id:r.OPS.nextLine,numArgs:0,variableArgs:!1};e.Tj={id:r.OPS.showText,numArgs:1,variableArgs:!1};e.TJ={id:r.OPS.showSpacedText,numArgs:1,variableArgs:!1};e["'"]={id:r.OPS.nextLineShowText,numArgs:1,variableArgs:!1};e['"']={id:r.OPS.nextLineSetSpacingShowText,numArgs:3,variableArgs:!1};e.d0={id:r.OPS.setCharWidth,numArgs:2,variableArgs:!1};e.d1={id:r.OPS.setCharWidthAndBounds,numArgs:6,variableArgs:!1};e.CS={id:r.OPS.setStrokeColorSpace,numArgs:1,variableArgs:!1};e.cs={id:r.OPS.setFillColorSpace,numArgs:1,variableArgs:!1};e.SC={id:r.OPS.setStrokeColor,numArgs:4,variableArgs:!0};e.SCN={id:r.OPS.setStrokeColorN,numArgs:33,variableArgs:!0};e.sc={id:r.OPS.setFillColor,numArgs:4,variableArgs:!0};e.scn={id:r.OPS.setFillColorN,numArgs:33,variableArgs:!0};e.G={id:r.OPS.setStrokeGray,numArgs:1,variableArgs:!1};e.g={id:r.OPS.setFillGray,numArgs:1,variableArgs:!1};e.RG={id:r.OPS.setStrokeRGBColor,numArgs:3,variableArgs:!1};e.rg={id:r.OPS.setFillRGBColor,numArgs:3,variableArgs:!1};e.K={id:r.OPS.setStrokeCMYKColor,numArgs:4,variableArgs:!1};e.k={id:r.OPS.setFillCMYKColor,numArgs:4,variableArgs:!1};e.sh={id:r.OPS.shadingFill,numArgs:1,variableArgs:!1};e.BI={id:r.OPS.beginInlineImage,numArgs:0,variableArgs:!1};e.ID={id:r.OPS.beginImageData,numArgs:0,variableArgs:!1};e.EI={id:r.OPS.endInlineImage,numArgs:1,variableArgs:!1};e.Do={id:r.OPS.paintXObject,numArgs:1,variableArgs:!1};e.MP={id:r.OPS.markPoint,numArgs:1,variableArgs:!1};e.DP={id:r.OPS.markPointProps,numArgs:2,variableArgs:!1};e.BMC={id:r.OPS.beginMarkedContent,numArgs:1,variableArgs:!1};e.BDC={id:r.OPS.beginMarkedContentProps,numArgs:2,variableArgs:!1};e.EMC={id:r.OPS.endMarkedContent,numArgs:0,variableArgs:!1};e.BX={id:r.OPS.beginCompat,numArgs:0,variableArgs:!1};e.EX={id:r.OPS.endCompat,numArgs:0,variableArgs:!1};e.BM=null;e.BD=null;e.true=null;e.fa=null;e.fal=null;e.fals=null;e.false=null;e.nu=null;e.nul=null;e.null=null}));function t(t,a,r){this.opMap=e();this.parser=new d.Parser({lexer:new d.Lexer(t,this.opMap),xref:a});this.stateManager=r;this.nonProcessedArgs=[];this._numInvalidPathOPS=0}t.prototype={get savedStatesDepth(){return this.stateManager.stateStack.length},read:function(e){for(var t=e.args;;){var a=this.parser.getObj();if(a instanceof n.Cmd){var i=a.cmd,s=this.opMap[i];if(!s){(0,r.warn)(`Unknown command "${i}".`);continue}var o=s.id,c=s.numArgs,l=null!==t?t.length:0;if(s.variableArgs)l>c&&(0,r.info)(`Command ${i}: expected [0, ${c}] args, `+`but received ${l} args.`);else{if(l!==c){for(var h=this.nonProcessedArgs;l>c;){h.push(t.shift());l--}for(;l<c&&0!==h.length;){null===t&&(t=[]);t.unshift(h.pop());l++}}if(l<c){const e=`command ${i}: expected ${c} args, `+`but received ${l} args.`;if(o>=r.OPS.moveTo&&o<=r.OPS.endPath&&++this._numInvalidPathOPS>20)throw new r.FormatError(`Invalid ${e}`);(0,r.warn)(`Skipping ${e}`);null!==t&&(t.length=0);continue}}this.preprocessCommand(o,t);e.fn=o;e.args=t;return!0}if(a===n.EOF)return!1;if(null!==a){null===t&&(t=[]);t.push(a);if(t.length>33)throw new r.FormatError("Too many arguments")}}},preprocessCommand:function(e,t){switch(0|e){case r.OPS.save:this.stateManager.save();break;case r.OPS.restore:this.stateManager.restore();break;case r.OPS.transform:this.stateManager.transform(t)}}};return t}()},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.CMapFactory=t.IdentityCMap=t.CMap=void 0;var r=a(2),i=a(4),n=a(10),s=a(7),o=a(11),c=["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Adobe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","Adobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V","GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-UHC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJIS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"];class l{constructor(e=!1){this.codespaceRanges=[[],[],[],[]];this.numCodespaceRanges=0;this._map=[];this.name="";this.vertical=!1;this.useCMap=null;this.builtInCMap=e}addCodespaceRange(e,t,a){this.codespaceRanges[e-1].push(t,a);this.numCodespaceRanges++}mapCidRange(e,t,a){for(;e<=t;)this._map[e++]=a++}mapBfRange(e,t,a){for(var r=a.length-1;e<=t;){this._map[e++]=a;a=a.substring(0,r)+String.fromCharCode(a.charCodeAt(r)+1)}}mapBfRangeToArray(e,t,a){const r=a.length;let i=0;for(;e<=t&&i<r;){this._map[e]=a[i++];++e}}mapOne(e,t){this._map[e]=t}lookup(e){return this._map[e]}contains(e){return void 0!==this._map[e]}forEach(e){const t=this._map,a=t.length;if(a<=65536)for(let r=0;r<a;r++)void 0!==t[r]&&e(r,t[r]);else for(const a in t)e(a,t[a])}charCodeOf(e){const t=this._map;if(t.length<=65536)return t.indexOf(e);for(const a in t)if(t[a]===e)return 0|a;return-1}getMap(){return this._map}readCharCode(e,t,a){let r=0;const i=this.codespaceRanges;for(let n=0,s=i.length;n<s;n++){r=(r<<8|e.charCodeAt(t+n))>>>0;const s=i[n];for(let e=0,t=s.length;e<t;){const t=s[e++],i=s[e++];if(r>=t&&r<=i){a.charcode=r;a.length=n+1;return}}}a.charcode=0;a.length=1}get length(){return this._map.length}get isIdentityCMap(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this._map.length)return!1;for(let e=0;e<65536;e++)if(this._map[e]!==e)return!1;return!0}}t.CMap=l;class h extends l{constructor(e,t){super();this.vertical=e;this.addCodespaceRange(t,0,65535)}mapCidRange(e,t,a){(0,r.unreachable)("should not call mapCidRange")}mapBfRange(e,t,a){(0,r.unreachable)("should not call mapBfRange")}mapBfRangeToArray(e,t,a){(0,r.unreachable)("should not call mapBfRangeToArray")}mapOne(e,t){(0,r.unreachable)("should not call mapCidOne")}lookup(e){return Number.isInteger(e)&&e<=65535?e:void 0}contains(e){return Number.isInteger(e)&&e<=65535}forEach(e){for(let t=0;t<=65535;t++)e(t,t)}charCodeOf(e){return Number.isInteger(e)&&e<=65535?e:-1}getMap(){const e=new Array(65536);for(let t=0;t<=65535;t++)e[t]=t;return e}get length(){return 65536}get isIdentityCMap(){(0,r.unreachable)("should not access .isIdentityCMap")}}t.IdentityCMap=h;var u=function(){function e(e,t){for(var a=0,r=0;r<=t;r++)a=a<<8|e[r];return a>>>0}function t(e,t){return 1===t?String.fromCharCode(e[0],e[1]):3===t?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode.apply(null,e.subarray(0,t+1))}function a(e,t,a){for(var r=0,i=a;i>=0;i--){r+=e[i]+t[i];e[i]=255&r;r>>=8}}function i(e,t){for(var a=1,r=t;r>=0&&a>0;r--){a+=e[r];e[r]=255&a;a>>=8}}function n(e){this.buffer=e;this.pos=0;this.end=e.length;this.tmpBuf=new Uint8Array(19)}n.prototype={readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]},readNumber(){var e,t=0;do{var a=this.readByte();if(a<0)throw new r.FormatError("unexpected EOF in bcmap");e=!(128&a);t=t<<7|127&a}while(!e);return t},readSigned(){var e=this.readNumber();return 1&e?~(e>>>1):e>>>1},readHex(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1));this.pos+=t+1},readHexNumber(e,t){var a,i=this.tmpBuf,n=0;do{var s=this.readByte();if(s<0)throw new r.FormatError("unexpected EOF in bcmap");a=!(128&s);i[n++]=127&s}while(!a);for(var o=t,c=0,l=0;o>=0;){for(;l<8&&i.length>0;){c=i[--n]<<l|c;l+=7}e[o]=255&c;o--;c>>=8;l-=8}},readHexSigned(e,t){this.readHexNumber(e,t);for(var a=1&e[t]?255:0,r=0,i=0;i<=t;i++){r=(1&r)<<8|e[i];e[i]=r>>1^a}},readString(){for(var e=this.readNumber(),t="",a=0;a<e;a++)t+=String.fromCharCode(this.readNumber());return t}};function s(){}s.prototype={process:function(r,s,o){return new Promise((function(c,l){var h=new n(r),u=h.readByte();s.vertical=!!(1&u);for(var d,f,g=null,m=new Uint8Array(16),p=new Uint8Array(16),b=new Uint8Array(16),y=new Uint8Array(16),v=new Uint8Array(16);(f=h.readByte())>=0;){var w=f>>5;if(7!==w){var k=!!(16&f),S=15&f;if(S+1>16)throw new Error("processBinaryCMap: Invalid dataSize.");var C,x=h.readNumber();switch(w){case 0:h.readHex(m,S);h.readHexNumber(p,S);a(p,m,S);s.addCodespaceRange(S+1,e(m,S),e(p,S));for(C=1;C<x;C++){i(p,S);h.readHexNumber(m,S);a(m,p,S);h.readHexNumber(p,S);a(p,m,S);s.addCodespaceRange(S+1,e(m,S),e(p,S))}break;case 1:h.readHex(m,S);h.readHexNumber(p,S);a(p,m,S);h.readNumber();for(C=1;C<x;C++){i(p,S);h.readHexNumber(m,S);a(m,p,S);h.readHexNumber(p,S);a(p,m,S);h.readNumber()}break;case 2:h.readHex(b,S);d=h.readNumber();s.mapOne(e(b,S),d);for(C=1;C<x;C++){i(b,S);if(!k){h.readHexNumber(v,S);a(b,v,S)}d=h.readSigned()+(d+1);s.mapOne(e(b,S),d)}break;case 3:h.readHex(m,S);h.readHexNumber(p,S);a(p,m,S);d=h.readNumber();s.mapCidRange(e(m,S),e(p,S),d);for(C=1;C<x;C++){i(p,S);if(k)m.set(p);else{h.readHexNumber(m,S);a(m,p,S)}h.readHexNumber(p,S);a(p,m,S);d=h.readNumber();s.mapCidRange(e(m,S),e(p,S),d)}break;case 4:h.readHex(b,1);h.readHex(y,S);s.mapOne(e(b,1),t(y,S));for(C=1;C<x;C++){i(b,1);if(!k){h.readHexNumber(v,1);a(b,v,1)}i(y,S);h.readHexSigned(v,S);a(y,v,S);s.mapOne(e(b,1),t(y,S))}break;case 5:h.readHex(m,1);h.readHexNumber(p,1);a(p,m,1);h.readHex(y,S);s.mapBfRange(e(m,1),e(p,1),t(y,S));for(C=1;C<x;C++){i(p,1);if(k)m.set(p);else{h.readHexNumber(m,1);a(m,p,1)}h.readHexNumber(p,1);a(p,m,1);h.readHex(y,S);s.mapBfRange(e(m,1),e(p,1),t(y,S))}break;default:l(new Error("processBinaryCMap: Unknown type: "+w));return}}else switch(31&f){case 0:h.readString();break;case 1:g=h.readString()}}c(g?o(g):s)}))}};return s}(),d=function(){function e(e){for(var t=0,a=0;a<e.length;a++)t=t<<8|e.charCodeAt(a);return t>>>0}function t(e){if(!(0,r.isString)(e))throw new r.FormatError("Malformed CMap: expected string.")}function a(e){if(!Number.isInteger(e))throw new r.FormatError("Malformed CMap: expected int.")}function d(a,r){for(;;){var n=r.getObj();if((0,i.isEOF)(n))break;if((0,i.isCmd)(n,"endbfchar"))return;t(n);var s=e(n);t(n=r.getObj());var o=n;a.mapOne(s,o)}}function f(a,n){for(;;){var s=n.getObj();if((0,i.isEOF)(s))break;if((0,i.isCmd)(s,"endbfrange"))return;t(s);var o=e(s);t(s=n.getObj());var c=e(s);s=n.getObj();if(Number.isInteger(s)||(0,r.isString)(s)){var l=Number.isInteger(s)?String.fromCharCode(s):s;a.mapBfRange(o,c,l)}else{if(!(0,i.isCmd)(s,"["))break;s=n.getObj();for(var h=[];!(0,i.isCmd)(s,"]")&&!(0,i.isEOF)(s);){h.push(s);s=n.getObj()}a.mapBfRangeToArray(o,c,h)}}throw new r.FormatError("Invalid bf range.")}function g(r,n){for(;;){var s=n.getObj();if((0,i.isEOF)(s))break;if((0,i.isCmd)(s,"endcidchar"))return;t(s);var o=e(s);a(s=n.getObj());var c=s;r.mapOne(o,c)}}function m(r,n){for(;;){var s=n.getObj();if((0,i.isEOF)(s))break;if((0,i.isCmd)(s,"endcidrange"))return;t(s);var o=e(s);t(s=n.getObj());var c=e(s);a(s=n.getObj());var l=s;r.mapCidRange(o,c,l)}}function p(t,a){for(;;){var n=a.getObj();if((0,i.isEOF)(n))break;if((0,i.isCmd)(n,"endcodespacerange"))return;if(!(0,r.isString)(n))break;var s=e(n);n=a.getObj();if(!(0,r.isString)(n))break;var o=e(n);t.addCodespaceRange(n.length,s,o)}throw new r.FormatError("Invalid codespace range.")}function b(e,t){var a=t.getObj();Number.isInteger(a)&&(e.vertical=!!a)}function y(e,t){var a=t.getObj();(0,i.isName)(a)&&(0,r.isString)(a.name)&&(e.name=a.name)}function v(e,t,a,n){var o,c;e:for(;;)try{var l=t.getObj();if((0,i.isEOF)(l))break;if((0,i.isName)(l)){"WMode"===l.name?b(e,t):"CMapName"===l.name&&y(e,t);o=l}else if((0,i.isCmd)(l))switch(l.cmd){case"endcmap":break e;case"usecmap":(0,i.isName)(o)&&(c=o.name);break;case"begincodespacerange":p(e,t);break;case"beginbfchar":d(e,t);break;case"begincidchar":g(e,t);break;case"beginbfrange":f(e,t);break;case"begincidrange":m(e,t)}}catch(e){if(e instanceof s.MissingDataException)throw e;(0,r.warn)("Invalid cMap data: "+e);continue}!n&&c&&(n=c);return n?w(e,a,n):Promise.resolve(e)}function w(e,t,a){return k(a,t).then((function(t){e.useCMap=t;if(0===e.numCodespaceRanges){for(var a=e.useCMap.codespaceRanges,r=0;r<a.length;r++)e.codespaceRanges[r]=a[r].slice();e.numCodespaceRanges=e.useCMap.numCodespaceRanges}e.useCMap.forEach((function(t,a){e.contains(t)||e.mapOne(t,e.useCMap.lookup(t))}));return e}))}function k(e,t){return"Identity-H"===e?Promise.resolve(new h(!1,2)):"Identity-V"===e?Promise.resolve(new h(!0,2)):c.includes(e)?t?t(e).then((function(e){var a=e.cMapData,i=e.compressionType,s=new l(!0);if(i===r.CMapCompressionType.BINARY)return(new u).process(a,s,(function(e){return w(s,t,e)}));if(i===r.CMapCompressionType.NONE){var c=new n.Lexer(new o.Stream(a));return v(s,c,t,null)}return Promise.reject(new Error("TODO: Only BINARY/NONE CMap compression is currently supported."))})):Promise.reject(new Error("Built-in CMap parameters are not provided.")):Promise.reject(new Error("Unknown CMap name: "+e))}return{async create(e){var t=e.encoding,a=e.fetchBuiltInCMap,r=e.useCMap;if((0,i.isName)(t))return k(t.name,a);if((0,i.isStream)(t)){return v(new l,new n.Lexer(t),a,r).then((function(e){return e.isIdentityCMap?k(e.name,a):e}))}throw new Error("Encoding required.")}}}();t.CMapFactory=d},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.getFontType=y;t.IdentityToUnicodeMap=t.ToUnicodeMap=t.FontFlags=t.Font=t.ErrorFont=t.SEAC_ANALYSIS_ENABLED=void 0;var r=a(2),i=a(28),n=a(31),s=a(30),o=a(32),c=a(33),l=a(7),h=a(34),u=a(26),d=a(11),f=a(35);const g=[[57344,63743],[1048576,1114109]];t.SEAC_ANALYSIS_ENABLED=!0;var m={FixedPitch:1,Serif:2,Symbolic:4,Script:8,Nonsymbolic:32,Italic:64,AllCap:65536,SmallCap:131072,ForceBold:262144};t.FontFlags=m;var p=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function b(e){if(e.fontMatrix&&e.fontMatrix[0]!==r.FONT_IDENTITY_MATRIX[0]){var t=.001/e.fontMatrix[0],a=e.widths;for(var i in a)a[i]*=t;e.defaultWidth*=t}}function y(e,t){switch(e){case"Type1":return"Type1C"===t?r.FontType.TYPE1C:r.FontType.TYPE1;case"CIDFontType0":return"CIDFontType0C"===t?r.FontType.CIDFONTTYPE0C:r.FontType.CIDFONTTYPE0;case"OpenType":return r.FontType.OPENTYPE;case"TrueType":return r.FontType.TRUETYPE;case"CIDFontType2":return r.FontType.CIDFONTTYPE2;case"MMType1":return r.FontType.MMTYPE1;case"Type0":return r.FontType.TYPE0;default:return r.FontType.UNKNOWN}}function v(e,t){if(void 0!==t[e])return e;var a=(0,c.getUnicodeForGlyph)(e,t);if(-1!==a)for(var i in t)if(t[i]===a)return i;(0,r.info)("Unable to recover a standard glyph name for: "+e);return e}var w=function(){function e(e,t,a,r,i,n,s,o){this.fontChar=e;this.unicode=t;this.accent=a;this.width=r;this.vmetric=i;this.operatorListId=n;this.isSpace=s;this.isInFont=o}e.prototype.matchesForCache=function(e,t,a,r,i,n,s,o){return this.fontChar===e&&this.unicode===t&&this.accent===a&&this.width===r&&this.vmetric===i&&this.operatorListId===n&&this.isSpace===s&&this.isInFont===o};return e}(),k=function(){function e(e=[]){this._map=e}e.prototype={get length(){return this._map.length},forEach(e){for(var t in this._map)e(t,this._map[t].charCodeAt(0))},has(e){return void 0!==this._map[e]},get(e){return this._map[e]},charCodeOf(e){const t=this._map;if(t.length<=65536)return t.indexOf(e);for(const a in t)if(t[a]===e)return 0|a;return-1},amend(e){for(var t in e)this._map[t]=e[t]}};return e}();t.ToUnicodeMap=k;var S=function(){function e(e,t){this.firstChar=e;this.lastChar=t}e.prototype={get length(){return this.lastChar+1-this.firstChar},forEach(e){for(var t=this.firstChar,a=this.lastChar;t<=a;t++)e(t,t)},has(e){return this.firstChar<=e&&e<=this.lastChar},get(e){if(this.firstChar<=e&&e<=this.lastChar)return String.fromCharCode(e)},charCodeOf(e){return Number.isInteger(e)&&e>=this.firstChar&&e<=this.lastChar?e:-1},amend(e){(0,r.unreachable)("Should not call amend()")}};return e}();t.IdentityToUnicodeMap=S;var C=function(){function e(e,t,a){e[t]=a>>8&255;e[t+1]=255&a}function t(e,t,a){e[t]=a>>24&255;e[t+1]=a>>16&255;e[t+2]=a>>8&255;e[t+3]=255&a}function a(e,t,a){var r,i;if(a instanceof Uint8Array)e.set(a,t);else if("string"==typeof a)for(r=0,i=a.length;r<i;r++)e[t++]=255&a.charCodeAt(r);else for(r=0,i=a.length;r<i;r++)e[t++]=255&a[r]}function i(e){this.sfnt=e;this.tables=Object.create(null)}i.getSearchParams=function(e,t){for(var a=1,r=0;(a^e)>a;){a<<=1;r++}var i=a*t;return{range:i,entry:r,rangeShift:t*e-i}};i.prototype={toArray:function(){var n=this.sfnt,s=this.tables,o=Object.keys(s);o.sort();var c,h,u,d,f,g=o.length,m=12+16*g,p=[m];for(c=0;c<g;c++){m+=((d=s[o[c]]).length+3&-4)>>>0;p.push(m)}var b=new Uint8Array(m);for(c=0;c<g;c++){d=s[o[c]];a(b,p[c],d)}"true"===n&&(n=(0,r.string32)(65536));b[0]=255&n.charCodeAt(0);b[1]=255&n.charCodeAt(1);b[2]=255&n.charCodeAt(2);b[3]=255&n.charCodeAt(3);e(b,4,g);var y=i.getSearchParams(g,16);e(b,6,y.range);e(b,8,y.entry);e(b,10,y.rangeShift);m=12;for(c=0;c<g;c++){f=o[c];b[m]=255&f.charCodeAt(0);b[m+1]=255&f.charCodeAt(1);b[m+2]=255&f.charCodeAt(2);b[m+3]=255&f.charCodeAt(3);var v=0;for(h=p[c],u=p[c+1];h<u;h+=4){v=v+(0,l.readUint32)(b,h)>>>0}t(b,m+4,v);t(b,m+8,p[c]);t(b,m+12,s[f].length);m+=16}return b},addTable:function(e,t){if(e in this.tables)throw new Error("Table "+e+" already exists");this.tables[e]=t}};return i}(),x=function(){function e(e,t,a){var i;this.name=e;this.loadedName=a.loadedName;this.isType3Font=a.isType3Font;this.sizes=[];this.missingFile=!1;this.glyphCache=Object.create(null);this.isSerifFont=!!(a.flags&m.Serif);this.isSymbolicFont=!!(a.flags&m.Symbolic);this.isMonospace=!!(a.flags&m.FixedPitch);var n=a.type,s=a.subtype;this.type=n;this.subtype=s;let o="sans-serif";this.isMonospace?o="monospace":this.isSerifFont&&(o="serif");this.fallbackName=o;this.differences=a.differences;this.widths=a.widths;this.defaultWidth=a.defaultWidth;this.composite=a.composite;this.wideChars=a.wideChars;this.cMap=a.cMap;this.ascent=a.ascent/1e3;this.descent=a.descent/1e3;this.fontMatrix=a.fontMatrix;this.bbox=a.bbox;this.defaultEncoding=a.defaultEncoding;this.toUnicode=a.toUnicode;this.fallbackToUnicode=a.fallbackToUnicode||new k;this.toFontChar=[];if("Type3"!==a.type){this.cidEncoding=a.cidEncoding;this.vertical=a.vertical;if(this.vertical){this.vmetrics=a.vmetrics;this.defaultVMetrics=a.defaultVMetrics}if(t&&!t.isEmpty){[n,s]=function(e,{type:t,subtype:a,composite:i}){let n,s;if(function(e){var t=e.peekBytes(4);return 65536===(0,l.readUint32)(t,0)||"true"===(0,r.bytesToString)(t)}(e)||I(e))n=i?"CIDFontType2":"TrueType";else if(function(e){var t=e.peekBytes(4);return"OTTO"===(0,r.bytesToString)(t)}(e))n=i?"CIDFontType2":"OpenType";else if(function(e){var t=e.peekBytes(2);if(37===t[0]&&33===t[1])return!0;if(128===t[0]&&1===t[1])return!0;return!1}(e))n=i?"CIDFontType0":"MMType1"===t?"MMType1":"Type1";else if(function(e){const t=e.peekBytes(4);if(t[0]>=1&&t[3]>=1&&t[3]<=4)return!0;return!1}(e))if(i){n="CIDFontType0";s="CIDFontType0C"}else{n="MMType1"===t?"MMType1":"Type1";s="Type1C"}else{(0,r.warn)("getFontFileType: Unable to detect correct font file Type/Subtype.");n=t;s=a}return[n,s]}(t,a);n===this.type&&s===this.subtype||(0,r.info)("Inconsistent font file Type/SubType, expected: "+`${this.type}/${this.subtype} but found: ${n}/${s}.`);try{var c;switch(n){case"MMType1":(0,r.info)("MMType1 font ("+e+"), falling back to Type1.");case"Type1":case"CIDFontType0":this.mimetype="font/opentype";var h="Type1C"===s||"CIDFontType0C"===s?new T(t,a):new F(e,t,a);b(a);c=this.convert(e,h,a);break;case"OpenType":case"TrueType":case"CIDFontType2":this.mimetype="font/opentype";c=this.checkAndRepair(e,t,a);if(this.isOpenType){b(a);n="OpenType"}break;default:throw new r.FormatError(`Font ${n} is not supported`)}}catch(e){(0,r.warn)(e);this.fallbackToSystemFont();return}this.data=c;this.fontType=y(n,s);this.fontMatrix=a.fontMatrix;this.widths=a.widths;this.defaultWidth=a.defaultWidth;this.toUnicode=a.toUnicode;this.encoding=a.baseEncoding;this.seacMap=a.seacMap}else{t&&(0,r.warn)('Font file is empty in "'+e+'" ('+this.loadedName+")");this.fallbackToSystemFont()}}else{for(i=0;i<256;i++)this.toFontChar[i]=this.differences[i]||a.defaultEncoding[i];this.fontType=r.FontType.TYPE3}}e.getFontID=(t=1,function(){return String(t++)});var t;function a(e,t){return(e<<8)+t}function f(e,t){var a=(e<<8)+t;return 32768&a?a-65536:a}function x(e){return String.fromCharCode(e>>8&255,255&e)}function A(e){e>32767?e=32767:e<-32768&&(e=-32768);return String.fromCharCode(e>>8&255,255&e)}function I(e){const t=e.peekBytes(4);return"ttcf"===(0,r.bytesToString)(t)}function E(e,t,a){for(var r,i=[],n=0,s=e.length;n<s;n++)-1!==(r=(0,c.getUnicodeForGlyph)(e[n],t))&&(i[n]=r);for(var o in a)-1!==(r=(0,c.getUnicodeForGlyph)(a[o],t))&&(i[+o]=r);return i}function O(e,t,a){var i=Object.create(null),n=[],s=0,o=g[s][0],c=g[s][1];for(var l in e){var h=e[l|=0];if(t(h)){if(o>c){if(++s>=g.length){(0,r.warn)("Ran out of space in font private use area.");break}o=g[s][0];c=g[s][1]}var u=o++;0===h&&(h=a);i[u]=h;n[l]=u}}return{toFontChar:n,charCodeToGlyphId:i,nextAvailableFontCharCode:o}}function P(e,t){var a,i,n,s,o=function(e,t){var a=[];for(var r in e)e[r]>=t||a.push({fontCharCode:0|r,glyphId:e[r]});0===a.length&&a.push({fontCharCode:0,glyphId:0});a.sort((function(e,t){return e.fontCharCode-t.fontCharCode}));for(var i=[],n=a.length,s=0;s<n;){var o=a[s].fontCharCode,c=[a[s].glyphId];++s;for(var l=o;s<n&&l+1===a[s].fontCharCode;){c.push(a[s].glyphId);++s;if(65535===++l)break}i.push([o,l,c])}return i}(e,t),c=o[o.length-1][1]>65535?2:1,l="\0\0"+x(c)+"\0\0"+(0,r.string32)(4+8*c);for(a=o.length-1;a>=0&&!(o[a][0]<=65535);--a);var h=a+1;o[a][0]<65535&&65535===o[a][1]&&(o[a][1]=65534);var u,d,f,g,m=o[a][1]<65535?1:0,p=h+m,b=C.getSearchParams(p,2),y="",v="",w="",k="",S="",A=0;for(a=0,i=h;a<i;a++){d=(u=o[a])[0];f=u[1];y+=x(d);v+=x(f);var I=!0;for(n=1,s=(g=u[2]).length;n<s;++n)if(g[n]!==g[n-1]+1){I=!1;break}if(I){w+=x(g[0]-d&65535);k+=x(0)}else{var F=2*(p-a)+2*A;A+=f-d+1;w+=x(0);k+=x(F);for(n=0,s=g.length;n<s;++n)S+=x(g[n])}}if(m>0){v+="ÿÿ";y+="ÿÿ";w+="\0";k+="\0\0"}var T="\0\0"+x(2*p)+x(b.range)+x(b.entry)+x(b.rangeShift)+v+"\0\0"+y+w+k+S,E="",O="";if(c>1){l+="\0\0\n"+(0,r.string32)(4+8*c+4+T.length);E="";for(a=0,i=o.length;a<i;a++){d=(u=o[a])[0];var P=(g=u[2])[0];for(n=1,s=g.length;n<s;++n)if(g[n]!==g[n-1]+1){f=u[0]+n-1;E+=(0,r.string32)(d)+(0,r.string32)(f)+(0,r.string32)(P);d=f+1;P=g[n]}E+=(0,r.string32)(d)+(0,r.string32)(u[1])+(0,r.string32)(P)}O="\0\f\0\0"+(0,r.string32)(E.length+16)+"\0\0\0\0"+(0,r.string32)(E.length/12)}return l+"\0"+x(T.length+4)+T+O+E}function B(e,t,a){a=a||{unitsPerEm:0,yMax:0,yMin:0,ascent:0,descent:0};var i=0,n=0,s=0,o=0,l=null,h=0;if(t){for(var u in t){(l>(u|=0)||!l)&&(l=u);h<u&&(h=u);var d=(0,c.getUnicodeRangeFor)(u);if(d<32)i|=1<<d;else if(d<64)n|=1<<d-32;else if(d<96)s|=1<<d-64;else{if(!(d<123))throw new r.FormatError("Unicode ranges Bits > 123 are reserved for internal usage");o|=1<<d-96}}h>65535&&(h=65535)}else{l=0;h=255}var f=e.bbox||[0,0,0,0],g=a.unitsPerEm||1/(e.fontMatrix||r.FONT_IDENTITY_MATRIX)[0],m=e.ascentScaled?1:g/1e3,p=a.ascent||Math.round(m*(e.ascent||f[3])),b=a.descent||Math.round(m*(e.descent||f[1]));b>0&&e.descent>0&&f[1]<0&&(b=-b);var y=a.yMax||p,v=-a.yMin||-b;return"\0$ô\0\0\0»\0\0\0»\0\0ß\x001\0\0\0\0"+String.fromCharCode(e.fixedPitch?9:0)+"\0\0\0\0\0\0"+(0,r.string32)(i)+(0,r.string32)(n)+(0,r.string32)(s)+(0,r.string32)(o)+"*21*"+x(e.italicAngle?1:0)+x(l||e.firstChar)+x(h||e.lastChar)+x(p)+x(b)+"\0d"+x(y)+x(v)+"\0\0\0\0\0\0\0\0"+x(e.xHeight)+x(e.capHeight)+x(0)+x(l||e.firstChar)+"\0"}function D(e){var t=Math.floor(65536*e.italicAngle);return"\0\0\0"+(0,r.string32)(t)+"\0\0\0\0"+(0,r.string32)(e.fixedPitch)+"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}function N(e,t){t||(t=[[],[]]);var a,r,i,n,s,o=[t[0][0]||"Original licence",t[0][1]||e,t[0][2]||"Unknown",t[0][3]||"uniqueID",t[0][4]||e,t[0][5]||"Version 0.11",t[0][6]||"",t[0][7]||"Unknown",t[0][8]||"Unknown",t[0][9]||"Unknown"],c=[];for(a=0,r=o.length;a<r;a++){var l=[];for(i=0,n=(s=t[1][a]||o[a]).length;i<n;i++)l.push(x(s.charCodeAt(i)));c.push(l.join(""))}var h=[o,c],u=["\0","\0"],d=["\0\0","\0"],f=["\0\0","\t"],g=o.length*u.length,m="\0\0"+x(g)+x(12*g+6),p=0;for(a=0,r=u.length;a<r;a++){var b=h[a];for(i=0,n=b.length;i<n;i++){s=b[i];m+=u[a]+d[a]+f[a]+x(i)+x(s.length)+x(p);p+=s.length}}return m+=o.join("")+c.join("")}e.prototype={name:null,font:null,mimetype:null,encoding:null,disableFontFace:!1,get renderer(){var e=h.FontRendererFactory.create(this,!0);return(0,r.shadow)(this,"renderer",e)},exportData:function(){var e={};for(var t in this)this.hasOwnProperty(t)&&(e[t]=this[t]);return e},fallbackToSystemFont:function(){this.missingFile=!0;var e,t,a=this.name,i=this.type,l=this.subtype;let h=a.replace(/[,_]/g,"-").replace(/\s/g,"");var u=(0,o.getStdFontMap)(),d=(0,o.getNonStdFontMap)(),f=!!u[h]||!(!d[h]||!u[d[h]]);h=u[h]||d[h]||h;this.bold=-1!==h.search(/bold/gi);this.italic=-1!==h.search(/oblique/gi)||-1!==h.search(/italic/gi);this.black=-1!==a.search(/Black/g);this.remeasure=Object.keys(this.widths).length>0;if(f&&"CIDFontType2"===i&&this.cidEncoding.startsWith("Identity-")){const t=(0,o.getGlyphMapForStandardFonts)(),r=[];for(e in t)r[+e]=t[e];if(/Arial-?Black/i.test(a)){var g=(0,o.getSupplementalGlyphMapForArialBlack)();for(e in g)r[+e]=g[e]}else if(/Calibri/i.test(a)){const t=(0,o.getSupplementalGlyphMapForCalibri)();for(e in t)r[+e]=t[e]}this.toUnicode instanceof S||this.toUnicode.forEach((function(e,t){r[+e]=t}));this.toFontChar=r;this.toUnicode=new k(r)}else if(/Symbol/i.test(h))this.toFontChar=E(s.SymbolSetEncoding,(0,n.getGlyphsUnicode)(),this.differences);else if(/Dingbats/i.test(h)){/Wingdings/i.test(a)&&(0,r.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats.");this.toFontChar=E(s.ZapfDingbatsEncoding,(0,n.getDingbatsGlyphsUnicode)(),this.differences)}else if(f)this.toFontChar=E(this.defaultEncoding,(0,n.getGlyphsUnicode)(),this.differences);else{const r=(0,n.getGlyphsUnicode)(),i=[];this.toUnicode.forEach((e,a)=>{if(!this.composite){var n=this.differences[e]||this.defaultEncoding[e];-1!==(t=(0,c.getUnicodeForGlyph)(n,r))&&(a=t)}i[+e]=a});if(this.composite&&this.toUnicode instanceof S&&/Verdana/i.test(a)){const t=(0,o.getGlyphMapForStandardFonts)();for(e in t)i[+e]=t[e]}this.toFontChar=i}this.loadedName=h.split("-")[0];this.fontType=y(i,l)},checkAndRepair:function(e,t,o){const c=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function l(e,a){const r=Object.create(null);r["OS/2"]=null;r.cmap=null;r.head=null;r.hhea=null;r.hmtx=null;r.maxp=null;r.name=null;r.post=null;for(let e=0;e<a;e++){const e=h(t);c.includes(e.tag)&&(0!==e.length&&(r[e.tag]=e))}return r}function h(e){var t=(0,r.bytesToString)(e.getBytes(4)),a=e.getInt32()>>>0,i=e.getInt32()>>>0,n=e.getInt32()>>>0,s=e.pos;e.pos=e.start?e.start:0;e.skip(i);var o=e.getBytes(n);e.pos=s;if("head"===t){o[8]=o[9]=o[10]=o[11]=0;o[17]|=32}return{tag:t,checksum:a,length:n,offset:i,data:o}}function g(e){return{version:(0,r.bytesToString)(e.getBytes(4)),numTables:e.getUint16(),searchRange:e.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function m(e,t,a,r,i,n){var s={length:0,sizeOfInstructions:0};if(a-t<=12)return s;var o=e.subarray(t,a),c=f(o[0],o[1]);if(c<0){!function(e,t,a){e[t+1]=a;e[t]=a>>>8}(o,0,c=-1);r.set(o,i);s.length=o.length;return s}var l,h=10,u=0;for(l=0;l<c;l++){u=(o[h]<<8|o[h+1])+1;h+=2}var d=h,g=o[h]<<8|o[h+1];s.sizeOfInstructions=g;var m=h+=2+g,p=0;for(l=0;l<u;l++){var b=o[h++];192&b&&(o[h-1]=63&b);let e=2;2&b?e=1:16&b&&(e=0);let t=2;4&b?t=1:32&b&&(t=0);const a=e+t;p+=a;if(8&b){var y=o[h++];l+=y;p+=y*a}}if(0===p)return s;var v=h+p;if(v>o.length)return s;if(!n&&g>0){r.set(o.subarray(0,d),i);r.set([0,0],i+d);r.set(o.subarray(m,v),i+d+2);v-=g;o.length-v>3&&(v=v+3&-4);s.length=v;return s}if(o.length-v>3){v=v+3&-4;r.set(o.subarray(0,v),i);s.length=v;return s}r.set(o,i);s.length=o.length;return s}function y(e){var a=(t.start?t.start:0)+e.offset;t.pos=a;var i=[[],[]],n=e.length,s=a+n;if(0!==t.getUint16()||n<6)return i;var o,c,l=t.getUint16(),h=t.getUint16(),u=[];for(o=0;o<l&&t.pos+12<=s;o++){var d={platform:t.getUint16(),encoding:t.getUint16(),language:t.getUint16(),name:t.getUint16(),length:t.getUint16(),offset:t.getUint16()};(1===d.platform&&0===d.encoding&&0===d.language||3===d.platform&&1===d.encoding&&1033===d.language)&&u.push(d)}for(o=0,c=u.length;o<c;o++){var f=u[o];if(!(f.length<=0)){var g=a+h+f.offset;if(!(g+f.length>s)){t.pos=g;var m=f.name;if(f.encoding){for(var p="",b=0,y=f.length;b<y;b+=2)p+=String.fromCharCode(t.getUint16());i[1][m]=p}else i[0][m]=(0,r.bytesToString)(t.getBytes(f.length))}}}return i}var w=[0,0,0,0,0,0,0,0,-2,-2,-2,-2,0,0,-2,-5,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,-1,-1,1,-1,-999,0,1,0,-1,-2,0,-1,-2,-1,-1,0,-1,-1,0,0,-999,-999,-1,-1,-1,-1,-2,-999,-2,-2,-999,0,-2,-2,0,0,-2,0,-2,0,0,0,-2,-1,-1,1,1,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,0,-999,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-2,-999,-999,-999,-999,-999,-1,-1,-2,-2,0,0,0,0,-1,-1,-999,-2,-2,0,0,-1,-2,-2,0,0,0,-1,-1,-1,-2];function k(e,t){for(var a,i,n,s,o,c=e.data,l=0,h=0,u=0,d=[],f=[],g=[],m=t.tooComplexToFollowFunctions,p=!1,b=0,y=0,v=c.length;l<v;){var k=c[l++];if(64===k){i=c[l++];if(p||y)l+=i;else for(a=0;a<i;a++)d.push(c[l++])}else if(65===k){i=c[l++];if(p||y)l+=2*i;else for(a=0;a<i;a++){n=c[l++];d.push(n<<8|c[l++])}}else if(176==(248&k)){i=k-176+1;if(p||y)l+=i;else for(a=0;a<i;a++)d.push(c[l++])}else if(184==(248&k)){i=k-184+1;if(p||y)l+=2*i;else for(a=0;a<i;a++){n=c[l++];d.push(n<<8|c[l++])}}else if(43!==k||m)if(44!==k||m){if(45===k)if(p){p=!1;h=l}else{if(!(o=f.pop())){(0,r.warn)("TT: ENDF bad stack");t.hintsValid=!1;return}s=g.pop();c=o.data;l=o.i;t.functionsStackDeltas[s]=d.length-o.stackTop}else if(137===k){if(p||y){(0,r.warn)("TT: nested IDEFs not allowed");m=!0}p=!0;u=l}else if(88===k)++b;else if(27===k)y=b;else if(89===k){y===b&&(y=0);--b}else if(28===k&&!p&&!y){var S=d[d.length-1];S>0&&(l+=S-1)}}else{if(p||y){(0,r.warn)("TT: nested FDEFs not allowed");m=!0}p=!0;u=l;s=d.pop();t.functionsDefined[s]={data:c,i:l}}else if(!p&&!y){s=d[d.length-1];if(isNaN(s))(0,r.info)("TT: CALL empty stack (or invalid entry).");else{t.functionsUsed[s]=!0;if(s in t.functionsStackDeltas){const e=d.length+t.functionsStackDeltas[s];if(e<0){(0,r.warn)("TT: CALL invalid functions stack delta.");t.hintsValid=!1;return}d.length=e}else if(s in t.functionsDefined&&!g.includes(s)){f.push({data:c,i:l,stackTop:d.length-1});g.push(s);if(!(o=t.functionsDefined[s])){(0,r.warn)("TT: CALL non-existent function");t.hintsValid=!1;return}c=o.data;l=o.i}}}if(!p&&!y){let e=0;k<=142?e=w[k]:k>=192&&k<=223?e=-1:k>=224&&(e=-2);if(k>=113&&k<=117){i=d.pop();isNaN(i)||(e=2*-i)}for(;e<0&&d.length>0;){d.pop();e++}for(;e>0;){d.push(NaN);e--}}}t.tooComplexToFollowFunctions=m;var C=[c];l>c.length&&C.push(new Uint8Array(l-c.length));if(u>h){(0,r.warn)("TT: complementing a missing function tail");C.push(new Uint8Array([34,45]))}!function(e,t){if(t.length>1){var a,r,i=0;for(a=0,r=t.length;a<r;a++)i+=t[a].length;i=i+3&-4;var n=new Uint8Array(i),s=0;for(a=0,r=t.length;a<r;a++){n.set(t[a],s);s+=t[a].length}e.data=n;e.length=i}}(e,C)}let S,x,A,F;if(I(t=new d.Stream(new Uint8Array(t.getBytes())))){const e=function(e,t){const{numFonts:a,offsetTable:i}=function(e){const t=(0,r.bytesToString)(e.getBytes(4));(0,r.assert)("ttcf"===t,"Must be a TrueType Collection font.");const a=e.getUint16(),i=e.getUint16(),n=e.getInt32()>>>0,s=[];for(let t=0;t<n;t++)s.push(e.getInt32()>>>0);const o={ttcTag:t,majorVersion:a,minorVersion:i,numFonts:n,offsetTable:s};switch(a){case 1:return o;case 2:o.dsigTag=e.getInt32()>>>0;o.dsigLength=e.getInt32()>>>0;o.dsigOffset=e.getInt32()>>>0;return o}throw new r.FormatError(`Invalid TrueType Collection majorVersion: ${a}.`)}(e);for(let n=0;n<a;n++){e.pos=(e.start||0)+i[n];const a=g(e),s=l(0,a.numTables);if(!s.name)throw new r.FormatError('TrueType Collection font must contain a "name" table.');const o=y(s.name);for(let e=0,r=o.length;e<r;e++)for(let r=0,i=o[e].length;r<i;r++){const i=o[e][r];if(i&&i.replace(/\s/g,"")===t)return{header:a,tables:s}}}throw new r.FormatError(`TrueType Collection does not contain "${t}" font.`)}(t,this.name);S=e.header;x=e.tables}else{S=g(t);x=l(0,S.numTables)}var E=!x["CFF "];if(E){if(!x.loca)throw new r.FormatError('Required "loca" table is not found');if(!x.glyf){(0,r.warn)('Required "glyf" table is not found -- trying to recover.');x.glyf={tag:"glyf",data:new Uint8Array(0)}}this.isOpenType=!1}else{const t=o.composite&&((o.cidToGidMap||[]).length>0||!(o.cMap instanceof u.IdentityCMap));if("OTTO"===S.version&&!t||!x.head||!x.hhea||!x.maxp||!x.post){F=new d.Stream(x["CFF "].data);A=new T(F,o);b(o);return this.convert(e,A,o)}delete x.glyf;delete x.loca;delete x.fpgm;delete x.prep;delete x["cvt "];this.isOpenType=!0}if(!x.maxp)throw new r.FormatError('Required "maxp" table is not found');t.pos=(t.start||0)+x.maxp.offset;var M=t.getInt32();const L=t.getUint16();let R=L+1,U=!0;if(R>65535){U=!1;R=L;(0,r.warn)("Not enough space in glyfs to duplicate first glyph.")}var q=0,j=0;if(M>=65536&&x.maxp.length>=22){t.pos+=8;if(t.getUint16()>2){x.maxp.data[14]=0;x.maxp.data[15]=2}t.pos+=4;q=t.getUint16();t.pos+=4;j=t.getUint16()}x.maxp.data[4]=R>>8;x.maxp.data[5]=255&R;var _=function(e,t,a,i){var n={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};e&&k(e,n);t&&k(t,n);e&&function(e,t){if(!e.tooComplexToFollowFunctions)if(e.functionsDefined.length>t){(0,r.warn)("TT: more functions defined than expected");e.hintsValid=!1}else for(var a=0,i=e.functionsUsed.length;a<i;a++){if(a>t){(0,r.warn)("TT: invalid function id: "+a);e.hintsValid=!1;return}if(e.functionsUsed[a]&&!e.functionsDefined[a]){(0,r.warn)("TT: undefined function: "+a);e.hintsValid=!1;return}}}(n,i);if(a&&1&a.length){var s=new Uint8Array(a.length+1);s.set(a.data);a.data=s}return n.hintsValid}(x.fpgm,x.prep,x["cvt "],q);if(!_){delete x.fpgm;delete x.prep;delete x["cvt "]}!function(e,t,a,i,n){if(t){e.pos=(e.start?e.start:0)+t.offset;e.pos+=4;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=8;e.pos+=2;var s=e.getUint16();if(s>i){(0,r.info)("The numOfMetrics ("+s+") should not be greater than the numGlyphs ("+i+")");s=i;t.data[34]=(65280&s)>>8;t.data[35]=255&s}var o=i-s-(a.length-4*s>>1);if(o>0){var c=new Uint8Array(a.length+2*o);c.set(a.data);if(n){c[a.length]=a.data[2];c[a.length+1]=a.data[3]}a.data=c}}else a&&(a.data=null)}(t,x.hhea,x.hmtx,R,U);if(!x.head)throw new r.FormatError('Required "head" table is not found');!function(e,t,i){var n,s,o,c,l=e.data,h=(n=l[0],s=l[1],o=l[2],c=l[3],(n<<24)+(s<<16)+(o<<8)+c);if(h>>16!=1){(0,r.info)("Attempting to fix invalid version in head table: "+h);l[0]=0;l[1]=1;l[2]=0;l[3]=0}var u=a(l[50],l[51]);if(u<0||u>1){(0,r.info)("Attempting to fix invalid indexToLocFormat in head table: "+u);var d=t+1;if(i===d<<1){l[50]=0;l[51]=0}else{if(i!==d<<2)throw new r.FormatError("Could not fix indexToLocFormat: "+u);l[50]=0;l[51]=1}}}(x.head,L,E?x.loca.length:0);var z=Object.create(null);if(E){var H=a(x.head.data[50],x.head.data[51]),G=function(e,t,a,r,i,n,s){var o,c,l;if(r){o=4;c=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};l=function(e,t,a){e[t]=a>>>24&255;e[t+1]=a>>16&255;e[t+2]=a>>8&255;e[t+3]=255&a}}else{o=2;c=function(e,t){return e[t]<<9|e[t+1]<<1};l=function(e,t,a){e[t]=a>>9&255;e[t+1]=a>>1&255}}var h=n?a+1:a,u=o*(1+h),d=new Uint8Array(u);d.set(e.data.subarray(0,u));e.data=d;var f,g,p=t.data,b=p.length,y=new Uint8Array(b),v=c(d,0),w=0,k=Object.create(null);l(d,0,w);for(f=0,g=o;f<a;f++,g+=o){var S=c(d,g);0===S&&(S=v);S>b&&(b+3&-4)===S&&(S=b);S>b&&(v=S);var C=m(p,v,S,y,w,i),x=C.length;0===x&&(k[f]=!0);C.sizeOfInstructions>s&&(s=C.sizeOfInstructions);l(d,g,w+=x);v=S}if(0===w){var A=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(f=0,g=o;f<h;f++,g+=o)l(d,g,A.length);t.data=A}else if(n){var I=c(d,o);if(y.length>I+w)t.data=y.subarray(0,I+w);else{t.data=new Uint8Array(I+w);t.data.set(y.subarray(0,w))}t.data.set(y.subarray(0,I),w);l(e.data,d.length-o,w+I)}else t.data=y.subarray(0,w);return{missingGlyphs:k,maxSizeOfInstructions:s}}(x.loca,x.glyf,L,H,_,U,j);z=G.missingGlyphs;if(M>=65536&&x.maxp.length>=22){x.maxp.data[26]=G.maxSizeOfInstructions>>8;x.maxp.data[27]=255&G.maxSizeOfInstructions}}if(!x.hhea)throw new r.FormatError('Required "hhea" table is not found');if(0===x.hhea.data[10]&&0===x.hhea.data[11]){x.hhea.data[10]=255;x.hhea.data[11]=255}var W={unitsPerEm:a(x.head.data[18],x.head.data[19]),yMax:a(x.head.data[42],x.head.data[43]),yMin:f(x.head.data[38],x.head.data[39]),ascent:a(x.hhea.data[4],x.hhea.data[5]),descent:f(x.hhea.data[6],x.hhea.data[7])};this.ascent=W.ascent/W.unitsPerEm;this.descent=W.descent/W.unitsPerEm;x.post&&function(e,a,i){var n=(t.start?t.start:0)+e.offset;t.pos=n;var s,o=n+e.length,c=t.getInt32();t.getBytes(28);var l,h=!0;switch(c){case 65536:s=p;break;case 131072:var u=t.getUint16();if(u!==i){h=!1;break}var d=[];for(l=0;l<u;++l){var f=t.getUint16();if(f>=32768){h=!1;break}d.push(f)}if(!h)break;for(var g=[],m=[];t.pos<o;){var b=t.getByte();m.length=b;for(l=0;l<b;++l)m[l]=String.fromCharCode(t.getByte());g.push(m.join(""))}s=[];for(l=0;l<u;++l){var y=d[l];y<258?s.push(p[y]):s.push(g[y-258])}break;case 196608:break;default:(0,r.warn)("Unknown/unsupported post table version "+c);h=!1;a.defaultEncoding&&(s=a.defaultEncoding)}a.glyphNames=s}(x.post,o,L);x.post={tag:"post",data:D(o)};var X,V=[];function K(e){return!z[e]}if(o.composite){var Y=o.cidToGidMap||[],$=0===Y.length;o.cMap.forEach((function(e,t){if(t>65535)throw new r.FormatError("Max size of CID is 65,535");var a=-1;$?a=t:void 0!==Y[t]&&(a=Y[t]);a>=0&&a<L&&K(a)&&(V[e]=a)}))}else{var J=function(e,t,a,i){if(!e){(0,r.warn)("No cmap table available.");return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1}}var n,s=(t.start?t.start:0)+e.offset;t.pos=s;t.getUint16();for(var o,c=t.getUint16(),l=!1,h=0;h<c;h++){var u=t.getUint16(),d=t.getUint16(),f=t.getInt32()>>>0,g=!1;if(!o||o.platformId!==u||o.encodingId!==d){if(0===u&&0===d)g=!0;else if(1===u&&0===d)g=!0;else if(3!==u||1!==d||!i&&o){if(a&&3===u&&0===d){g=!0;l=!0}}else{g=!0;a||(l=!0)}g&&(o={platformId:u,encodingId:d,offset:f});if(l)break}}o&&(t.pos=s+o.offset);if(!o||-1===t.peekByte()){(0,r.warn)("Could not find a preferred cmap table.");return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1}}var m=t.getUint16();t.getUint16();t.getUint16();var p,b,y=!1,v=[];if(0===m){for(p=0;p<256;p++){var w=t.getByte();w&&v.push({charCode:p,glyphId:w})}y=!0}else if(4===m){var k=t.getUint16()>>1;t.getBytes(6);var S,C=[];for(S=0;S<k;S++)C.push({end:t.getUint16()});t.getUint16();for(S=0;S<k;S++)C[S].start=t.getUint16();for(S=0;S<k;S++)C[S].delta=t.getUint16();var x=0;for(S=0;S<k;S++){n=C[S];var A=t.getUint16();if(A){var I=(A>>1)-(k-S);n.offsetIndex=I;x=Math.max(x,I+n.end-n.start+1)}else n.offsetIndex=-1}var F=[];for(p=0;p<x;p++)F.push(t.getUint16());for(S=0;S<k;S++){s=(n=C[S]).start;var T=n.end,E=n.delta;I=n.offsetIndex;for(p=s;p<=T;p++)if(65535!==p){b=(b=I<0?p:F[I+p-s])+E&65535;v.push({charCode:p,glyphId:b})}}}else{if(6!==m){(0,r.warn)("cmap table has unsupported format: "+m);return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1}}var O=t.getUint16(),P=t.getUint16();for(p=0;p<P;p++){b=t.getUint16();var B=O+p;v.push({charCode:B,glyphId:b})}}v.sort((function(e,t){return e.charCode-t.charCode}));for(h=1;h<v.length;h++)if(v[h-1].charCode===v[h].charCode){v.splice(h,1);h--}return{platformId:o.platformId,encodingId:o.encodingId,mappings:v,hasShortCmap:y}}(x.cmap,t,this.isSymbolicFont,o.hasEncoding),Z=J.platformId,Q=J.encodingId,ee=J.mappings,te=ee.length;if(o.hasEncoding&&(3===Z&&1===Q||1===Z&&0===Q)||-1===Z&&-1===Q&&(0,s.getEncoding)(o.baseEncodingName)){var ae=[];"MacRomanEncoding"!==o.baseEncodingName&&"WinAnsiEncoding"!==o.baseEncodingName||(ae=(0,s.getEncoding)(o.baseEncodingName));var re=(0,n.getGlyphsUnicode)();for(X=0;X<256;X++){var ie,ne;if(ie=this.differences&&X in this.differences?this.differences[X]:X in ae&&""!==ae[X]?ae[X]:s.StandardEncoding[X]){ne=v(ie,re);var se;3===Z&&1===Q?se=re[ne]:1===Z&&0===Q&&(se=s.MacRomanEncoding.indexOf(ne));var oe=!1;for(let e=0;e<te;++e)if(ee[e].charCode===se){V[X]=ee[e].glyphId;oe=!0;break}if(!oe&&o.glyphNames){var ce=o.glyphNames.indexOf(ie);-1===ce&&ne!==ie&&(ce=o.glyphNames.indexOf(ne));ce>0&&K(ce)&&(V[X]=ce)}}}}else if(0===Z&&0===Q)for(let e=0;e<te;++e)V[ee[e].charCode]=ee[e].glyphId;else for(let e=0;e<te;++e){X=ee[e].charCode;3===Z&&X>=61440&&X<=61695&&(X&=255);V[X]=ee[e].glyphId}}0===V.length&&(V[0]=0);let le=R-1;U||(le=0);var he=O(V,K,le);this.toFontChar=he.toFontChar;x.cmap={tag:"cmap",data:P(he.charCodeToGlyphId,R)};x["OS/2"]&&function(e){var t=new d.Stream(e.data),a=t.getUint16();t.getBytes(60);var r=t.getUint16();if(a<4&&768&r)return!1;if(t.getUint16()>t.getUint16())return!1;t.getBytes(6);if(0===t.getUint16())return!1;e.data[8]=e.data[9]=0;return!0}(x["OS/2"])||(x["OS/2"]={tag:"OS/2",data:B(o,he.charCodeToGlyphId,W)});if(!E)try{F=new d.Stream(x["CFF "].data);A=new i.CFFParser(F,o,!0).parse();A.duplicateFirstGlyph();var ue=new i.CFFCompiler(A);x["CFF "].data=ue.compile()}catch(e){(0,r.warn)("Failed to compile font "+o.loadedName)}if(x.name){var de=y(x.name);x.name.data=N(e,de)}else x.name={tag:"name",data:N(this.name)};var fe=new C(S.version);for(var ge in x)fe.addTable(ge,x[ge].data);return fe.toArray()},convert:function(e,t,a){a.fixedPitch=!1;a.builtInEncoding&&function(e,t){if(!e.hasIncludedToUnicodeMap&&!(e.hasEncoding||t===e.defaultEncoding||e.toUnicode instanceof S)){var a=[],r=(0,n.getGlyphsUnicode)();for(var i in t){var s=t[i],o=(0,c.getUnicodeForGlyph)(s,r);-1!==o&&(a[i]=String.fromCharCode(o))}e.toUnicode.amend(a)}}(a,a.builtInEncoding);let i=1;t instanceof T&&(i=t.numGlyphs-1);var o=t.getGlyphMapping(a),l=O(o,t.hasGlyphId.bind(t),i);this.toFontChar=l.toFontChar;var h=t.numGlyphs;function u(e,t){var a=null;for(var r in e)if(t===e[r]){a||(a=[]);a.push(0|r)}return a}function d(e,t){for(var a in e)if(t===e[a])return 0|a;l.charCodeToGlyphId[l.nextAvailableFontCharCode]=t;return l.nextAvailableFontCharCode++}var f=t.seacs;if(f&&f.length){var g=a.fontMatrix||r.FONT_IDENTITY_MATRIX,m=t.getCharset(),p=Object.create(null);for(var b in f){var y=f[b|=0],v=s.StandardEncoding[y[2]],w=s.StandardEncoding[y[3]],k=m.indexOf(v),I=m.indexOf(w);if(!(k<0||I<0)){var F={x:y[0]*g[0]+y[1]*g[2]+g[4],y:y[0]*g[1]+y[1]*g[3]+g[5]},E=u(o,b);if(E)for(var M=0,L=E.length;M<L;M++){var R=E[M],U=l.charCodeToGlyphId,q=d(U,k),j=d(U,I);p[R]={baseFontCharCode:q,accentFontCharCode:j,accentOffset:F}}}}a.seacMap=p}var _=1/(a.fontMatrix||r.FONT_IDENTITY_MATRIX)[0],z=new C("OTTO");z.addTable("CFF ",t.data);z.addTable("OS/2",B(a,l.charCodeToGlyphId));z.addTable("cmap",P(l.charCodeToGlyphId,h));z.addTable("head","\0\0\0\0\0\0\0\0\0\0_<õ\0\0"+A(_)+"\0\0\0\0\v~'\0\0\0\0\v~'\0\0"+A(a.descent)+"ÿ"+A(a.ascent)+x(a.italicAngle?2:0)+"\0\0\0\0\0\0\0");z.addTable("hhea","\0\0\0"+A(a.ascent)+A(a.descent)+"\0\0ÿÿ\0\0\0\0\0\0"+A(a.capHeight)+A(Math.tan(a.italicAngle)*a.xHeight)+"\0\0\0\0\0\0\0\0\0\0\0\0"+x(h));z.addTable("hmtx",function(){for(var e=t.charstrings,a=t.cff?t.cff.widths:null,r="\0\0\0\0",i=1,n=h;i<n;i++){var s=0;if(e){var o=e[i-1];s="width"in o?o.width:0}else a&&(s=Math.ceil(a[i]||0));r+=x(s)+x(0)}return r}());z.addTable("maxp","\0\0P\0"+x(h));z.addTable("name",N(e));z.addTable("post",D(a));return z.toArray()},get spaceWidth(){if("_shadowWidth"in this)return this._shadowWidth;for(var e,t=["space","minus","one","i","I"],a=0,r=t.length;a<r;a++){var i=t[a];if(i in this.widths){e=this.widths[i];break}var s=(0,n.getGlyphsUnicode)()[i],o=0;this.composite&&this.cMap.contains(s)&&(o=this.cMap.lookup(s));!o&&this.toUnicode&&(o=this.toUnicode.charCodeOf(s));o<=0&&(o=s);if(e=this.widths[o])break}e=e||this.defaultWidth;this._shadowWidth=e;return e},charToGlyph:function(e,t){var a,i,n,s=e;this.cMap&&this.cMap.contains(e)&&(s=this.cMap.lookup(e));i=this.widths[s];i=(0,r.isNum)(i)?i:this.defaultWidth;var o=this.vmetrics&&this.vmetrics[s];let l=this.toUnicode.get(e)||this.fallbackToUnicode.get(e)||e;"number"==typeof l&&(l=String.fromCharCode(l));var h=e in this.toFontChar;a=this.toFontChar[e]||e;if(this.missingFile){const t=this.differences[e]||this.defaultEncoding[e];".notdef"!==t&&""!==t||"Type1"!==this.type||(a=32);a=(0,c.mapSpecialUnicodeValues)(a)}this.isType3Font&&(n=a);var u=null;if(this.seacMap&&this.seacMap[e]){h=!0;var d=this.seacMap[e];a=d.baseFontCharCode;u={fontChar:String.fromCodePoint(d.accentFontCharCode),offset:d.accentOffset}}var f="number"==typeof a?String.fromCodePoint(a):"",g=this.glyphCache[e];if(!g||!g.matchesForCache(f,l,u,i,o,n,t,h)){g=new w(f,l,u,i,o,n,t,h);this.glyphCache[e]=g}return g},charsToGlyphs:function(e){var t,a,r,i=this.charsCache;if(i&&(t=i[e]))return t;i||(i=this.charsCache=Object.create(null));t=[];var n,s=e,o=0;if(this.cMap)for(var c=Object.create(null);o<e.length;){this.cMap.readCharCode(e,o,c);r=c.charcode;var l=c.length;o+=l;var h=1===l&&32===e.charCodeAt(o-1);a=this.charToGlyph(r,h);t.push(a)}else for(o=0,n=e.length;o<n;++o){r=e.charCodeAt(o);a=this.charToGlyph(r,32===r);t.push(a)}return i[s]=t},get glyphCacheValues(){return Object.values(this.glyphCache)}};return e}();t.Font=x;var A=function(){function e(e){this.error=e;this.loadedName="g_font_error";this.missingFile=!0}e.prototype={charsToGlyphs:function(){return[]},exportData:function(){return{error:this.error}}};return e}();t.ErrorFont=A;function I(e,t,a){var r,i,o,c=Object.create(null),l=!!(e.flags&m.Symbolic);if(e.baseEncodingName){o=(0,s.getEncoding)(e.baseEncodingName);for(i=0;i<o.length;i++){r=a.indexOf(o[i]);c[i]=r>=0?r:0}}else if(l)for(i in t)c[i]=t[i];else{o=s.StandardEncoding;for(i=0;i<o.length;i++){r=a.indexOf(o[i]);c[i]=r>=0?r:0}}var h,u=e.differences;if(u)for(i in u){var d=u[i];if(-1===(r=a.indexOf(d))){h||(h=(0,n.getGlyphsUnicode)());var f=v(d,h);f!==d&&(r=a.indexOf(f))}c[i]=r>=0?r:0}return c}var F=function(){function e(e,t,a){for(var r,i=e.length,n=t.length,s=i-n,o=a,c=!1;o<s;){r=0;for(;r<n&&e[o+r]===t[r];)r++;if(r>=n){o+=r;for(;o<i&&(0,l.isWhiteSpace)(e[o]);)o++;c=!0;break}o++}return{found:c,length:o}}function t(t,a,i){var n=i.length1,s=(i.length2,a.peekBytes(6)),o=128===s[0]&&1===s[1];if(o){a.skip(6);n=s[5]<<24|s[4]<<16|s[3]<<8|s[2]}var c=function(t,a){var i,n,s,o,c=[101,101,120,101,99],h=t.pos;try{n=(i=t.getBytes(a)).length}catch(e){if(e instanceof l.MissingDataException)throw e}if(n===a&&(s=e(i,c,a-2*c.length)).found&&s.length===a)return{stream:new d.Stream(i),length:a};(0,r.warn)('Invalid "Length1" property in Type1 font -- trying to recover.');t.pos=h;for(;;){if(0===(s=e(t.peekBytes(2048),c,0)).length)break;t.pos+=s.length;if(s.found){o=t.pos-h;break}}t.pos=h;if(o)return{stream:new d.Stream(t.getBytes(o)),length:o};(0,r.warn)('Unable to recover "Length1" property in Type1 font -- using as is.');return{stream:new d.Stream(t.getBytes(a)),length:a}}(a,n);new f.Type1Parser(c.stream,!1,!0).extractFontHeader(i);o&&(s=a.getBytes(6))[5]<<24|s[4]<<16|s[3]<<8|s[2];var h,u=(h=a.getBytes(),{stream:new d.Stream(h),length:h.length}),g=new f.Type1Parser(u.stream,!0,!0).extractFontProgram(i);for(var m in g.properties)i[m]=g.properties[m];var p=g.charstrings,b=this.getType2Charstrings(p),y=this.getType2Subrs(g.subrs);this.charstrings=p;this.data=this.wrap(t,b,this.charstrings,y,i);this.seacs=this.getSeacs(g.charstrings)}t.prototype={get numGlyphs(){return this.charstrings.length+1},getCharset:function(){for(var e=[".notdef"],t=this.charstrings,a=0;a<t.length;a++)e.push(t[a].glyphName);return e},getGlyphMapping:function(e){var t,a=this.charstrings,r=[".notdef"];for(t=0;t<a.length;t++)r.push(a[t].glyphName);var i=e.builtInEncoding;if(i){var n=Object.create(null);for(var s in i)(t=r.indexOf(i[s]))>=0&&(n[s]=t)}return I(e,n,r)},hasGlyphId:function(e){return!(e<0||e>=this.numGlyphs)&&(0===e||this.charstrings[e-1].charstring.length>0)},getSeacs:function(e){var t,a,r=[];for(t=0,a=e.length;t<a;t++){var i=e[t];i.seac&&(r[t+1]=i.seac)}return r},getType2Charstrings:function(e){for(var t=[],a=0,r=e.length;a<r;a++)t.push(e[a].charstring);return t},getType2Subrs:function(e){var t=0,a=e.length;t=a<1133?107:a<33769?1131:32768;var r,i=[];for(r=0;r<t;r++)i.push([11]);for(r=0;r<a;r++)i.push(e[r]);return i},wrap:function(e,t,a,r,n){var s=new i.CFF;s.header=new i.CFFHeader(1,0,4,4);s.names=[e];var o=new i.CFFTopDict;o.setByName("version",391);o.setByName("Notice",392);o.setByName("FullName",393);o.setByName("FamilyName",394);o.setByName("Weight",395);o.setByName("Encoding",null);o.setByName("FontMatrix",n.fontMatrix);o.setByName("FontBBox",n.bbox);o.setByName("charset",null);o.setByName("CharStrings",null);o.setByName("Private",null);s.topDict=o;var c=new i.CFFStrings;c.add("Version 0.11");c.add("See original notice");c.add(e);c.add(e);c.add("Medium");s.strings=c;s.globalSubrIndex=new i.CFFIndex;var l,h,u=t.length,d=[".notdef"];for(l=0;l<u;l++){const e=a[l].glyphName;-1===i.CFFStandardStrings.indexOf(e)&&c.add(e);d.push(e)}s.charset=new i.CFFCharset(!1,0,d);var f=new i.CFFIndex;f.add([139,14]);for(l=0;l<u;l++)f.add(t[l]);s.charStrings=f;var g=new i.CFFPrivateDict;g.setByName("Subrs",null);var m=["BlueValues","OtherBlues","FamilyBlues","FamilyOtherBlues","StemSnapH","StemSnapV","BlueShift","BlueFuzz","BlueScale","LanguageGroup","ExpansionFactor","ForceBold","StdHW","StdVW"];for(l=0,h=m.length;l<h;l++){var p=m[l];if(p in n.privateData){var b=n.privateData[p];if(Array.isArray(b))for(var y=b.length-1;y>0;y--)b[y]-=b[y-1];g.setByName(p,b)}}s.topDict.privateDict=g;var v=new i.CFFIndex;for(l=0,h=r.length;l<h;l++)v.add(r[l]);g.subrsIndex=v;return new i.CFFCompiler(s).compile()}};return t}(),T=function(){function e(e,t){this.properties=t;var a=new i.CFFParser(e,t,!0);this.cff=a.parse();this.cff.duplicateFirstGlyph();var n=new i.CFFCompiler(this.cff);this.seacs=this.cff.seacs;try{this.data=n.compile()}catch(a){(0,r.warn)("Failed to compile font "+t.loadedName);this.data=e}}e.prototype={get numGlyphs(){return this.cff.charStrings.count},getCharset:function(){return this.cff.charset.charset},getGlyphMapping:function(){var e,t,a=this.cff,r=this.properties,i=a.charset.charset;if(r.composite){e=Object.create(null);let s;if(a.isCIDFont)for(t=0;t<i.length;t++){var n=i[t];s=r.cMap.charCodeOf(n);e[s]=t}else for(t=0;t<a.charStrings.count;t++){s=r.cMap.charCodeOf(t);e[s]=t}return e}return e=I(r,a.encoding?a.encoding.encoding:null,i)},hasGlyphId:function(e){return this.cff.hasGlyphId(e)}};return e}()},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.CFFFDSelect=t.CFFCompiler=t.CFFPrivateDict=t.CFFTopDict=t.CFFCharset=t.CFFIndex=t.CFFStrings=t.CFFHeader=t.CFF=t.CFFParser=t.CFFStandardStrings=void 0;var r=a(2),i=a(29),n=a(30),s=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"];t.CFFStandardStrings=s;var o=function(){var e=[null,{id:"hstem",min:2,stackClearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1,undefStack:!0},{id:"return",min:0,undefStack:!0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackClearing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1,undefStack:!0},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],t=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,stackDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn:function(e,t){e[t-2]=e[t-2]+e[t-1]}},{id:"sub",min:2,stackDelta:-1,stackFn:function(e,t){e[t-2]=e[t-2]-e[t-1]}},{id:"div",min:2,stackDelta:-1,stackFn:function(e,t){e[t-2]=e[t-2]/e[t-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn:function(e,t){e[t-1]=-e[t-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn:function(e,t){e[t-2]=e[t-2]*e[t-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}];function a(e,t,a){this.bytes=e.getBytes();this.properties=t;this.seacAnalysisEnabled=!!a}a.prototype={parse:function(){var e=this.properties,t=new c;this.cff=t;var a=this.parseHeader(),r=this.parseIndex(a.endPos),i=this.parseIndex(r.endPos),n=this.parseIndex(i.endPos),s=this.parseIndex(n.endPos),o=this.parseDict(i.obj.get(0)),l=this.createDict(f,o,t.strings);t.header=a.obj;t.names=this.parseNameIndex(r.obj);t.strings=this.parseStringIndex(n.obj);t.topDict=l;t.globalSubrIndex=s.obj;this.parsePrivateDict(t.topDict);t.isCIDFont=l.hasName("ROS");var h=l.getByName("CharStrings"),u=this.parseIndex(h).obj,d=l.getByName("FontMatrix");d&&(e.fontMatrix=d);var g,m,p=l.getByName("FontBBox");if(p){e.ascent=Math.max(p[3],p[1]);e.descent=Math.min(p[1],p[3]);e.ascentScaled=!0}if(t.isCIDFont){for(var b=this.parseIndex(l.getByName("FDArray")).obj,y=0,v=b.count;y<v;++y){var w=b.get(y),k=this.createDict(f,this.parseDict(w),t.strings);this.parsePrivateDict(k);t.fdArray.push(k)}m=null;g=this.parseCharsets(l.getByName("charset"),u.count,t.strings,!0);t.fdSelect=this.parseFDSelect(l.getByName("FDSelect"),u.count)}else{g=this.parseCharsets(l.getByName("charset"),u.count,t.strings,!1);m=this.parseEncoding(l.getByName("Encoding"),e,t.strings,g.charset)}t.charset=g;t.encoding=m;var S=this.parseCharStrings({charStrings:u,localSubrIndex:l.privateDict.subrsIndex,globalSubrIndex:s.obj,fdSelect:t.fdSelect,fdArray:t.fdArray,privateDict:l.privateDict});t.charStrings=S.charStrings;t.seacs=S.seacs;t.widths=S.widths;return t},parseHeader:function(){for(var e=this.bytes,t=e.length,a=0;a<t&&1!==e[a];)++a;if(a>=t)throw new r.FormatError("Invalid CFF header");if(0!==a){(0,r.info)("cff data is shifted");e=e.subarray(a);this.bytes=e}var i=e[0],n=e[1],s=e[2],o=e[3];return{obj:new l(i,n,s,o),endPos:s}},parseDict:function(e){var t=0;function a(){var a=e[t++];if(30===a)return function(){var a="";const r=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"];var i=e.length;for(;t<i;){var n=e[t++],s=n>>4,o=15&n;if(15===s)break;a+=r[s];if(15===o)break;a+=r[o]}return parseFloat(a)}();if(28===a)return a=((a=e[t++])<<24|e[t++]<<16)>>16;if(29===a)return a=(a=(a=(a=e[t++])<<8|e[t++])<<8|e[t++])<<8|e[t++];if(a>=32&&a<=246)return a-139;if(a>=247&&a<=250)return 256*(a-247)+e[t++]+108;if(a>=251&&a<=254)return-256*(a-251)-e[t++]-108;(0,r.warn)('CFFParser_parseDict: "'+a+'" is a reserved command.');return NaN}var i=[],n=[];t=0;for(var s=e.length;t<s;){var o=e[t];if(o<=21){12===o&&(o=o<<8|e[++t]);n.push([o,i]);i=[];++t}else i.push(a())}return n},parseIndex:function(e){var t,a,r=new u,i=this.bytes,n=i[e++]<<8|i[e++],s=[],o=e;if(0!==n){var c=i[e++],l=e+(n+1)*c-1;for(t=0,a=n+1;t<a;++t){for(var h=0,d=0;d<c;++d){h<<=8;h+=i[e++]}s.push(l+h)}o=s[n]}for(t=0,a=s.length-1;t<a;++t){var f=s[t],g=s[t+1];r.add(i.subarray(f,g))}return{obj:r,endPos:o}},parseNameIndex:function(e){for(var t=[],a=0,i=e.count;a<i;++a){var n=e.get(a);t.push((0,r.bytesToString)(n))}return t},parseStringIndex:function(e){for(var t=new h,a=0,i=e.count;a<i;++a){var n=e.get(a);t.add((0,r.bytesToString)(n))}return t},createDict:function(e,t,a){for(var r=new e(a),i=0,n=t.length;i<n;++i){var s=t[i],o=s[0],c=s[1];r.setByKey(o,c)}return r},parseCharString:function(a,i,n,s){if(!i||a.callDepth>10)return!1;for(var o=a.stackSize,c=a.stack,l=i.length,h=0;h<l;){var u=i[h++],d=null;if(12===u){var f=i[h++];if(0===f){i[h-2]=139;i[h-1]=22;o=0}else d=t[f]}else if(28===u){c[o]=(i[h]<<24|i[h+1]<<16)>>16;h+=2;o++}else if(14===u){if(o>=4){o-=4;if(this.seacAnalysisEnabled){a.seac=c.slice(o,o+4);return!1}}d=e[u]}else if(u>=32&&u<=246){c[o]=u-139;o++}else if(u>=247&&u<=254){c[o]=u<251?(u-247<<8)+i[h]+108:-(u-251<<8)-i[h]-108;h++;o++}else if(255===u){c[o]=(i[h]<<24|i[h+1]<<16|i[h+2]<<8|i[h+3])/65536;h+=4;o++}else if(19===u||20===u){a.hints+=o>>1;h+=a.hints+7>>3;o%=2;d=e[u]}else{if(10===u||29===u){var g;if(!(g=10===u?n:s)){d=e[u];(0,r.warn)("Missing subrsIndex for "+d.id);return!1}var m=32768;g.count<1240?m=107:g.count<33900&&(m=1131);var p=c[--o]+m;if(p<0||p>=g.count||isNaN(p)){d=e[u];(0,r.warn)("Out of bounds subrIndex for "+d.id);return!1}a.stackSize=o;a.callDepth++;if(!this.parseCharString(a,g.get(p),n,s))return!1;a.callDepth--;o=a.stackSize;continue}if(11===u){a.stackSize=o;return!0}d=e[u]}if(d){if(d.stem){a.hints+=o>>1;if(3===u||23===u)a.hasVStems=!0;else if(a.hasVStems&&(1===u||18===u)){(0,r.warn)("CFF stem hints are in wrong order");i[h-1]=1===u?3:23}}if("min"in d&&!a.undefStack&&o<d.min){(0,r.warn)("Not enough parameters for "+d.id+"; actual: "+o+", expected: "+d.min);return!1}if(a.firstStackClearing&&d.stackClearing){a.firstStackClearing=!1;(o-=d.min)>=2&&d.stem?o%=2:o>1&&(0,r.warn)("Found too many parameters for stack-clearing command");o>0&&c[o-1]>=0&&(a.width=c[o-1])}if("stackDelta"in d){"stackFn"in d&&d.stackFn(c,o);o+=d.stackDelta}else if(d.stackClearing)o=0;else if(d.resetStack){o=0;a.undefStack=!1}else if(d.undefStack){o=0;a.undefStack=!0;a.firstStackClearing=!1}}}a.stackSize=o;return!0},parseCharStrings({charStrings:e,localSubrIndex:t,globalSubrIndex:a,fdSelect:i,fdArray:n,privateDict:s}){for(var o=[],c=[],l=e.count,h=0;h<l;h++){var u=e.get(h),d={callDepth:0,stackSize:0,stack:[],undefStack:!0,hints:0,firstStackClearing:!0,seac:null,width:null,hasVStems:!1},f=!0,g=null,m=s;if(i&&n.length){var p=i.getFDIndex(h);if(-1===p){(0,r.warn)("Glyph index is not in fd select.");f=!1}if(p>=n.length){(0,r.warn)("Invalid fd index for glyph index.");f=!1}f&&(g=(m=n[p].privateDict).subrsIndex)}else t&&(g=t);f&&(f=this.parseCharString(d,u,g,a));if(null!==d.width){const e=m.getByName("nominalWidthX");c[h]=e+d.width}else{const e=m.getByName("defaultWidthX");c[h]=e}null!==d.seac&&(o[h]=d.seac);f||e.set(h,new Uint8Array([14]))}return{charStrings:e,seacs:o,widths:c}},emptyPrivateDictionary:function(e){var t=this.createDict(g,[],e.strings);e.setByKey(18,[0,0]);e.privateDict=t},parsePrivateDict:function(e){if(e.hasName("Private")){var t=e.getByName("Private");if(Array.isArray(t)&&2===t.length){var a=t[0],r=t[1];if(0===a||r>=this.bytes.length)this.emptyPrivateDictionary(e);else{var i=r+a,n=this.bytes.subarray(r,i),s=this.parseDict(n),o=this.createDict(g,s,e.strings);e.privateDict=o;if(o.getByName("Subrs")){var c=o.getByName("Subrs"),l=r+c;if(0===c||l>=this.bytes.length)this.emptyPrivateDictionary(e);else{var h=this.parseIndex(l);o.subrsIndex=h.obj}}}}else e.removeByName("Private")}else this.emptyPrivateDictionary(e)},parseCharsets:function(e,t,a,n){if(0===e)return new p(!0,m.ISO_ADOBE,i.ISOAdobeCharset);if(1===e)return new p(!0,m.EXPERT,i.ExpertCharset);if(2===e)return new p(!0,m.EXPERT_SUBSET,i.ExpertSubsetCharset);var s,o,c,l=this.bytes,h=e,u=l[e++],d=[".notdef"];t-=1;switch(u){case 0:for(c=0;c<t;c++){s=l[e++]<<8|l[e++];d.push(n?s:a.get(s))}break;case 1:for(;d.length<=t;){s=l[e++]<<8|l[e++];o=l[e++];for(c=0;c<=o;c++)d.push(n?s++:a.get(s++))}break;case 2:for(;d.length<=t;){s=l[e++]<<8|l[e++];o=l[e++]<<8|l[e++];for(c=0;c<=o;c++)d.push(n?s++:a.get(s++))}break;default:throw new r.FormatError("Unknown charset format")}var f=e,g=l.subarray(h,f);return new p(!1,u,d,g)},parseEncoding:function(e,t,a,i){var s,o,c,l=Object.create(null),h=this.bytes,u=!1,d=null;if(0===e||1===e){u=!0;s=e;var f=e?n.ExpertEncoding:n.StandardEncoding;for(o=0,c=i.length;o<c;o++){var g=f.indexOf(i[o]);-1!==g&&(l[g]=o)}}else{var m=e;switch(127&(s=h[e++])){case 0:var p=h[e++];for(o=1;o<=p;o++)l[h[e++]]=o;break;case 1:var y=h[e++],v=1;for(o=0;o<y;o++)for(var w=h[e++],k=h[e++],S=w;S<=w+k;S++)l[S]=v++;break;default:throw new r.FormatError(`Unknown encoding format: ${s} in CFF`)}var C=e;if(128&s){h[m]&=127;!function(){var t=h[e++];for(o=0;o<t;o++){var r=h[e++],n=(h[e++]<<8)+(255&h[e++]);l[r]=i.indexOf(a.get(n))}}()}d=h.subarray(m,C)}return new b(u,s&=127,l,d)},parseFDSelect:function(e,t){var a,i=this.bytes,n=i[e++],s=[];switch(n){case 0:for(a=0;a<t;++a){var o=i[e++];s.push(o)}break;case 3:var c=i[e++]<<8|i[e++];for(a=0;a<c;++a){var l=i[e++]<<8|i[e++];if(0===a&&0!==l){(0,r.warn)("parseFDSelect: The first range must have a first GID of 0 -- trying to recover.");l=0}for(var h=i[e++],u=i[e]<<8|i[e+1],d=l;d<u;++d)s.push(h)}e+=2;break;default:throw new r.FormatError(`parseFDSelect: Unknown format "${n}".`)}if(s.length!==t)throw new r.FormatError("parseFDSelect: Invalid font data.");return new y(n,s)}};return a}();t.CFFParser=o;var c=function(){function e(){this.header=null;this.names=[];this.topDict=null;this.strings=new h;this.globalSubrIndex=null;this.encoding=null;this.charset=null;this.charStrings=null;this.fdArray=[];this.fdSelect=null;this.isCIDFont=!1}e.prototype={duplicateFirstGlyph:function(){if(this.charStrings.count>=65535)(0,r.warn)("Not enough space in charstrings to duplicate first glyph.");else{var e=this.charStrings.get(0);this.charStrings.add(e);this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}},hasGlyphId:function(e){return!(e<0||e>=this.charStrings.count)&&this.charStrings.get(e).length>0}};return e}();t.CFF=c;var l=function(e,t,a,r){this.major=e;this.minor=t;this.hdrSize=a;this.offSize=r};t.CFFHeader=l;var h=function(){function e(){this.strings=[]}e.prototype={get:function(e){return e>=0&&e<=390?s[e]:e-391<=this.strings.length?this.strings[e-391]:s[0]},getSID:function(e){let t=s.indexOf(e);if(-1!==t)return t;t=this.strings.indexOf(e);return-1!==t?t+391:-1},add:function(e){this.strings.push(e)},get count(){return this.strings.length}};return e}();t.CFFStrings=h;var u=function(){function e(){this.objects=[];this.length=0}e.prototype={add:function(e){this.length+=e.length;this.objects.push(e)},set:function(e,t){this.length+=t.length-this.objects[e].length;this.objects[e]=t},get:function(e){return this.objects[e]},get count(){return this.objects.length}};return e}();t.CFFIndex=u;var d=function(){function e(e,t){this.keyToNameMap=e.keyToNameMap;this.nameToKeyMap=e.nameToKeyMap;this.defaults=e.defaults;this.types=e.types;this.opcodes=e.opcodes;this.order=e.order;this.strings=t;this.values=Object.create(null)}e.prototype={setByKey:function(e,t){if(!(e in this.keyToNameMap))return!1;var a=t.length;if(0===a)return!0;for(var i=0;i<a;i++)if(isNaN(t[i])){(0,r.warn)('Invalid CFFDict value: "'+t+'" for key "'+e+'".');return!0}var n=this.types[e];"num"!==n&&"sid"!==n&&"offset"!==n||(t=t[0]);this.values[e]=t;return!0},setByName:function(e,t){if(!(e in this.nameToKeyMap))throw new r.FormatError(`Invalid dictionary name "${e}"`);this.values[this.nameToKeyMap[e]]=t},hasName:function(e){return this.nameToKeyMap[e]in this.values},getByName:function(e){if(!(e in this.nameToKeyMap))throw new r.FormatError(`Invalid dictionary name ${e}"`);var t=this.nameToKeyMap[e];return t in this.values?this.values[t]:this.defaults[t]},removeByName:function(e){delete this.values[this.nameToKeyMap[e]]}};e.createTables=function(e){for(var t={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]},a=0,r=e.length;a<r;++a){var i=e[a],n=Array.isArray(i[0])?(i[0][0]<<8)+i[0][1]:i[0];t.keyToNameMap[n]=i[1];t.nameToKeyMap[i[1]]=n;t.types[n]=i[2];t.defaults[n]=i[3];t.opcodes[n]=Array.isArray(i[0])?i[0]:[i[0]];t.order.push(n)}return t};return e}(),f=function(){var e=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]],t=null;function a(a){null===t&&(t=d.createTables(e));d.call(this,t,a);this.privateDict=null}a.prototype=Object.create(d.prototype);return a}();t.CFFTopDict=f;var g=function(){var e=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]],t=null;function a(a){null===t&&(t=d.createTables(e));d.call(this,t,a);this.subrsIndex=null}a.prototype=Object.create(d.prototype);return a}();t.CFFPrivateDict=g;var m={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2},p=function(e,t,a,r){this.predefined=e;this.format=t;this.charset=a;this.raw=r};t.CFFCharset=p;var b=function(e,t,a,r){this.predefined=e;this.format=t;this.encoding=a;this.raw=r},y=function(){function e(e,t){this.format=e;this.fdSelect=t}e.prototype={getFDIndex:function(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]}};return e}();t.CFFFDSelect=y;var v=function(){function e(){this.offsets=Object.create(null)}e.prototype={isTracking:function(e){return e in this.offsets},track:function(e,t){if(e in this.offsets)throw new r.FormatError(`Already tracking location of ${e}`);this.offsets[e]=t},offset:function(e){for(var t in this.offsets)this.offsets[t]+=e},setEntryLocation:function(e,t,a){if(!(e in this.offsets))throw new r.FormatError(`Not tracking location of ${e}`);for(var i=a.data,n=this.offsets[e],s=0,o=t.length;s<o;++s){var c=5*s+n,l=c+1,h=c+2,u=c+3,d=c+4;if(29!==i[c]||0!==i[l]||0!==i[h]||0!==i[u]||0!==i[d])throw new r.FormatError("writing to an offset that is not empty");var f=t[s];i[c]=29;i[l]=f>>24&255;i[h]=f>>16&255;i[u]=f>>8&255;i[d]=255&f}}};return e}(),w=function(){function e(e){this.cff=e}e.prototype={compile:function(){var e=this.cff,t={data:[],length:0,add:function(e){this.data=this.data.concat(e);this.length=this.data.length}},a=this.compileHeader(e.header);t.add(a);var i=this.compileNameIndex(e.names);t.add(i);if(e.isCIDFont&&e.topDict.hasName("FontMatrix")){var n=e.topDict.getByName("FontMatrix");e.topDict.removeByName("FontMatrix");for(var s=0,o=e.fdArray.length;s<o;s++){var c=e.fdArray[s],l=n.slice(0);c.hasName("FontMatrix")&&(l=r.Util.transform(l,c.getByName("FontMatrix")));c.setByName("FontMatrix",l)}}e.topDict.setByName("charset",0);var h=this.compileTopDicts([e.topDict],t.length,e.isCIDFont);t.add(h.output);var u=h.trackers[0],d=this.compileStringIndex(e.strings.strings);t.add(d);var f=this.compileIndex(e.globalSubrIndex);t.add(f);if(e.encoding&&e.topDict.hasName("Encoding"))if(e.encoding.predefined)u.setEntryLocation("Encoding",[e.encoding.format],t);else{var g=this.compileEncoding(e.encoding);u.setEntryLocation("Encoding",[t.length],t);t.add(g)}var m=this.compileCharset(e.charset,e.charStrings.count,e.strings,e.isCIDFont);u.setEntryLocation("charset",[t.length],t);t.add(m);var p=this.compileCharStrings(e.charStrings);u.setEntryLocation("CharStrings",[t.length],t);t.add(p);if(e.isCIDFont){u.setEntryLocation("FDSelect",[t.length],t);var b=this.compileFDSelect(e.fdSelect);t.add(b);h=this.compileTopDicts(e.fdArray,t.length,!0);u.setEntryLocation("FDArray",[t.length],t);t.add(h.output);var y=h.trackers;this.compilePrivateDicts(e.fdArray,y,t)}this.compilePrivateDicts([e.topDict],[u],t);t.add([0]);return t.data},encodeNumber:function(e){return parseFloat(e)!==parseInt(e,10)||isNaN(e)?this.encodeFloat(e):this.encodeInteger(e)},encodeFloat:function(e){var t=e.toString(),a=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(t);if(a){var r=parseFloat("1e"+((a[2]?+a[2]:0)+a[1].length));t=(Math.round(e*r)/r).toString()}var i,n,s="";for(i=0,n=t.length;i<n;++i){var o=t[i];s+="e"===o?"-"===t[++i]?"c":"b":"."===o?"a":"-"===o?"e":o}var c=[30];for(i=0,n=(s+=1&s.length?"f":"ff").length;i<n;i+=2)c.push(parseInt(s.substring(i,i+2),16));return c},encodeInteger:function(e){return e>=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=108)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?[28,e>>8&255,255&e]:[29,e>>24&255,e>>16&255,e>>8&255,255&e]},compileHeader:function(e){return[e.major,e.minor,e.hdrSize,e.offSize]},compileNameIndex:function(e){for(var t=new u,a=0,i=e.length;a<i;++a){for(var n=e[a],s=Math.min(n.length,127),o=new Array(s),c=0;c<s;c++){var l=n[c];(l<"!"||l>"~"||"["===l||"]"===l||"("===l||")"===l||"{"===l||"}"===l||"<"===l||">"===l||"/"===l||"%"===l)&&(l="_");o[c]=l}""===(o=o.join(""))&&(o="Bad_Font_Name");t.add((0,r.stringToBytes)(o))}return this.compileIndex(t)},compileTopDicts:function(e,t,a){for(var r=[],i=new u,n=0,s=e.length;n<s;++n){var o=e[n];if(a){o.removeByName("CIDFontVersion");o.removeByName("CIDFontRevision");o.removeByName("CIDFontType");o.removeByName("CIDCount");o.removeByName("UIDBase")}var c=new v,l=this.compileDict(o,c);r.push(c);i.add(l);c.offset(t)}return{trackers:r,output:i=this.compileIndex(i,r)}},compilePrivateDicts:function(e,t,a){for(var i=0,n=e.length;i<n;++i){var s=e[i],o=s.privateDict;if(!o||!s.hasName("Private"))throw new r.FormatError("There must be a private dictionary.");var c=new v,l=this.compileDict(o,c),h=a.length;c.offset(h);l.length||(h=0);t[i].setEntryLocation("Private",[l.length,h],a);a.add(l);if(o.subrsIndex&&o.hasName("Subrs")){var u=this.compileIndex(o.subrsIndex);c.setEntryLocation("Subrs",[l.length],a);a.add(u)}}},compileDict:function(e,t){for(var a=[],i=e.order,n=0;n<i.length;++n){var s=i[n];if(s in e.values){var o=e.values[s],c=e.types[s];Array.isArray(c)||(c=[c]);Array.isArray(o)||(o=[o]);if(0!==o.length){for(var l=0,h=c.length;l<h;++l){var u=c[l],d=o[l];switch(u){case"num":case"sid":a=a.concat(this.encodeNumber(d));break;case"offset":var f=e.keyToNameMap[s];t.isTracking(f)||t.track(f,a.length);a=a.concat([29,0,0,0,0]);break;case"array":case"delta":a=a.concat(this.encodeNumber(d));for(var g=1,m=o.length;g<m;++g)a=a.concat(this.encodeNumber(o[g]));break;default:throw new r.FormatError(`Unknown data type of ${u}`)}}a=a.concat(e.opcodes[s])}}}return a},compileStringIndex:function(e){for(var t=new u,a=0,i=e.length;a<i;++a)t.add((0,r.stringToBytes)(e[a]));return this.compileIndex(t)},compileGlobalSubrIndex:function(){var e=this.cff.globalSubrIndex;this.out.writeByteArray(this.compileIndex(e))},compileCharStrings:function(e){for(var t=new u,a=0;a<e.count;a++){var r=e.get(a);0!==r.length?t.add(r):t.add(new Uint8Array([139,14]))}return this.compileIndex(t)},compileCharset:function(e,t,a,i){let n;const s=t-1;if(i)n=new Uint8Array([2,0,0,s>>8&255,255&s]);else{n=new Uint8Array(1+2*s);n[0]=0;let t=0;const i=e.charset.length;let o=!1;for(let s=1;s<n.length;s+=2){let c=0;if(t<i){const i=e.charset[t++];c=a.getSID(i);if(-1===c){c=0;if(!o){o=!0;(0,r.warn)(`Couldn't find ${i} in CFF strings`)}}}n[s]=c>>8&255;n[s+1]=255&c}}return this.compileTypedArray(n)},compileEncoding:function(e){return this.compileTypedArray(e.raw)},compileFDSelect:function(e){const t=e.format;let a,r;switch(t){case 0:a=new Uint8Array(1+e.fdSelect.length);a[0]=t;for(r=0;r<e.fdSelect.length;r++)a[r+1]=e.fdSelect[r];break;case 3:const i=0;let n=e.fdSelect[0];const s=[t,0,0,i>>8&255,255&i,n];for(r=1;r<e.fdSelect.length;r++){const t=e.fdSelect[r];if(t!==n){s.push(r>>8&255,255&r,t);n=t}}const o=(s.length-3)/3;s[1]=o>>8&255;s[2]=255&o;s.push(r>>8&255,255&r);a=new Uint8Array(s)}return this.compileTypedArray(a)},compileTypedArray:function(e){for(var t=[],a=0,r=e.length;a<r;++a)t[a]=e[a];return t},compileIndex:function(e,t){t=t||[];var a=e.objects,r=a.length;if(0===r)return[0,0,0];var i,n,s=[r>>8&255,255&r],o=1;for(i=0;i<r;++i)o+=a[i].length;n=o<256?1:o<65536?2:o<16777216?3:4;s.push(n);var c=1;for(i=0;i<r+1;i++){1===n?s.push(255&c):2===n?s.push(c>>8&255,255&c):3===n?s.push(c>>16&255,c>>8&255,255&c):s.push(c>>>24&255,c>>16&255,c>>8&255,255&c);a[i]&&(c+=a[i].length)}for(i=0;i<r;i++){t[i]&&t[i].offset(s.length);for(var l=0,h=a[i].length;l<h;l++)s.push(a[i][l])}return s}};return e}();t.CFFCompiler=w},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.ExpertSubsetCharset=t.ExpertCharset=t.ISOAdobeCharset=void 0;t.ISOAdobeCharset=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"];t.ExpertCharset=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"];t.ExpertSubsetCharset=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"]},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.getEncoding=function(e){switch(e){case"WinAnsiEncoding":return o;case"StandardEncoding":return s;case"MacRomanEncoding":return n;case"SymbolSetEncoding":return c;case"ZapfDingbatsEncoding":return l;case"ExpertEncoding":return r;case"MacExpertEncoding":return i;default:return null}};t.ExpertEncoding=t.ZapfDingbatsEncoding=t.SymbolSetEncoding=t.MacRomanEncoding=t.StandardEncoding=t.WinAnsiEncoding=void 0;const r=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"];t.ExpertEncoding=r;const i=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],n=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"];t.MacRomanEncoding=n;const s=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""];t.StandardEncoding=s;const o=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"];t.WinAnsiEncoding=o;const c=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""];t.SymbolSetEncoding=c;const l=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];t.ZapfDingbatsEncoding=l},function(e,t,a){var r=a(7).getLookupTableFactory,i=r((function(e){e.A=65;e.AE=198;e.AEacute=508;e.AEmacron=482;e.AEsmall=63462;e.Aacute=193;e.Aacutesmall=63457;e.Abreve=258;e.Abreveacute=7854;e.Abrevecyrillic=1232;e.Abrevedotbelow=7862;e.Abrevegrave=7856;e.Abrevehookabove=7858;e.Abrevetilde=7860;e.Acaron=461;e.Acircle=9398;e.Acircumflex=194;e.Acircumflexacute=7844;e.Acircumflexdotbelow=7852;e.Acircumflexgrave=7846;e.Acircumflexhookabove=7848;e.Acircumflexsmall=63458;e.Acircumflextilde=7850;e.Acute=63177;e.Acutesmall=63412;e.Acyrillic=1040;e.Adblgrave=512;e.Adieresis=196;e.Adieresiscyrillic=1234;e.Adieresismacron=478;e.Adieresissmall=63460;e.Adotbelow=7840;e.Adotmacron=480;e.Agrave=192;e.Agravesmall=63456;e.Ahookabove=7842;e.Aiecyrillic=1236;e.Ainvertedbreve=514;e.Alpha=913;e.Alphatonos=902;e.Amacron=256;e.Amonospace=65313;e.Aogonek=260;e.Aring=197;e.Aringacute=506;e.Aringbelow=7680;e.Aringsmall=63461;e.Asmall=63329;e.Atilde=195;e.Atildesmall=63459;e.Aybarmenian=1329;e.B=66;e.Bcircle=9399;e.Bdotaccent=7682;e.Bdotbelow=7684;e.Becyrillic=1041;e.Benarmenian=1330;e.Beta=914;e.Bhook=385;e.Blinebelow=7686;e.Bmonospace=65314;e.Brevesmall=63220;e.Bsmall=63330;e.Btopbar=386;e.C=67;e.Caarmenian=1342;e.Cacute=262;e.Caron=63178;e.Caronsmall=63221;e.Ccaron=268;e.Ccedilla=199;e.Ccedillaacute=7688;e.Ccedillasmall=63463;e.Ccircle=9400;e.Ccircumflex=264;e.Cdot=266;e.Cdotaccent=266;e.Cedillasmall=63416;e.Chaarmenian=1353;e.Cheabkhasiancyrillic=1212;e.Checyrillic=1063;e.Chedescenderabkhasiancyrillic=1214;e.Chedescendercyrillic=1206;e.Chedieresiscyrillic=1268;e.Cheharmenian=1347;e.Chekhakassiancyrillic=1227;e.Cheverticalstrokecyrillic=1208;e.Chi=935;e.Chook=391;e.Circumflexsmall=63222;e.Cmonospace=65315;e.Coarmenian=1361;e.Csmall=63331;e.D=68;e.DZ=497;e.DZcaron=452;e.Daarmenian=1332;e.Dafrican=393;e.Dcaron=270;e.Dcedilla=7696;e.Dcircle=9401;e.Dcircumflexbelow=7698;e.Dcroat=272;e.Ddotaccent=7690;e.Ddotbelow=7692;e.Decyrillic=1044;e.Deicoptic=1006;e.Delta=8710;e.Deltagreek=916;e.Dhook=394;e.Dieresis=63179;e.DieresisAcute=63180;e.DieresisGrave=63181;e.Dieresissmall=63400;e.Digammagreek=988;e.Djecyrillic=1026;e.Dlinebelow=7694;e.Dmonospace=65316;e.Dotaccentsmall=63223;e.Dslash=272;e.Dsmall=63332;e.Dtopbar=395;e.Dz=498;e.Dzcaron=453;e.Dzeabkhasiancyrillic=1248;e.Dzecyrillic=1029;e.Dzhecyrillic=1039;e.E=69;e.Eacute=201;e.Eacutesmall=63465;e.Ebreve=276;e.Ecaron=282;e.Ecedillabreve=7708;e.Echarmenian=1333;e.Ecircle=9402;e.Ecircumflex=202;e.Ecircumflexacute=7870;e.Ecircumflexbelow=7704;e.Ecircumflexdotbelow=7878;e.Ecircumflexgrave=7872;e.Ecircumflexhookabove=7874;e.Ecircumflexsmall=63466;e.Ecircumflextilde=7876;e.Ecyrillic=1028;e.Edblgrave=516;e.Edieresis=203;e.Edieresissmall=63467;e.Edot=278;e.Edotaccent=278;e.Edotbelow=7864;e.Efcyrillic=1060;e.Egrave=200;e.Egravesmall=63464;e.Eharmenian=1335;e.Ehookabove=7866;e.Eightroman=8551;e.Einvertedbreve=518;e.Eiotifiedcyrillic=1124;e.Elcyrillic=1051;e.Elevenroman=8554;e.Emacron=274;e.Emacronacute=7702;e.Emacrongrave=7700;e.Emcyrillic=1052;e.Emonospace=65317;e.Encyrillic=1053;e.Endescendercyrillic=1186;e.Eng=330;e.Enghecyrillic=1188;e.Enhookcyrillic=1223;e.Eogonek=280;e.Eopen=400;e.Epsilon=917;e.Epsilontonos=904;e.Ercyrillic=1056;e.Ereversed=398;e.Ereversedcyrillic=1069;e.Escyrillic=1057;e.Esdescendercyrillic=1194;e.Esh=425;e.Esmall=63333;e.Eta=919;e.Etarmenian=1336;e.Etatonos=905;e.Eth=208;e.Ethsmall=63472;e.Etilde=7868;e.Etildebelow=7706;e.Euro=8364;e.Ezh=439;e.Ezhcaron=494;e.Ezhreversed=440;e.F=70;e.Fcircle=9403;e.Fdotaccent=7710;e.Feharmenian=1366;e.Feicoptic=996;e.Fhook=401;e.Fitacyrillic=1138;e.Fiveroman=8548;e.Fmonospace=65318;e.Fourroman=8547;e.Fsmall=63334;e.G=71;e.GBsquare=13191;e.Gacute=500;e.Gamma=915;e.Gammaafrican=404;e.Gangiacoptic=1002;e.Gbreve=286;e.Gcaron=486;e.Gcedilla=290;e.Gcircle=9404;e.Gcircumflex=284;e.Gcommaaccent=290;e.Gdot=288;e.Gdotaccent=288;e.Gecyrillic=1043;e.Ghadarmenian=1346;e.Ghemiddlehookcyrillic=1172;e.Ghestrokecyrillic=1170;e.Gheupturncyrillic=1168;e.Ghook=403;e.Gimarmenian=1331;e.Gjecyrillic=1027;e.Gmacron=7712;e.Gmonospace=65319;e.Grave=63182;e.Gravesmall=63328;e.Gsmall=63335;e.Gsmallhook=667;e.Gstroke=484;e.H=72;e.H18533=9679;e.H18543=9642;e.H18551=9643;e.H22073=9633;e.HPsquare=13259;e.Haabkhasiancyrillic=1192;e.Hadescendercyrillic=1202;e.Hardsigncyrillic=1066;e.Hbar=294;e.Hbrevebelow=7722;e.Hcedilla=7720;e.Hcircle=9405;e.Hcircumflex=292;e.Hdieresis=7718;e.Hdotaccent=7714;e.Hdotbelow=7716;e.Hmonospace=65320;e.Hoarmenian=1344;e.Horicoptic=1e3;e.Hsmall=63336;e.Hungarumlaut=63183;e.Hungarumlautsmall=63224;e.Hzsquare=13200;e.I=73;e.IAcyrillic=1071;e.IJ=306;e.IUcyrillic=1070;e.Iacute=205;e.Iacutesmall=63469;e.Ibreve=300;e.Icaron=463;e.Icircle=9406;e.Icircumflex=206;e.Icircumflexsmall=63470;e.Icyrillic=1030;e.Idblgrave=520;e.Idieresis=207;e.Idieresisacute=7726;e.Idieresiscyrillic=1252;e.Idieresissmall=63471;e.Idot=304;e.Idotaccent=304;e.Idotbelow=7882;e.Iebrevecyrillic=1238;e.Iecyrillic=1045;e.Ifraktur=8465;e.Igrave=204;e.Igravesmall=63468;e.Ihookabove=7880;e.Iicyrillic=1048;e.Iinvertedbreve=522;e.Iishortcyrillic=1049;e.Imacron=298;e.Imacroncyrillic=1250;e.Imonospace=65321;e.Iniarmenian=1339;e.Iocyrillic=1025;e.Iogonek=302;e.Iota=921;e.Iotaafrican=406;e.Iotadieresis=938;e.Iotatonos=906;e.Ismall=63337;e.Istroke=407;e.Itilde=296;e.Itildebelow=7724;e.Izhitsacyrillic=1140;e.Izhitsadblgravecyrillic=1142;e.J=74;e.Jaarmenian=1345;e.Jcircle=9407;e.Jcircumflex=308;e.Jecyrillic=1032;e.Jheharmenian=1355;e.Jmonospace=65322;e.Jsmall=63338;e.K=75;e.KBsquare=13189;e.KKsquare=13261;e.Kabashkircyrillic=1184;e.Kacute=7728;e.Kacyrillic=1050;e.Kadescendercyrillic=1178;e.Kahookcyrillic=1219;e.Kappa=922;e.Kastrokecyrillic=1182;e.Kaverticalstrokecyrillic=1180;e.Kcaron=488;e.Kcedilla=310;e.Kcircle=9408;e.Kcommaaccent=310;e.Kdotbelow=7730;e.Keharmenian=1364;e.Kenarmenian=1343;e.Khacyrillic=1061;e.Kheicoptic=998;e.Khook=408;e.Kjecyrillic=1036;e.Klinebelow=7732;e.Kmonospace=65323;e.Koppacyrillic=1152;e.Koppagreek=990;e.Ksicyrillic=1134;e.Ksmall=63339;e.L=76;e.LJ=455;e.LL=63167;e.Lacute=313;e.Lambda=923;e.Lcaron=317;e.Lcedilla=315;e.Lcircle=9409;e.Lcircumflexbelow=7740;e.Lcommaaccent=315;e.Ldot=319;e.Ldotaccent=319;e.Ldotbelow=7734;e.Ldotbelowmacron=7736;e.Liwnarmenian=1340;e.Lj=456;e.Ljecyrillic=1033;e.Llinebelow=7738;e.Lmonospace=65324;e.Lslash=321;e.Lslashsmall=63225;e.Lsmall=63340;e.M=77;e.MBsquare=13190;e.Macron=63184;e.Macronsmall=63407;e.Macute=7742;e.Mcircle=9410;e.Mdotaccent=7744;e.Mdotbelow=7746;e.Menarmenian=1348;e.Mmonospace=65325;e.Msmall=63341;e.Mturned=412;e.Mu=924;e.N=78;e.NJ=458;e.Nacute=323;e.Ncaron=327;e.Ncedilla=325;e.Ncircle=9411;e.Ncircumflexbelow=7754;e.Ncommaaccent=325;e.Ndotaccent=7748;e.Ndotbelow=7750;e.Nhookleft=413;e.Nineroman=8552;e.Nj=459;e.Njecyrillic=1034;e.Nlinebelow=7752;e.Nmonospace=65326;e.Nowarmenian=1350;e.Nsmall=63342;e.Ntilde=209;e.Ntildesmall=63473;e.Nu=925;e.O=79;e.OE=338;e.OEsmall=63226;e.Oacute=211;e.Oacutesmall=63475;e.Obarredcyrillic=1256;e.Obarreddieresiscyrillic=1258;e.Obreve=334;e.Ocaron=465;e.Ocenteredtilde=415;e.Ocircle=9412;e.Ocircumflex=212;e.Ocircumflexacute=7888;e.Ocircumflexdotbelow=7896;e.Ocircumflexgrave=7890;e.Ocircumflexhookabove=7892;e.Ocircumflexsmall=63476;e.Ocircumflextilde=7894;e.Ocyrillic=1054;e.Odblacute=336;e.Odblgrave=524;e.Odieresis=214;e.Odieresiscyrillic=1254;e.Odieresissmall=63478;e.Odotbelow=7884;e.Ogoneksmall=63227;e.Ograve=210;e.Ogravesmall=63474;e.Oharmenian=1365;e.Ohm=8486;e.Ohookabove=7886;e.Ohorn=416;e.Ohornacute=7898;e.Ohorndotbelow=7906;e.Ohorngrave=7900;e.Ohornhookabove=7902;e.Ohorntilde=7904;e.Ohungarumlaut=336;e.Oi=418;e.Oinvertedbreve=526;e.Omacron=332;e.Omacronacute=7762;e.Omacrongrave=7760;e.Omega=8486;e.Omegacyrillic=1120;e.Omegagreek=937;e.Omegaroundcyrillic=1146;e.Omegatitlocyrillic=1148;e.Omegatonos=911;e.Omicron=927;e.Omicrontonos=908;e.Omonospace=65327;e.Oneroman=8544;e.Oogonek=490;e.Oogonekmacron=492;e.Oopen=390;e.Oslash=216;e.Oslashacute=510;e.Oslashsmall=63480;e.Osmall=63343;e.Ostrokeacute=510;e.Otcyrillic=1150;e.Otilde=213;e.Otildeacute=7756;e.Otildedieresis=7758;e.Otildesmall=63477;e.P=80;e.Pacute=7764;e.Pcircle=9413;e.Pdotaccent=7766;e.Pecyrillic=1055;e.Peharmenian=1354;e.Pemiddlehookcyrillic=1190;e.Phi=934;e.Phook=420;e.Pi=928;e.Piwrarmenian=1363;e.Pmonospace=65328;e.Psi=936;e.Psicyrillic=1136;e.Psmall=63344;e.Q=81;e.Qcircle=9414;e.Qmonospace=65329;e.Qsmall=63345;e.R=82;e.Raarmenian=1356;e.Racute=340;e.Rcaron=344;e.Rcedilla=342;e.Rcircle=9415;e.Rcommaaccent=342;e.Rdblgrave=528;e.Rdotaccent=7768;e.Rdotbelow=7770;e.Rdotbelowmacron=7772;e.Reharmenian=1360;e.Rfraktur=8476;e.Rho=929;e.Ringsmall=63228;e.Rinvertedbreve=530;e.Rlinebelow=7774;e.Rmonospace=65330;e.Rsmall=63346;e.Rsmallinverted=641;e.Rsmallinvertedsuperior=694;e.S=83;e.SF010000=9484;e.SF020000=9492;e.SF030000=9488;e.SF040000=9496;e.SF050000=9532;e.SF060000=9516;e.SF070000=9524;e.SF080000=9500;e.SF090000=9508;e.SF100000=9472;e.SF110000=9474;e.SF190000=9569;e.SF200000=9570;e.SF210000=9558;e.SF220000=9557;e.SF230000=9571;e.SF240000=9553;e.SF250000=9559;e.SF260000=9565;e.SF270000=9564;e.SF280000=9563;e.SF360000=9566;e.SF370000=9567;e.SF380000=9562;e.SF390000=9556;e.SF400000=9577;e.SF410000=9574;e.SF420000=9568;e.SF430000=9552;e.SF440000=9580;e.SF450000=9575;e.SF460000=9576;e.SF470000=9572;e.SF480000=9573;e.SF490000=9561;e.SF500000=9560;e.SF510000=9554;e.SF520000=9555;e.SF530000=9579;e.SF540000=9578;e.Sacute=346;e.Sacutedotaccent=7780;e.Sampigreek=992;e.Scaron=352;e.Scarondotaccent=7782;e.Scaronsmall=63229;e.Scedilla=350;e.Schwa=399;e.Schwacyrillic=1240;e.Schwadieresiscyrillic=1242;e.Scircle=9416;e.Scircumflex=348;e.Scommaaccent=536;e.Sdotaccent=7776;e.Sdotbelow=7778;e.Sdotbelowdotaccent=7784;e.Seharmenian=1357;e.Sevenroman=8550;e.Shaarmenian=1351;e.Shacyrillic=1064;e.Shchacyrillic=1065;e.Sheicoptic=994;e.Shhacyrillic=1210;e.Shimacoptic=1004;e.Sigma=931;e.Sixroman=8549;e.Smonospace=65331;e.Softsigncyrillic=1068;e.Ssmall=63347;e.Stigmagreek=986;e.T=84;e.Tau=932;e.Tbar=358;e.Tcaron=356;e.Tcedilla=354;e.Tcircle=9417;e.Tcircumflexbelow=7792;e.Tcommaaccent=354;e.Tdotaccent=7786;e.Tdotbelow=7788;e.Tecyrillic=1058;e.Tedescendercyrillic=1196;e.Tenroman=8553;e.Tetsecyrillic=1204;e.Theta=920;e.Thook=428;e.Thorn=222;e.Thornsmall=63486;e.Threeroman=8546;e.Tildesmall=63230;e.Tiwnarmenian=1359;e.Tlinebelow=7790;e.Tmonospace=65332;e.Toarmenian=1337;e.Tonefive=444;e.Tonesix=388;e.Tonetwo=423;e.Tretroflexhook=430;e.Tsecyrillic=1062;e.Tshecyrillic=1035;e.Tsmall=63348;e.Twelveroman=8555;e.Tworoman=8545;e.U=85;e.Uacute=218;e.Uacutesmall=63482;e.Ubreve=364;e.Ucaron=467;e.Ucircle=9418;e.Ucircumflex=219;e.Ucircumflexbelow=7798;e.Ucircumflexsmall=63483;e.Ucyrillic=1059;e.Udblacute=368;e.Udblgrave=532;e.Udieresis=220;e.Udieresisacute=471;e.Udieresisbelow=7794;e.Udieresiscaron=473;e.Udieresiscyrillic=1264;e.Udieresisgrave=475;e.Udieresismacron=469;e.Udieresissmall=63484;e.Udotbelow=7908;e.Ugrave=217;e.Ugravesmall=63481;e.Uhookabove=7910;e.Uhorn=431;e.Uhornacute=7912;e.Uhorndotbelow=7920;e.Uhorngrave=7914;e.Uhornhookabove=7916;e.Uhorntilde=7918;e.Uhungarumlaut=368;e.Uhungarumlautcyrillic=1266;e.Uinvertedbreve=534;e.Ukcyrillic=1144;e.Umacron=362;e.Umacroncyrillic=1262;e.Umacrondieresis=7802;e.Umonospace=65333;e.Uogonek=370;e.Upsilon=933;e.Upsilon1=978;e.Upsilonacutehooksymbolgreek=979;e.Upsilonafrican=433;e.Upsilondieresis=939;e.Upsilondieresishooksymbolgreek=980;e.Upsilonhooksymbol=978;e.Upsilontonos=910;e.Uring=366;e.Ushortcyrillic=1038;e.Usmall=63349;e.Ustraightcyrillic=1198;e.Ustraightstrokecyrillic=1200;e.Utilde=360;e.Utildeacute=7800;e.Utildebelow=7796;e.V=86;e.Vcircle=9419;e.Vdotbelow=7806;e.Vecyrillic=1042;e.Vewarmenian=1358;e.Vhook=434;e.Vmonospace=65334;e.Voarmenian=1352;e.Vsmall=63350;e.Vtilde=7804;e.W=87;e.Wacute=7810;e.Wcircle=9420;e.Wcircumflex=372;e.Wdieresis=7812;e.Wdotaccent=7814;e.Wdotbelow=7816;e.Wgrave=7808;e.Wmonospace=65335;e.Wsmall=63351;e.X=88;e.Xcircle=9421;e.Xdieresis=7820;e.Xdotaccent=7818;e.Xeharmenian=1341;e.Xi=926;e.Xmonospace=65336;e.Xsmall=63352;e.Y=89;e.Yacute=221;e.Yacutesmall=63485;e.Yatcyrillic=1122;e.Ycircle=9422;e.Ycircumflex=374;e.Ydieresis=376;e.Ydieresissmall=63487;e.Ydotaccent=7822;e.Ydotbelow=7924;e.Yericyrillic=1067;e.Yerudieresiscyrillic=1272;e.Ygrave=7922;e.Yhook=435;e.Yhookabove=7926;e.Yiarmenian=1349;e.Yicyrillic=1031;e.Yiwnarmenian=1362;e.Ymonospace=65337;e.Ysmall=63353;e.Ytilde=7928;e.Yusbigcyrillic=1130;e.Yusbigiotifiedcyrillic=1132;e.Yuslittlecyrillic=1126;e.Yuslittleiotifiedcyrillic=1128;e.Z=90;e.Zaarmenian=1334;e.Zacute=377;e.Zcaron=381;e.Zcaronsmall=63231;e.Zcircle=9423;e.Zcircumflex=7824;e.Zdot=379;e.Zdotaccent=379;e.Zdotbelow=7826;e.Zecyrillic=1047;e.Zedescendercyrillic=1176;e.Zedieresiscyrillic=1246;e.Zeta=918;e.Zhearmenian=1338;e.Zhebrevecyrillic=1217;e.Zhecyrillic=1046;e.Zhedescendercyrillic=1174;e.Zhedieresiscyrillic=1244;e.Zlinebelow=7828;e.Zmonospace=65338;e.Zsmall=63354;e.Zstroke=437;e.a=97;e.aabengali=2438;e.aacute=225;e.aadeva=2310;e.aagujarati=2694;e.aagurmukhi=2566;e.aamatragurmukhi=2622;e.aarusquare=13059;e.aavowelsignbengali=2494;e.aavowelsigndeva=2366;e.aavowelsigngujarati=2750;e.abbreviationmarkarmenian=1375;e.abbreviationsigndeva=2416;e.abengali=2437;e.abopomofo=12570;e.abreve=259;e.abreveacute=7855;e.abrevecyrillic=1233;e.abrevedotbelow=7863;e.abrevegrave=7857;e.abrevehookabove=7859;e.abrevetilde=7861;e.acaron=462;e.acircle=9424;e.acircumflex=226;e.acircumflexacute=7845;e.acircumflexdotbelow=7853;e.acircumflexgrave=7847;e.acircumflexhookabove=7849;e.acircumflextilde=7851;e.acute=180;e.acutebelowcmb=791;e.acutecmb=769;e.acutecomb=769;e.acutedeva=2388;e.acutelowmod=719;e.acutetonecmb=833;e.acyrillic=1072;e.adblgrave=513;e.addakgurmukhi=2673;e.adeva=2309;e.adieresis=228;e.adieresiscyrillic=1235;e.adieresismacron=479;e.adotbelow=7841;e.adotmacron=481;e.ae=230;e.aeacute=509;e.aekorean=12624;e.aemacron=483;e.afii00208=8213;e.afii08941=8356;e.afii10017=1040;e.afii10018=1041;e.afii10019=1042;e.afii10020=1043;e.afii10021=1044;e.afii10022=1045;e.afii10023=1025;e.afii10024=1046;e.afii10025=1047;e.afii10026=1048;e.afii10027=1049;e.afii10028=1050;e.afii10029=1051;e.afii10030=1052;e.afii10031=1053;e.afii10032=1054;e.afii10033=1055;e.afii10034=1056;e.afii10035=1057;e.afii10036=1058;e.afii10037=1059;e.afii10038=1060;e.afii10039=1061;e.afii10040=1062;e.afii10041=1063;e.afii10042=1064;e.afii10043=1065;e.afii10044=1066;e.afii10045=1067;e.afii10046=1068;e.afii10047=1069;e.afii10048=1070;e.afii10049=1071;e.afii10050=1168;e.afii10051=1026;e.afii10052=1027;e.afii10053=1028;e.afii10054=1029;e.afii10055=1030;e.afii10056=1031;e.afii10057=1032;e.afii10058=1033;e.afii10059=1034;e.afii10060=1035;e.afii10061=1036;e.afii10062=1038;e.afii10063=63172;e.afii10064=63173;e.afii10065=1072;e.afii10066=1073;e.afii10067=1074;e.afii10068=1075;e.afii10069=1076;e.afii10070=1077;e.afii10071=1105;e.afii10072=1078;e.afii10073=1079;e.afii10074=1080;e.afii10075=1081;e.afii10076=1082;e.afii10077=1083;e.afii10078=1084;e.afii10079=1085;e.afii10080=1086;e.afii10081=1087;e.afii10082=1088;e.afii10083=1089;e.afii10084=1090;e.afii10085=1091;e.afii10086=1092;e.afii10087=1093;e.afii10088=1094;e.afii10089=1095;e.afii10090=1096;e.afii10091=1097;e.afii10092=1098;e.afii10093=1099;e.afii10094=1100;e.afii10095=1101;e.afii10096=1102;e.afii10097=1103;e.afii10098=1169;e.afii10099=1106;e.afii10100=1107;e.afii10101=1108;e.afii10102=1109;e.afii10103=1110;e.afii10104=1111;e.afii10105=1112;e.afii10106=1113;e.afii10107=1114;e.afii10108=1115;e.afii10109=1116;e.afii10110=1118;e.afii10145=1039;e.afii10146=1122;e.afii10147=1138;e.afii10148=1140;e.afii10192=63174;e.afii10193=1119;e.afii10194=1123;e.afii10195=1139;e.afii10196=1141;e.afii10831=63175;e.afii10832=63176;e.afii10846=1241;e.afii299=8206;e.afii300=8207;e.afii301=8205;e.afii57381=1642;e.afii57388=1548;e.afii57392=1632;e.afii57393=1633;e.afii57394=1634;e.afii57395=1635;e.afii57396=1636;e.afii57397=1637;e.afii57398=1638;e.afii57399=1639;e.afii57400=1640;e.afii57401=1641;e.afii57403=1563;e.afii57407=1567;e.afii57409=1569;e.afii57410=1570;e.afii57411=1571;e.afii57412=1572;e.afii57413=1573;e.afii57414=1574;e.afii57415=1575;e.afii57416=1576;e.afii57417=1577;e.afii57418=1578;e.afii57419=1579;e.afii57420=1580;e.afii57421=1581;e.afii57422=1582;e.afii57423=1583;e.afii57424=1584;e.afii57425=1585;e.afii57426=1586;e.afii57427=1587;e.afii57428=1588;e.afii57429=1589;e.afii57430=1590;e.afii57431=1591;e.afii57432=1592;e.afii57433=1593;e.afii57434=1594;e.afii57440=1600;e.afii57441=1601;e.afii57442=1602;e.afii57443=1603;e.afii57444=1604;e.afii57445=1605;e.afii57446=1606;e.afii57448=1608;e.afii57449=1609;e.afii57450=1610;e.afii57451=1611;e.afii57452=1612;e.afii57453=1613;e.afii57454=1614;e.afii57455=1615;e.afii57456=1616;e.afii57457=1617;e.afii57458=1618;e.afii57470=1607;e.afii57505=1700;e.afii57506=1662;e.afii57507=1670;e.afii57508=1688;e.afii57509=1711;e.afii57511=1657;e.afii57512=1672;e.afii57513=1681;e.afii57514=1722;e.afii57519=1746;e.afii57534=1749;e.afii57636=8362;e.afii57645=1470;e.afii57658=1475;e.afii57664=1488;e.afii57665=1489;e.afii57666=1490;e.afii57667=1491;e.afii57668=1492;e.afii57669=1493;e.afii57670=1494;e.afii57671=1495;e.afii57672=1496;e.afii57673=1497;e.afii57674=1498;e.afii57675=1499;e.afii57676=1500;e.afii57677=1501;e.afii57678=1502;e.afii57679=1503;e.afii57680=1504;e.afii57681=1505;e.afii57682=1506;e.afii57683=1507;e.afii57684=1508;e.afii57685=1509;e.afii57686=1510;e.afii57687=1511;e.afii57688=1512;e.afii57689=1513;e.afii57690=1514;e.afii57694=64298;e.afii57695=64299;e.afii57700=64331;e.afii57705=64287;e.afii57716=1520;e.afii57717=1521;e.afii57718=1522;e.afii57723=64309;e.afii57793=1460;e.afii57794=1461;e.afii57795=1462;e.afii57796=1467;e.afii57797=1464;e.afii57798=1463;e.afii57799=1456;e.afii57800=1458;e.afii57801=1457;e.afii57802=1459;e.afii57803=1474;e.afii57804=1473;e.afii57806=1465;e.afii57807=1468;e.afii57839=1469;e.afii57841=1471;e.afii57842=1472;e.afii57929=700;e.afii61248=8453;e.afii61289=8467;e.afii61352=8470;e.afii61573=8236;e.afii61574=8237;e.afii61575=8238;e.afii61664=8204;e.afii63167=1645;e.afii64937=701;e.agrave=224;e.agujarati=2693;e.agurmukhi=2565;e.ahiragana=12354;e.ahookabove=7843;e.aibengali=2448;e.aibopomofo=12574;e.aideva=2320;e.aiecyrillic=1237;e.aigujarati=2704;e.aigurmukhi=2576;e.aimatragurmukhi=2632;e.ainarabic=1593;e.ainfinalarabic=65226;e.aininitialarabic=65227;e.ainmedialarabic=65228;e.ainvertedbreve=515;e.aivowelsignbengali=2504;e.aivowelsigndeva=2376;e.aivowelsigngujarati=2760;e.akatakana=12450;e.akatakanahalfwidth=65393;e.akorean=12623;e.alef=1488;e.alefarabic=1575;e.alefdageshhebrew=64304;e.aleffinalarabic=65166;e.alefhamzaabovearabic=1571;e.alefhamzaabovefinalarabic=65156;e.alefhamzabelowarabic=1573;e.alefhamzabelowfinalarabic=65160;e.alefhebrew=1488;e.aleflamedhebrew=64335;e.alefmaddaabovearabic=1570;e.alefmaddaabovefinalarabic=65154;e.alefmaksuraarabic=1609;e.alefmaksurafinalarabic=65264;e.alefmaksurainitialarabic=65267;e.alefmaksuramedialarabic=65268;e.alefpatahhebrew=64302;e.alefqamatshebrew=64303;e.aleph=8501;e.allequal=8780;e.alpha=945;e.alphatonos=940;e.amacron=257;e.amonospace=65345;e.ampersand=38;e.ampersandmonospace=65286;e.ampersandsmall=63270;e.amsquare=13250;e.anbopomofo=12578;e.angbopomofo=12580;e.angbracketleft=12296;e.angbracketright=12297;e.angkhankhuthai=3674;e.angle=8736;e.anglebracketleft=12296;e.anglebracketleftvertical=65087;e.anglebracketright=12297;e.anglebracketrightvertical=65088;e.angleleft=9001;e.angleright=9002;e.angstrom=8491;e.anoteleia=903;e.anudattadeva=2386;e.anusvarabengali=2434;e.anusvaradeva=2306;e.anusvaragujarati=2690;e.aogonek=261;e.apaatosquare=13056;e.aparen=9372;e.apostrophearmenian=1370;e.apostrophemod=700;e.apple=63743;e.approaches=8784;e.approxequal=8776;e.approxequalorimage=8786;e.approximatelyequal=8773;e.araeaekorean=12686;e.araeakorean=12685;e.arc=8978;e.arighthalfring=7834;e.aring=229;e.aringacute=507;e.aringbelow=7681;e.arrowboth=8596;e.arrowdashdown=8675;e.arrowdashleft=8672;e.arrowdashright=8674;e.arrowdashup=8673;e.arrowdblboth=8660;e.arrowdbldown=8659;e.arrowdblleft=8656;e.arrowdblright=8658;e.arrowdblup=8657;e.arrowdown=8595;e.arrowdownleft=8601;e.arrowdownright=8600;e.arrowdownwhite=8681;e.arrowheaddownmod=709;e.arrowheadleftmod=706;e.arrowheadrightmod=707;e.arrowheadupmod=708;e.arrowhorizex=63719;e.arrowleft=8592;e.arrowleftdbl=8656;e.arrowleftdblstroke=8653;e.arrowleftoverright=8646;e.arrowleftwhite=8678;e.arrowright=8594;e.arrowrightdblstroke=8655;e.arrowrightheavy=10142;e.arrowrightoverleft=8644;e.arrowrightwhite=8680;e.arrowtableft=8676;e.arrowtabright=8677;e.arrowup=8593;e.arrowupdn=8597;e.arrowupdnbse=8616;e.arrowupdownbase=8616;e.arrowupleft=8598;e.arrowupleftofdown=8645;e.arrowupright=8599;e.arrowupwhite=8679;e.arrowvertex=63718;e.asciicircum=94;e.asciicircummonospace=65342;e.asciitilde=126;e.asciitildemonospace=65374;e.ascript=593;e.ascriptturned=594;e.asmallhiragana=12353;e.asmallkatakana=12449;e.asmallkatakanahalfwidth=65383;e.asterisk=42;e.asteriskaltonearabic=1645;e.asteriskarabic=1645;e.asteriskmath=8727;e.asteriskmonospace=65290;e.asterisksmall=65121;e.asterism=8258;e.asuperior=63209;e.asymptoticallyequal=8771;e.at=64;e.atilde=227;e.atmonospace=65312;e.atsmall=65131;e.aturned=592;e.aubengali=2452;e.aubopomofo=12576;e.audeva=2324;e.augujarati=2708;e.augurmukhi=2580;e.aulengthmarkbengali=2519;e.aumatragurmukhi=2636;e.auvowelsignbengali=2508;e.auvowelsigndeva=2380;e.auvowelsigngujarati=2764;e.avagrahadeva=2365;e.aybarmenian=1377;e.ayin=1506;e.ayinaltonehebrew=64288;e.ayinhebrew=1506;e.b=98;e.babengali=2476;e.backslash=92;e.backslashmonospace=65340;e.badeva=2348;e.bagujarati=2732;e.bagurmukhi=2604;e.bahiragana=12400;e.bahtthai=3647;e.bakatakana=12496;e.bar=124;e.barmonospace=65372;e.bbopomofo=12549;e.bcircle=9425;e.bdotaccent=7683;e.bdotbelow=7685;e.beamedsixteenthnotes=9836;e.because=8757;e.becyrillic=1073;e.beharabic=1576;e.behfinalarabic=65168;e.behinitialarabic=65169;e.behiragana=12409;e.behmedialarabic=65170;e.behmeeminitialarabic=64671;e.behmeemisolatedarabic=64520;e.behnoonfinalarabic=64621;e.bekatakana=12505;e.benarmenian=1378;e.bet=1489;e.beta=946;e.betasymbolgreek=976;e.betdagesh=64305;e.betdageshhebrew=64305;e.bethebrew=1489;e.betrafehebrew=64332;e.bhabengali=2477;e.bhadeva=2349;e.bhagujarati=2733;e.bhagurmukhi=2605;e.bhook=595;e.bihiragana=12403;e.bikatakana=12499;e.bilabialclick=664;e.bindigurmukhi=2562;e.birusquare=13105;e.blackcircle=9679;e.blackdiamond=9670;e.blackdownpointingtriangle=9660;e.blackleftpointingpointer=9668;e.blackleftpointingtriangle=9664;e.blacklenticularbracketleft=12304;e.blacklenticularbracketleftvertical=65083;e.blacklenticularbracketright=12305;e.blacklenticularbracketrightvertical=65084;e.blacklowerlefttriangle=9699;e.blacklowerrighttriangle=9698;e.blackrectangle=9644;e.blackrightpointingpointer=9658;e.blackrightpointingtriangle=9654;e.blacksmallsquare=9642;e.blacksmilingface=9787;e.blacksquare=9632;e.blackstar=9733;e.blackupperlefttriangle=9700;e.blackupperrighttriangle=9701;e.blackuppointingsmalltriangle=9652;e.blackuppointingtriangle=9650;e.blank=9251;e.blinebelow=7687;e.block=9608;e.bmonospace=65346;e.bobaimaithai=3610;e.bohiragana=12412;e.bokatakana=12508;e.bparen=9373;e.bqsquare=13251;e.braceex=63732;e.braceleft=123;e.braceleftbt=63731;e.braceleftmid=63730;e.braceleftmonospace=65371;e.braceleftsmall=65115;e.bracelefttp=63729;e.braceleftvertical=65079;e.braceright=125;e.bracerightbt=63742;e.bracerightmid=63741;e.bracerightmonospace=65373;e.bracerightsmall=65116;e.bracerighttp=63740;e.bracerightvertical=65080;e.bracketleft=91;e.bracketleftbt=63728;e.bracketleftex=63727;e.bracketleftmonospace=65339;e.bracketlefttp=63726;e.bracketright=93;e.bracketrightbt=63739;e.bracketrightex=63738;e.bracketrightmonospace=65341;e.bracketrighttp=63737;e.breve=728;e.brevebelowcmb=814;e.brevecmb=774;e.breveinvertedbelowcmb=815;e.breveinvertedcmb=785;e.breveinverteddoublecmb=865;e.bridgebelowcmb=810;e.bridgeinvertedbelowcmb=826;e.brokenbar=166;e.bstroke=384;e.bsuperior=63210;e.btopbar=387;e.buhiragana=12406;e.bukatakana=12502;e.bullet=8226;e.bulletinverse=9688;e.bulletoperator=8729;e.bullseye=9678;e.c=99;e.caarmenian=1390;e.cabengali=2458;e.cacute=263;e.cadeva=2330;e.cagujarati=2714;e.cagurmukhi=2586;e.calsquare=13192;e.candrabindubengali=2433;e.candrabinducmb=784;e.candrabindudeva=2305;e.candrabindugujarati=2689;e.capslock=8682;e.careof=8453;e.caron=711;e.caronbelowcmb=812;e.caroncmb=780;e.carriagereturn=8629;e.cbopomofo=12568;e.ccaron=269;e.ccedilla=231;e.ccedillaacute=7689;e.ccircle=9426;e.ccircumflex=265;e.ccurl=597;e.cdot=267;e.cdotaccent=267;e.cdsquare=13253;e.cedilla=184;e.cedillacmb=807;e.cent=162;e.centigrade=8451;e.centinferior=63199;e.centmonospace=65504;e.centoldstyle=63394;e.centsuperior=63200;e.chaarmenian=1401;e.chabengali=2459;e.chadeva=2331;e.chagujarati=2715;e.chagurmukhi=2587;e.chbopomofo=12564;e.cheabkhasiancyrillic=1213;e.checkmark=10003;e.checyrillic=1095;e.chedescenderabkhasiancyrillic=1215;e.chedescendercyrillic=1207;e.chedieresiscyrillic=1269;e.cheharmenian=1395;e.chekhakassiancyrillic=1228;e.cheverticalstrokecyrillic=1209;e.chi=967;e.chieuchacirclekorean=12919;e.chieuchaparenkorean=12823;e.chieuchcirclekorean=12905;e.chieuchkorean=12618;e.chieuchparenkorean=12809;e.chochangthai=3594;e.chochanthai=3592;e.chochingthai=3593;e.chochoethai=3596;e.chook=392;e.cieucacirclekorean=12918;e.cieucaparenkorean=12822;e.cieuccirclekorean=12904;e.cieuckorean=12616;e.cieucparenkorean=12808;e.cieucuparenkorean=12828;e.circle=9675;e.circlecopyrt=169;e.circlemultiply=8855;e.circleot=8857;e.circleplus=8853;e.circlepostalmark=12342;e.circlewithlefthalfblack=9680;e.circlewithrighthalfblack=9681;e.circumflex=710;e.circumflexbelowcmb=813;e.circumflexcmb=770;e.clear=8999;e.clickalveolar=450;e.clickdental=448;e.clicklateral=449;e.clickretroflex=451;e.club=9827;e.clubsuitblack=9827;e.clubsuitwhite=9831;e.cmcubedsquare=13220;e.cmonospace=65347;e.cmsquaredsquare=13216;e.coarmenian=1409;e.colon=58;e.colonmonetary=8353;e.colonmonospace=65306;e.colonsign=8353;e.colonsmall=65109;e.colontriangularhalfmod=721;e.colontriangularmod=720;e.comma=44;e.commaabovecmb=787;e.commaaboverightcmb=789;e.commaaccent=63171;e.commaarabic=1548;e.commaarmenian=1373;e.commainferior=63201;e.commamonospace=65292;e.commareversedabovecmb=788;e.commareversedmod=701;e.commasmall=65104;e.commasuperior=63202;e.commaturnedabovecmb=786;e.commaturnedmod=699;e.compass=9788;e.congruent=8773;e.contourintegral=8750;e.control=8963;e.controlACK=6;e.controlBEL=7;e.controlBS=8;e.controlCAN=24;e.controlCR=13;e.controlDC1=17;e.controlDC2=18;e.controlDC3=19;e.controlDC4=20;e.controlDEL=127;e.controlDLE=16;e.controlEM=25;e.controlENQ=5;e.controlEOT=4;e.controlESC=27;e.controlETB=23;e.controlETX=3;e.controlFF=12;e.controlFS=28;e.controlGS=29;e.controlHT=9;e.controlLF=10;e.controlNAK=21;e.controlNULL=0;e.controlRS=30;e.controlSI=15;e.controlSO=14;e.controlSOT=2;e.controlSTX=1;e.controlSUB=26;e.controlSYN=22;e.controlUS=31;e.controlVT=11;e.copyright=169;e.copyrightsans=63721;e.copyrightserif=63193;e.cornerbracketleft=12300;e.cornerbracketlefthalfwidth=65378;e.cornerbracketleftvertical=65089;e.cornerbracketright=12301;e.cornerbracketrighthalfwidth=65379;e.cornerbracketrightvertical=65090;e.corporationsquare=13183;e.cosquare=13255;e.coverkgsquare=13254;e.cparen=9374;e.cruzeiro=8354;e.cstretched=663;e.curlyand=8911;e.curlyor=8910;e.currency=164;e.cyrBreve=63185;e.cyrFlex=63186;e.cyrbreve=63188;e.cyrflex=63189;e.d=100;e.daarmenian=1380;e.dabengali=2470;e.dadarabic=1590;e.dadeva=2342;e.dadfinalarabic=65214;e.dadinitialarabic=65215;e.dadmedialarabic=65216;e.dagesh=1468;e.dageshhebrew=1468;e.dagger=8224;e.daggerdbl=8225;e.dagujarati=2726;e.dagurmukhi=2598;e.dahiragana=12384;e.dakatakana=12480;e.dalarabic=1583;e.dalet=1491;e.daletdagesh=64307;e.daletdageshhebrew=64307;e.dalethebrew=1491;e.dalfinalarabic=65194;e.dammaarabic=1615;e.dammalowarabic=1615;e.dammatanaltonearabic=1612;e.dammatanarabic=1612;e.danda=2404;e.dargahebrew=1447;e.dargalefthebrew=1447;e.dasiapneumatacyrilliccmb=1157;e.dblGrave=63187;e.dblanglebracketleft=12298;e.dblanglebracketleftvertical=65085;e.dblanglebracketright=12299;e.dblanglebracketrightvertical=65086;e.dblarchinvertedbelowcmb=811;e.dblarrowleft=8660;e.dblarrowright=8658;e.dbldanda=2405;e.dblgrave=63190;e.dblgravecmb=783;e.dblintegral=8748;e.dbllowline=8215;e.dbllowlinecmb=819;e.dbloverlinecmb=831;e.dblprimemod=698;e.dblverticalbar=8214;e.dblverticallineabovecmb=782;e.dbopomofo=12553;e.dbsquare=13256;e.dcaron=271;e.dcedilla=7697;e.dcircle=9427;e.dcircumflexbelow=7699;e.dcroat=273;e.ddabengali=2465;e.ddadeva=2337;e.ddagujarati=2721;e.ddagurmukhi=2593;e.ddalarabic=1672;e.ddalfinalarabic=64393;e.dddhadeva=2396;e.ddhabengali=2466;e.ddhadeva=2338;e.ddhagujarati=2722;e.ddhagurmukhi=2594;e.ddotaccent=7691;e.ddotbelow=7693;e.decimalseparatorarabic=1643;e.decimalseparatorpersian=1643;e.decyrillic=1076;e.degree=176;e.dehihebrew=1453;e.dehiragana=12391;e.deicoptic=1007;e.dekatakana=12487;e.deleteleft=9003;e.deleteright=8998;e.delta=948;e.deltaturned=397;e.denominatorminusonenumeratorbengali=2552;e.dezh=676;e.dhabengali=2471;e.dhadeva=2343;e.dhagujarati=2727;e.dhagurmukhi=2599;e.dhook=599;e.dialytikatonos=901;e.dialytikatonoscmb=836;e.diamond=9830;e.diamondsuitwhite=9826;e.dieresis=168;e.dieresisacute=63191;e.dieresisbelowcmb=804;e.dieresiscmb=776;e.dieresisgrave=63192;e.dieresistonos=901;e.dihiragana=12386;e.dikatakana=12482;e.dittomark=12291;e.divide=247;e.divides=8739;e.divisionslash=8725;e.djecyrillic=1106;e.dkshade=9619;e.dlinebelow=7695;e.dlsquare=13207;e.dmacron=273;e.dmonospace=65348;e.dnblock=9604;e.dochadathai=3598;e.dodekthai=3604;e.dohiragana=12393;e.dokatakana=12489;e.dollar=36;e.dollarinferior=63203;e.dollarmonospace=65284;e.dollaroldstyle=63268;e.dollarsmall=65129;e.dollarsuperior=63204;e.dong=8363;e.dorusquare=13094;e.dotaccent=729;e.dotaccentcmb=775;e.dotbelowcmb=803;e.dotbelowcomb=803;e.dotkatakana=12539;e.dotlessi=305;e.dotlessj=63166;e.dotlessjstrokehook=644;e.dotmath=8901;e.dottedcircle=9676;e.doubleyodpatah=64287;e.doubleyodpatahhebrew=64287;e.downtackbelowcmb=798;e.downtackmod=725;e.dparen=9375;e.dsuperior=63211;e.dtail=598;e.dtopbar=396;e.duhiragana=12389;e.dukatakana=12485;e.dz=499;e.dzaltone=675;e.dzcaron=454;e.dzcurl=677;e.dzeabkhasiancyrillic=1249;e.dzecyrillic=1109;e.dzhecyrillic=1119;e.e=101;e.eacute=233;e.earth=9793;e.ebengali=2447;e.ebopomofo=12572;e.ebreve=277;e.ecandradeva=2317;e.ecandragujarati=2701;e.ecandravowelsigndeva=2373;e.ecandravowelsigngujarati=2757;e.ecaron=283;e.ecedillabreve=7709;e.echarmenian=1381;e.echyiwnarmenian=1415;e.ecircle=9428;e.ecircumflex=234;e.ecircumflexacute=7871;e.ecircumflexbelow=7705;e.ecircumflexdotbelow=7879;e.ecircumflexgrave=7873;e.ecircumflexhookabove=7875;e.ecircumflextilde=7877;e.ecyrillic=1108;e.edblgrave=517;e.edeva=2319;e.edieresis=235;e.edot=279;e.edotaccent=279;e.edotbelow=7865;e.eegurmukhi=2575;e.eematragurmukhi=2631;e.efcyrillic=1092;e.egrave=232;e.egujarati=2703;e.eharmenian=1383;e.ehbopomofo=12573;e.ehiragana=12360;e.ehookabove=7867;e.eibopomofo=12575;e.eight=56;e.eightarabic=1640;e.eightbengali=2542;e.eightcircle=9319;e.eightcircleinversesansserif=10129;e.eightdeva=2414;e.eighteencircle=9329;e.eighteenparen=9349;e.eighteenperiod=9369;e.eightgujarati=2798;e.eightgurmukhi=2670;e.eighthackarabic=1640;e.eighthangzhou=12328;e.eighthnotebeamed=9835;e.eightideographicparen=12839;e.eightinferior=8328;e.eightmonospace=65304;e.eightoldstyle=63288;e.eightparen=9339;e.eightperiod=9359;e.eightpersian=1784;e.eightroman=8567;e.eightsuperior=8312;e.eightthai=3672;e.einvertedbreve=519;e.eiotifiedcyrillic=1125;e.ekatakana=12456;e.ekatakanahalfwidth=65396;e.ekonkargurmukhi=2676;e.ekorean=12628;e.elcyrillic=1083;e.element=8712;e.elevencircle=9322;e.elevenparen=9342;e.elevenperiod=9362;e.elevenroman=8570;e.ellipsis=8230;e.ellipsisvertical=8942;e.emacron=275;e.emacronacute=7703;e.emacrongrave=7701;e.emcyrillic=1084;e.emdash=8212;e.emdashvertical=65073;e.emonospace=65349;e.emphasismarkarmenian=1371;e.emptyset=8709;e.enbopomofo=12579;e.encyrillic=1085;e.endash=8211;e.endashvertical=65074;e.endescendercyrillic=1187;e.eng=331;e.engbopomofo=12581;e.enghecyrillic=1189;e.enhookcyrillic=1224;e.enspace=8194;e.eogonek=281;e.eokorean=12627;e.eopen=603;e.eopenclosed=666;e.eopenreversed=604;e.eopenreversedclosed=606;e.eopenreversedhook=605;e.eparen=9376;e.epsilon=949;e.epsilontonos=941;e.equal=61;e.equalmonospace=65309;e.equalsmall=65126;e.equalsuperior=8316;e.equivalence=8801;e.erbopomofo=12582;e.ercyrillic=1088;e.ereversed=600;e.ereversedcyrillic=1101;e.escyrillic=1089;e.esdescendercyrillic=1195;e.esh=643;e.eshcurl=646;e.eshortdeva=2318;e.eshortvowelsigndeva=2374;e.eshreversedloop=426;e.eshsquatreversed=645;e.esmallhiragana=12359;e.esmallkatakana=12455;e.esmallkatakanahalfwidth=65386;e.estimated=8494;e.esuperior=63212;e.eta=951;e.etarmenian=1384;e.etatonos=942;e.eth=240;e.etilde=7869;e.etildebelow=7707;e.etnahtafoukhhebrew=1425;e.etnahtafoukhlefthebrew=1425;e.etnahtahebrew=1425;e.etnahtalefthebrew=1425;e.eturned=477;e.eukorean=12641;e.euro=8364;e.evowelsignbengali=2503;e.evowelsigndeva=2375;e.evowelsigngujarati=2759;e.exclam=33;e.exclamarmenian=1372;e.exclamdbl=8252;e.exclamdown=161;e.exclamdownsmall=63393;e.exclammonospace=65281;e.exclamsmall=63265;e.existential=8707;e.ezh=658;e.ezhcaron=495;e.ezhcurl=659;e.ezhreversed=441;e.ezhtail=442;e.f=102;e.fadeva=2398;e.fagurmukhi=2654;e.fahrenheit=8457;e.fathaarabic=1614;e.fathalowarabic=1614;e.fathatanarabic=1611;e.fbopomofo=12552;e.fcircle=9429;e.fdotaccent=7711;e.feharabic=1601;e.feharmenian=1414;e.fehfinalarabic=65234;e.fehinitialarabic=65235;e.fehmedialarabic=65236;e.feicoptic=997;e.female=9792;e.ff=64256;e.f_f=64256;e.ffi=64259;e.ffl=64260;e.fi=64257;e.fifteencircle=9326;e.fifteenparen=9346;e.fifteenperiod=9366;e.figuredash=8210;e.filledbox=9632;e.filledrect=9644;e.finalkaf=1498;e.finalkafdagesh=64314;e.finalkafdageshhebrew=64314;e.finalkafhebrew=1498;e.finalmem=1501;e.finalmemhebrew=1501;e.finalnun=1503;e.finalnunhebrew=1503;e.finalpe=1507;e.finalpehebrew=1507;e.finaltsadi=1509;e.finaltsadihebrew=1509;e.firsttonechinese=713;e.fisheye=9673;e.fitacyrillic=1139;e.five=53;e.fivearabic=1637;e.fivebengali=2539;e.fivecircle=9316;e.fivecircleinversesansserif=10126;e.fivedeva=2411;e.fiveeighths=8541;e.fivegujarati=2795;e.fivegurmukhi=2667;e.fivehackarabic=1637;e.fivehangzhou=12325;e.fiveideographicparen=12836;e.fiveinferior=8325;e.fivemonospace=65301;e.fiveoldstyle=63285;e.fiveparen=9336;e.fiveperiod=9356;e.fivepersian=1781;e.fiveroman=8564;e.fivesuperior=8309;e.fivethai=3669;e.fl=64258;e.florin=402;e.fmonospace=65350;e.fmsquare=13209;e.fofanthai=3615;e.fofathai=3613;e.fongmanthai=3663;e.forall=8704;e.four=52;e.fourarabic=1636;e.fourbengali=2538;e.fourcircle=9315;e.fourcircleinversesansserif=10125;e.fourdeva=2410;e.fourgujarati=2794;e.fourgurmukhi=2666;e.fourhackarabic=1636;e.fourhangzhou=12324;e.fourideographicparen=12835;e.fourinferior=8324;e.fourmonospace=65300;e.fournumeratorbengali=2551;e.fouroldstyle=63284;e.fourparen=9335;e.fourperiod=9355;e.fourpersian=1780;e.fourroman=8563;e.foursuperior=8308;e.fourteencircle=9325;e.fourteenparen=9345;e.fourteenperiod=9365;e.fourthai=3668;e.fourthtonechinese=715;e.fparen=9377;e.fraction=8260;e.franc=8355;e.g=103;e.gabengali=2455;e.gacute=501;e.gadeva=2327;e.gafarabic=1711;e.gaffinalarabic=64403;e.gafinitialarabic=64404;e.gafmedialarabic=64405;e.gagujarati=2711;e.gagurmukhi=2583;e.gahiragana=12364;e.gakatakana=12460;e.gamma=947;e.gammalatinsmall=611;e.gammasuperior=736;e.gangiacoptic=1003;e.gbopomofo=12557;e.gbreve=287;e.gcaron=487;e.gcedilla=291;e.gcircle=9430;e.gcircumflex=285;e.gcommaaccent=291;e.gdot=289;e.gdotaccent=289;e.gecyrillic=1075;e.gehiragana=12370;e.gekatakana=12466;e.geometricallyequal=8785;e.gereshaccenthebrew=1436;e.gereshhebrew=1523;e.gereshmuqdamhebrew=1437;e.germandbls=223;e.gershayimaccenthebrew=1438;e.gershayimhebrew=1524;e.getamark=12307;e.ghabengali=2456;e.ghadarmenian=1394;e.ghadeva=2328;e.ghagujarati=2712;e.ghagurmukhi=2584;e.ghainarabic=1594;e.ghainfinalarabic=65230;e.ghaininitialarabic=65231;e.ghainmedialarabic=65232;e.ghemiddlehookcyrillic=1173;e.ghestrokecyrillic=1171;e.gheupturncyrillic=1169;e.ghhadeva=2394;e.ghhagurmukhi=2650;e.ghook=608;e.ghzsquare=13203;e.gihiragana=12366;e.gikatakana=12462;e.gimarmenian=1379;e.gimel=1490;e.gimeldagesh=64306;e.gimeldageshhebrew=64306;e.gimelhebrew=1490;e.gjecyrillic=1107;e.glottalinvertedstroke=446;e.glottalstop=660;e.glottalstopinverted=662;e.glottalstopmod=704;e.glottalstopreversed=661;e.glottalstopreversedmod=705;e.glottalstopreversedsuperior=740;e.glottalstopstroke=673;e.glottalstopstrokereversed=674;e.gmacron=7713;e.gmonospace=65351;e.gohiragana=12372;e.gokatakana=12468;e.gparen=9378;e.gpasquare=13228;e.gradient=8711;e.grave=96;e.gravebelowcmb=790;e.gravecmb=768;e.gravecomb=768;e.gravedeva=2387;e.gravelowmod=718;e.gravemonospace=65344;e.gravetonecmb=832;e.greater=62;e.greaterequal=8805;e.greaterequalorless=8923;e.greatermonospace=65310;e.greaterorequivalent=8819;e.greaterorless=8823;e.greateroverequal=8807;e.greatersmall=65125;e.gscript=609;e.gstroke=485;e.guhiragana=12368;e.guillemotleft=171;e.guillemotright=187;e.guilsinglleft=8249;e.guilsinglright=8250;e.gukatakana=12464;e.guramusquare=13080;e.gysquare=13257;e.h=104;e.haabkhasiancyrillic=1193;e.haaltonearabic=1729;e.habengali=2489;e.hadescendercyrillic=1203;e.hadeva=2361;e.hagujarati=2745;e.hagurmukhi=2617;e.haharabic=1581;e.hahfinalarabic=65186;e.hahinitialarabic=65187;e.hahiragana=12399;e.hahmedialarabic=65188;e.haitusquare=13098;e.hakatakana=12495;e.hakatakanahalfwidth=65418;e.halantgurmukhi=2637;e.hamzaarabic=1569;e.hamzalowarabic=1569;e.hangulfiller=12644;e.hardsigncyrillic=1098;e.harpoonleftbarbup=8636;e.harpoonrightbarbup=8640;e.hasquare=13258;e.hatafpatah=1458;e.hatafpatah16=1458;e.hatafpatah23=1458;e.hatafpatah2f=1458;e.hatafpatahhebrew=1458;e.hatafpatahnarrowhebrew=1458;e.hatafpatahquarterhebrew=1458;e.hatafpatahwidehebrew=1458;e.hatafqamats=1459;e.hatafqamats1b=1459;e.hatafqamats28=1459;e.hatafqamats34=1459;e.hatafqamatshebrew=1459;e.hatafqamatsnarrowhebrew=1459;e.hatafqamatsquarterhebrew=1459;e.hatafqamatswidehebrew=1459;e.hatafsegol=1457;e.hatafsegol17=1457;e.hatafsegol24=1457;e.hatafsegol30=1457;e.hatafsegolhebrew=1457;e.hatafsegolnarrowhebrew=1457;e.hatafsegolquarterhebrew=1457;e.hatafsegolwidehebrew=1457;e.hbar=295;e.hbopomofo=12559;e.hbrevebelow=7723;e.hcedilla=7721;e.hcircle=9431;e.hcircumflex=293;e.hdieresis=7719;e.hdotaccent=7715;e.hdotbelow=7717;e.he=1492;e.heart=9829;e.heartsuitblack=9829;e.heartsuitwhite=9825;e.hedagesh=64308;e.hedageshhebrew=64308;e.hehaltonearabic=1729;e.heharabic=1607;e.hehebrew=1492;e.hehfinalaltonearabic=64423;e.hehfinalalttwoarabic=65258;e.hehfinalarabic=65258;e.hehhamzaabovefinalarabic=64421;e.hehhamzaaboveisolatedarabic=64420;e.hehinitialaltonearabic=64424;e.hehinitialarabic=65259;e.hehiragana=12408;e.hehmedialaltonearabic=64425;e.hehmedialarabic=65260;e.heiseierasquare=13179;e.hekatakana=12504;e.hekatakanahalfwidth=65421;e.hekutaarusquare=13110;e.henghook=615;e.herutusquare=13113;e.het=1495;e.hethebrew=1495;e.hhook=614;e.hhooksuperior=689;e.hieuhacirclekorean=12923;e.hieuhaparenkorean=12827;e.hieuhcirclekorean=12909;e.hieuhkorean=12622;e.hieuhparenkorean=12813;e.hihiragana=12402;e.hikatakana=12498;e.hikatakanahalfwidth=65419;e.hiriq=1460;e.hiriq14=1460;e.hiriq21=1460;e.hiriq2d=1460;e.hiriqhebrew=1460;e.hiriqnarrowhebrew=1460;e.hiriqquarterhebrew=1460;e.hiriqwidehebrew=1460;e.hlinebelow=7830;e.hmonospace=65352;e.hoarmenian=1392;e.hohipthai=3627;e.hohiragana=12411;e.hokatakana=12507;e.hokatakanahalfwidth=65422;e.holam=1465;e.holam19=1465;e.holam26=1465;e.holam32=1465;e.holamhebrew=1465;e.holamnarrowhebrew=1465;e.holamquarterhebrew=1465;e.holamwidehebrew=1465;e.honokhukthai=3630;e.hookabovecomb=777;e.hookcmb=777;e.hookpalatalizedbelowcmb=801;e.hookretroflexbelowcmb=802;e.hoonsquare=13122;e.horicoptic=1001;e.horizontalbar=8213;e.horncmb=795;e.hotsprings=9832;e.house=8962;e.hparen=9379;e.hsuperior=688;e.hturned=613;e.huhiragana=12405;e.huiitosquare=13107;e.hukatakana=12501;e.hukatakanahalfwidth=65420;e.hungarumlaut=733;e.hungarumlautcmb=779;e.hv=405;e.hyphen=45;e.hypheninferior=63205;e.hyphenmonospace=65293;e.hyphensmall=65123;e.hyphensuperior=63206;e.hyphentwo=8208;e.i=105;e.iacute=237;e.iacyrillic=1103;e.ibengali=2439;e.ibopomofo=12583;e.ibreve=301;e.icaron=464;e.icircle=9432;e.icircumflex=238;e.icyrillic=1110;e.idblgrave=521;e.ideographearthcircle=12943;e.ideographfirecircle=12939;e.ideographicallianceparen=12863;e.ideographiccallparen=12858;e.ideographiccentrecircle=12965;e.ideographicclose=12294;e.ideographiccomma=12289;e.ideographiccommaleft=65380;e.ideographiccongratulationparen=12855;e.ideographiccorrectcircle=12963;e.ideographicearthparen=12847;e.ideographicenterpriseparen=12861;e.ideographicexcellentcircle=12957;e.ideographicfestivalparen=12864;e.ideographicfinancialcircle=12950;e.ideographicfinancialparen=12854;e.ideographicfireparen=12843;e.ideographichaveparen=12850;e.ideographichighcircle=12964;e.ideographiciterationmark=12293;e.ideographiclaborcircle=12952;e.ideographiclaborparen=12856;e.ideographicleftcircle=12967;e.ideographiclowcircle=12966;e.ideographicmedicinecircle=12969;e.ideographicmetalparen=12846;e.ideographicmoonparen=12842;e.ideographicnameparen=12852;e.ideographicperiod=12290;e.ideographicprintcircle=12958;e.ideographicreachparen=12867;e.ideographicrepresentparen=12857;e.ideographicresourceparen=12862;e.ideographicrightcircle=12968;e.ideographicsecretcircle=12953;e.ideographicselfparen=12866;e.ideographicsocietyparen=12851;e.ideographicspace=12288;e.ideographicspecialparen=12853;e.ideographicstockparen=12849;e.ideographicstudyparen=12859;e.ideographicsunparen=12848;e.ideographicsuperviseparen=12860;e.ideographicwaterparen=12844;e.ideographicwoodparen=12845;e.ideographiczero=12295;e.ideographmetalcircle=12942;e.ideographmooncircle=12938;e.ideographnamecircle=12948;e.ideographsuncircle=12944;e.ideographwatercircle=12940;e.ideographwoodcircle=12941;e.ideva=2311;e.idieresis=239;e.idieresisacute=7727;e.idieresiscyrillic=1253;e.idotbelow=7883;e.iebrevecyrillic=1239;e.iecyrillic=1077;e.ieungacirclekorean=12917;e.ieungaparenkorean=12821;e.ieungcirclekorean=12903;e.ieungkorean=12615;e.ieungparenkorean=12807;e.igrave=236;e.igujarati=2695;e.igurmukhi=2567;e.ihiragana=12356;e.ihookabove=7881;e.iibengali=2440;e.iicyrillic=1080;e.iideva=2312;e.iigujarati=2696;e.iigurmukhi=2568;e.iimatragurmukhi=2624;e.iinvertedbreve=523;e.iishortcyrillic=1081;e.iivowelsignbengali=2496;e.iivowelsigndeva=2368;e.iivowelsigngujarati=2752;e.ij=307;e.ikatakana=12452;e.ikatakanahalfwidth=65394;e.ikorean=12643;e.ilde=732;e.iluyhebrew=1452;e.imacron=299;e.imacroncyrillic=1251;e.imageorapproximatelyequal=8787;e.imatragurmukhi=2623;e.imonospace=65353;e.increment=8710;e.infinity=8734;e.iniarmenian=1387;e.integral=8747;e.integralbottom=8993;e.integralbt=8993;e.integralex=63733;e.integraltop=8992;e.integraltp=8992;e.intersection=8745;e.intisquare=13061;e.invbullet=9688;e.invcircle=9689;e.invsmileface=9787;e.iocyrillic=1105;e.iogonek=303;e.iota=953;e.iotadieresis=970;e.iotadieresistonos=912;e.iotalatin=617;e.iotatonos=943;e.iparen=9380;e.irigurmukhi=2674;e.ismallhiragana=12355;e.ismallkatakana=12451;e.ismallkatakanahalfwidth=65384;e.issharbengali=2554;e.istroke=616;e.isuperior=63213;e.iterationhiragana=12445;e.iterationkatakana=12541;e.itilde=297;e.itildebelow=7725;e.iubopomofo=12585;e.iucyrillic=1102;e.ivowelsignbengali=2495;e.ivowelsigndeva=2367;e.ivowelsigngujarati=2751;e.izhitsacyrillic=1141;e.izhitsadblgravecyrillic=1143;e.j=106;e.jaarmenian=1393;e.jabengali=2460;e.jadeva=2332;e.jagujarati=2716;e.jagurmukhi=2588;e.jbopomofo=12560;e.jcaron=496;e.jcircle=9433;e.jcircumflex=309;e.jcrossedtail=669;e.jdotlessstroke=607;e.jecyrillic=1112;e.jeemarabic=1580;e.jeemfinalarabic=65182;e.jeeminitialarabic=65183;e.jeemmedialarabic=65184;e.jeharabic=1688;e.jehfinalarabic=64395;e.jhabengali=2461;e.jhadeva=2333;e.jhagujarati=2717;e.jhagurmukhi=2589;e.jheharmenian=1403;e.jis=12292;e.jmonospace=65354;e.jparen=9381;e.jsuperior=690;e.k=107;e.kabashkircyrillic=1185;e.kabengali=2453;e.kacute=7729;e.kacyrillic=1082;e.kadescendercyrillic=1179;e.kadeva=2325;e.kaf=1499;e.kafarabic=1603;e.kafdagesh=64315;e.kafdageshhebrew=64315;e.kaffinalarabic=65242;e.kafhebrew=1499;e.kafinitialarabic=65243;e.kafmedialarabic=65244;e.kafrafehebrew=64333;e.kagujarati=2709;e.kagurmukhi=2581;e.kahiragana=12363;e.kahookcyrillic=1220;e.kakatakana=12459;e.kakatakanahalfwidth=65398;e.kappa=954;e.kappasymbolgreek=1008;e.kapyeounmieumkorean=12657;e.kapyeounphieuphkorean=12676;e.kapyeounpieupkorean=12664;e.kapyeounssangpieupkorean=12665;e.karoriisquare=13069;e.kashidaautoarabic=1600;e.kashidaautonosidebearingarabic=1600;e.kasmallkatakana=12533;e.kasquare=13188;e.kasraarabic=1616;e.kasratanarabic=1613;e.kastrokecyrillic=1183;e.katahiraprolongmarkhalfwidth=65392;e.kaverticalstrokecyrillic=1181;e.kbopomofo=12558;e.kcalsquare=13193;e.kcaron=489;e.kcedilla=311;e.kcircle=9434;e.kcommaaccent=311;e.kdotbelow=7731;e.keharmenian=1412;e.kehiragana=12369;e.kekatakana=12465;e.kekatakanahalfwidth=65401;e.kenarmenian=1391;e.kesmallkatakana=12534;e.kgreenlandic=312;e.khabengali=2454;e.khacyrillic=1093;e.khadeva=2326;e.khagujarati=2710;e.khagurmukhi=2582;e.khaharabic=1582;e.khahfinalarabic=65190;e.khahinitialarabic=65191;e.khahmedialarabic=65192;e.kheicoptic=999;e.khhadeva=2393;e.khhagurmukhi=2649;e.khieukhacirclekorean=12920;e.khieukhaparenkorean=12824;e.khieukhcirclekorean=12906;e.khieukhkorean=12619;e.khieukhparenkorean=12810;e.khokhaithai=3586;e.khokhonthai=3589;e.khokhuatthai=3587;e.khokhwaithai=3588;e.khomutthai=3675;e.khook=409;e.khorakhangthai=3590;e.khzsquare=13201;e.kihiragana=12365;e.kikatakana=12461;e.kikatakanahalfwidth=65399;e.kiroguramusquare=13077;e.kiromeetorusquare=13078;e.kirosquare=13076;e.kiyeokacirclekorean=12910;e.kiyeokaparenkorean=12814;e.kiyeokcirclekorean=12896;e.kiyeokkorean=12593;e.kiyeokparenkorean=12800;e.kiyeoksioskorean=12595;e.kjecyrillic=1116;e.klinebelow=7733;e.klsquare=13208;e.kmcubedsquare=13222;e.kmonospace=65355;e.kmsquaredsquare=13218;e.kohiragana=12371;e.kohmsquare=13248;e.kokaithai=3585;e.kokatakana=12467;e.kokatakanahalfwidth=65402;e.kooposquare=13086;e.koppacyrillic=1153;e.koreanstandardsymbol=12927;e.koroniscmb=835;e.kparen=9382;e.kpasquare=13226;e.ksicyrillic=1135;e.ktsquare=13263;e.kturned=670;e.kuhiragana=12367;e.kukatakana=12463;e.kukatakanahalfwidth=65400;e.kvsquare=13240;e.kwsquare=13246;e.l=108;e.labengali=2482;e.lacute=314;e.ladeva=2354;e.lagujarati=2738;e.lagurmukhi=2610;e.lakkhangyaothai=3653;e.lamaleffinalarabic=65276;e.lamalefhamzaabovefinalarabic=65272;e.lamalefhamzaaboveisolatedarabic=65271;e.lamalefhamzabelowfinalarabic=65274;e.lamalefhamzabelowisolatedarabic=65273;e.lamalefisolatedarabic=65275;e.lamalefmaddaabovefinalarabic=65270;e.lamalefmaddaaboveisolatedarabic=65269;e.lamarabic=1604;e.lambda=955;e.lambdastroke=411;e.lamed=1500;e.lameddagesh=64316;e.lameddageshhebrew=64316;e.lamedhebrew=1500;e.lamfinalarabic=65246;e.lamhahinitialarabic=64714;e.laminitialarabic=65247;e.lamjeeminitialarabic=64713;e.lamkhahinitialarabic=64715;e.lamlamhehisolatedarabic=65010;e.lammedialarabic=65248;e.lammeemhahinitialarabic=64904;e.lammeeminitialarabic=64716;e.largecircle=9711;e.lbar=410;e.lbelt=620;e.lbopomofo=12556;e.lcaron=318;e.lcedilla=316;e.lcircle=9435;e.lcircumflexbelow=7741;e.lcommaaccent=316;e.ldot=320;e.ldotaccent=320;e.ldotbelow=7735;e.ldotbelowmacron=7737;e.leftangleabovecmb=794;e.lefttackbelowcmb=792;e.less=60;e.lessequal=8804;e.lessequalorgreater=8922;e.lessmonospace=65308;e.lessorequivalent=8818;e.lessorgreater=8822;e.lessoverequal=8806;e.lesssmall=65124;e.lezh=622;e.lfblock=9612;e.lhookretroflex=621;e.lira=8356;e.liwnarmenian=1388;e.lj=457;e.ljecyrillic=1113;e.ll=63168;e.lladeva=2355;e.llagujarati=2739;e.llinebelow=7739;e.llladeva=2356;e.llvocalicbengali=2529;e.llvocalicdeva=2401;e.llvocalicvowelsignbengali=2531;e.llvocalicvowelsigndeva=2403;e.lmiddletilde=619;e.lmonospace=65356;e.lmsquare=13264;e.lochulathai=3628;e.logicaland=8743;e.logicalnot=172;e.logicalnotreversed=8976;e.logicalor=8744;e.lolingthai=3621;e.longs=383;e.lowlinecenterline=65102;e.lowlinecmb=818;e.lowlinedashed=65101;e.lozenge=9674;e.lparen=9383;e.lslash=322;e.lsquare=8467;e.lsuperior=63214;e.ltshade=9617;e.luthai=3622;e.lvocalicbengali=2444;e.lvocalicdeva=2316;e.lvocalicvowelsignbengali=2530;e.lvocalicvowelsigndeva=2402;e.lxsquare=13267;e.m=109;e.mabengali=2478;e.macron=175;e.macronbelowcmb=817;e.macroncmb=772;e.macronlowmod=717;e.macronmonospace=65507;e.macute=7743;e.madeva=2350;e.magujarati=2734;e.magurmukhi=2606;e.mahapakhhebrew=1444;e.mahapakhlefthebrew=1444;e.mahiragana=12414;e.maichattawalowleftthai=63637;e.maichattawalowrightthai=63636;e.maichattawathai=3659;e.maichattawaupperleftthai=63635;e.maieklowleftthai=63628;e.maieklowrightthai=63627;e.maiekthai=3656;e.maiekupperleftthai=63626;e.maihanakatleftthai=63620;e.maihanakatthai=3633;e.maitaikhuleftthai=63625;e.maitaikhuthai=3655;e.maitholowleftthai=63631;e.maitholowrightthai=63630;e.maithothai=3657;e.maithoupperleftthai=63629;e.maitrilowleftthai=63634;e.maitrilowrightthai=63633;e.maitrithai=3658;e.maitriupperleftthai=63632;e.maiyamokthai=3654;e.makatakana=12510;e.makatakanahalfwidth=65423;e.male=9794;e.mansyonsquare=13127;e.maqafhebrew=1470;e.mars=9794;e.masoracirclehebrew=1455;e.masquare=13187;e.mbopomofo=12551;e.mbsquare=13268;e.mcircle=9436;e.mcubedsquare=13221;e.mdotaccent=7745;e.mdotbelow=7747;e.meemarabic=1605;e.meemfinalarabic=65250;e.meeminitialarabic=65251;e.meemmedialarabic=65252;e.meemmeeminitialarabic=64721;e.meemmeemisolatedarabic=64584;e.meetorusquare=13133;e.mehiragana=12417;e.meizierasquare=13182;e.mekatakana=12513;e.mekatakanahalfwidth=65426;e.mem=1502;e.memdagesh=64318;e.memdageshhebrew=64318;e.memhebrew=1502;e.menarmenian=1396;e.merkhahebrew=1445;e.merkhakefulahebrew=1446;e.merkhakefulalefthebrew=1446;e.merkhalefthebrew=1445;e.mhook=625;e.mhzsquare=13202;e.middledotkatakanahalfwidth=65381;e.middot=183;e.mieumacirclekorean=12914;e.mieumaparenkorean=12818;e.mieumcirclekorean=12900;e.mieumkorean=12609;e.mieumpansioskorean=12656;e.mieumparenkorean=12804;e.mieumpieupkorean=12654;e.mieumsioskorean=12655;e.mihiragana=12415;e.mikatakana=12511;e.mikatakanahalfwidth=65424;e.minus=8722;e.minusbelowcmb=800;e.minuscircle=8854;e.minusmod=727;e.minusplus=8723;e.minute=8242;e.miribaarusquare=13130;e.mirisquare=13129;e.mlonglegturned=624;e.mlsquare=13206;e.mmcubedsquare=13219;e.mmonospace=65357;e.mmsquaredsquare=13215;e.mohiragana=12418;e.mohmsquare=13249;e.mokatakana=12514;e.mokatakanahalfwidth=65427;e.molsquare=13270;e.momathai=3617;e.moverssquare=13223;e.moverssquaredsquare=13224;e.mparen=9384;e.mpasquare=13227;e.mssquare=13235;e.msuperior=63215;e.mturned=623;e.mu=181;e.mu1=181;e.muasquare=13186;e.muchgreater=8811;e.muchless=8810;e.mufsquare=13196;e.mugreek=956;e.mugsquare=13197;e.muhiragana=12416;e.mukatakana=12512;e.mukatakanahalfwidth=65425;e.mulsquare=13205;e.multiply=215;e.mumsquare=13211;e.munahhebrew=1443;e.munahlefthebrew=1443;e.musicalnote=9834;e.musicalnotedbl=9835;e.musicflatsign=9837;e.musicsharpsign=9839;e.mussquare=13234;e.muvsquare=13238;e.muwsquare=13244;e.mvmegasquare=13241;e.mvsquare=13239;e.mwmegasquare=13247;e.mwsquare=13245;e.n=110;e.nabengali=2472;e.nabla=8711;e.nacute=324;e.nadeva=2344;e.nagujarati=2728;e.nagurmukhi=2600;e.nahiragana=12394;e.nakatakana=12490;e.nakatakanahalfwidth=65413;e.napostrophe=329;e.nasquare=13185;e.nbopomofo=12555;e.nbspace=160;e.ncaron=328;e.ncedilla=326;e.ncircle=9437;e.ncircumflexbelow=7755;e.ncommaaccent=326;e.ndotaccent=7749;e.ndotbelow=7751;e.nehiragana=12397;e.nekatakana=12493;e.nekatakanahalfwidth=65416;e.newsheqelsign=8362;e.nfsquare=13195;e.ngabengali=2457;e.ngadeva=2329;e.ngagujarati=2713;e.ngagurmukhi=2585;e.ngonguthai=3591;e.nhiragana=12435;e.nhookleft=626;e.nhookretroflex=627;e.nieunacirclekorean=12911;e.nieunaparenkorean=12815;e.nieuncieuckorean=12597;e.nieuncirclekorean=12897;e.nieunhieuhkorean=12598;e.nieunkorean=12596;e.nieunpansioskorean=12648;e.nieunparenkorean=12801;e.nieunsioskorean=12647;e.nieuntikeutkorean=12646;e.nihiragana=12395;e.nikatakana=12491;e.nikatakanahalfwidth=65414;e.nikhahitleftthai=63641;e.nikhahitthai=3661;e.nine=57;e.ninearabic=1641;e.ninebengali=2543;e.ninecircle=9320;e.ninecircleinversesansserif=10130;e.ninedeva=2415;e.ninegujarati=2799;e.ninegurmukhi=2671;e.ninehackarabic=1641;e.ninehangzhou=12329;e.nineideographicparen=12840;e.nineinferior=8329;e.ninemonospace=65305;e.nineoldstyle=63289;e.nineparen=9340;e.nineperiod=9360;e.ninepersian=1785;e.nineroman=8568;e.ninesuperior=8313;e.nineteencircle=9330;e.nineteenparen=9350;e.nineteenperiod=9370;e.ninethai=3673;e.nj=460;e.njecyrillic=1114;e.nkatakana=12531;e.nkatakanahalfwidth=65437;e.nlegrightlong=414;e.nlinebelow=7753;e.nmonospace=65358;e.nmsquare=13210;e.nnabengali=2467;e.nnadeva=2339;e.nnagujarati=2723;e.nnagurmukhi=2595;e.nnnadeva=2345;e.nohiragana=12398;e.nokatakana=12494;e.nokatakanahalfwidth=65417;e.nonbreakingspace=160;e.nonenthai=3603;e.nonuthai=3609;e.noonarabic=1606;e.noonfinalarabic=65254;e.noonghunnaarabic=1722;e.noonghunnafinalarabic=64415;e.nooninitialarabic=65255;e.noonjeeminitialarabic=64722;e.noonjeemisolatedarabic=64587;e.noonmedialarabic=65256;e.noonmeeminitialarabic=64725;e.noonmeemisolatedarabic=64590;e.noonnoonfinalarabic=64653;e.notcontains=8716;e.notelement=8713;e.notelementof=8713;e.notequal=8800;e.notgreater=8815;e.notgreaternorequal=8817;e.notgreaternorless=8825;e.notidentical=8802;e.notless=8814;e.notlessnorequal=8816;e.notparallel=8742;e.notprecedes=8832;e.notsubset=8836;e.notsucceeds=8833;e.notsuperset=8837;e.nowarmenian=1398;e.nparen=9385;e.nssquare=13233;e.nsuperior=8319;e.ntilde=241;e.nu=957;e.nuhiragana=12396;e.nukatakana=12492;e.nukatakanahalfwidth=65415;e.nuktabengali=2492;e.nuktadeva=2364;e.nuktagujarati=2748;e.nuktagurmukhi=2620;e.numbersign=35;e.numbersignmonospace=65283;e.numbersignsmall=65119;e.numeralsigngreek=884;e.numeralsignlowergreek=885;e.numero=8470;e.nun=1504;e.nundagesh=64320;e.nundageshhebrew=64320;e.nunhebrew=1504;e.nvsquare=13237;e.nwsquare=13243;e.nyabengali=2462;e.nyadeva=2334;e.nyagujarati=2718;e.nyagurmukhi=2590;e.o=111;e.oacute=243;e.oangthai=3629;e.obarred=629;e.obarredcyrillic=1257;e.obarreddieresiscyrillic=1259;e.obengali=2451;e.obopomofo=12571;e.obreve=335;e.ocandradeva=2321;e.ocandragujarati=2705;e.ocandravowelsigndeva=2377;e.ocandravowelsigngujarati=2761;e.ocaron=466;e.ocircle=9438;e.ocircumflex=244;e.ocircumflexacute=7889;e.ocircumflexdotbelow=7897;e.ocircumflexgrave=7891;e.ocircumflexhookabove=7893;e.ocircumflextilde=7895;e.ocyrillic=1086;e.odblacute=337;e.odblgrave=525;e.odeva=2323;e.odieresis=246;e.odieresiscyrillic=1255;e.odotbelow=7885;e.oe=339;e.oekorean=12634;e.ogonek=731;e.ogonekcmb=808;e.ograve=242;e.ogujarati=2707;e.oharmenian=1413;e.ohiragana=12362;e.ohookabove=7887;e.ohorn=417;e.ohornacute=7899;e.ohorndotbelow=7907;e.ohorngrave=7901;e.ohornhookabove=7903;e.ohorntilde=7905;e.ohungarumlaut=337;e.oi=419;e.oinvertedbreve=527;e.okatakana=12458;e.okatakanahalfwidth=65397;e.okorean=12631;e.olehebrew=1451;e.omacron=333;e.omacronacute=7763;e.omacrongrave=7761;e.omdeva=2384;e.omega=969;e.omega1=982;e.omegacyrillic=1121;e.omegalatinclosed=631;e.omegaroundcyrillic=1147;e.omegatitlocyrillic=1149;e.omegatonos=974;e.omgujarati=2768;e.omicron=959;e.omicrontonos=972;e.omonospace=65359;e.one=49;e.onearabic=1633;e.onebengali=2535;e.onecircle=9312;e.onecircleinversesansserif=10122;e.onedeva=2407;e.onedotenleader=8228;e.oneeighth=8539;e.onefitted=63196;e.onegujarati=2791;e.onegurmukhi=2663;e.onehackarabic=1633;e.onehalf=189;e.onehangzhou=12321;e.oneideographicparen=12832;e.oneinferior=8321;e.onemonospace=65297;e.onenumeratorbengali=2548;e.oneoldstyle=63281;e.oneparen=9332;e.oneperiod=9352;e.onepersian=1777;e.onequarter=188;e.oneroman=8560;e.onesuperior=185;e.onethai=3665;e.onethird=8531;e.oogonek=491;e.oogonekmacron=493;e.oogurmukhi=2579;e.oomatragurmukhi=2635;e.oopen=596;e.oparen=9386;e.openbullet=9702;e.option=8997;e.ordfeminine=170;e.ordmasculine=186;e.orthogonal=8735;e.oshortdeva=2322;e.oshortvowelsigndeva=2378;e.oslash=248;e.oslashacute=511;e.osmallhiragana=12361;e.osmallkatakana=12457;e.osmallkatakanahalfwidth=65387;e.ostrokeacute=511;e.osuperior=63216;e.otcyrillic=1151;e.otilde=245;e.otildeacute=7757;e.otildedieresis=7759;e.oubopomofo=12577;e.overline=8254;e.overlinecenterline=65098;e.overlinecmb=773;e.overlinedashed=65097;e.overlinedblwavy=65100;e.overlinewavy=65099;e.overscore=175;e.ovowelsignbengali=2507;e.ovowelsigndeva=2379;e.ovowelsigngujarati=2763;e.p=112;e.paampssquare=13184;e.paasentosquare=13099;e.pabengali=2474;e.pacute=7765;e.padeva=2346;e.pagedown=8671;e.pageup=8670;e.pagujarati=2730;e.pagurmukhi=2602;e.pahiragana=12401;e.paiyannoithai=3631;e.pakatakana=12497;e.palatalizationcyrilliccmb=1156;e.palochkacyrillic=1216;e.pansioskorean=12671;e.paragraph=182;e.parallel=8741;e.parenleft=40;e.parenleftaltonearabic=64830;e.parenleftbt=63725;e.parenleftex=63724;e.parenleftinferior=8333;e.parenleftmonospace=65288;e.parenleftsmall=65113;e.parenleftsuperior=8317;e.parenlefttp=63723;e.parenleftvertical=65077;e.parenright=41;e.parenrightaltonearabic=64831;e.parenrightbt=63736;e.parenrightex=63735;e.parenrightinferior=8334;e.parenrightmonospace=65289;e.parenrightsmall=65114;e.parenrightsuperior=8318;e.parenrighttp=63734;e.parenrightvertical=65078;e.partialdiff=8706;e.paseqhebrew=1472;e.pashtahebrew=1433;e.pasquare=13225;e.patah=1463;e.patah11=1463;e.patah1d=1463;e.patah2a=1463;e.patahhebrew=1463;e.patahnarrowhebrew=1463;e.patahquarterhebrew=1463;e.patahwidehebrew=1463;e.pazerhebrew=1441;e.pbopomofo=12550;e.pcircle=9439;e.pdotaccent=7767;e.pe=1508;e.pecyrillic=1087;e.pedagesh=64324;e.pedageshhebrew=64324;e.peezisquare=13115;e.pefinaldageshhebrew=64323;e.peharabic=1662;e.peharmenian=1402;e.pehebrew=1508;e.pehfinalarabic=64343;e.pehinitialarabic=64344;e.pehiragana=12410;e.pehmedialarabic=64345;e.pekatakana=12506;e.pemiddlehookcyrillic=1191;e.perafehebrew=64334;e.percent=37;e.percentarabic=1642;e.percentmonospace=65285;e.percentsmall=65130;e.period=46;e.periodarmenian=1417;e.periodcentered=183;e.periodhalfwidth=65377;e.periodinferior=63207;e.periodmonospace=65294;e.periodsmall=65106;e.periodsuperior=63208;e.perispomenigreekcmb=834;e.perpendicular=8869;e.perthousand=8240;e.peseta=8359;e.pfsquare=13194;e.phabengali=2475;e.phadeva=2347;e.phagujarati=2731;e.phagurmukhi=2603;e.phi=966;e.phi1=981;e.phieuphacirclekorean=12922;e.phieuphaparenkorean=12826;e.phieuphcirclekorean=12908;e.phieuphkorean=12621;e.phieuphparenkorean=12812;e.philatin=632;e.phinthuthai=3642;e.phisymbolgreek=981;e.phook=421;e.phophanthai=3614;e.phophungthai=3612;e.phosamphaothai=3616;e.pi=960;e.pieupacirclekorean=12915;e.pieupaparenkorean=12819;e.pieupcieuckorean=12662;e.pieupcirclekorean=12901;e.pieupkiyeokkorean=12658;e.pieupkorean=12610;e.pieupparenkorean=12805;e.pieupsioskiyeokkorean=12660;e.pieupsioskorean=12612;e.pieupsiostikeutkorean=12661;e.pieupthieuthkorean=12663;e.pieuptikeutkorean=12659;e.pihiragana=12404;e.pikatakana=12500;e.pisymbolgreek=982;e.piwrarmenian=1411;e.plus=43;e.plusbelowcmb=799;e.pluscircle=8853;e.plusminus=177;e.plusmod=726;e.plusmonospace=65291;e.plussmall=65122;e.plussuperior=8314;e.pmonospace=65360;e.pmsquare=13272;e.pohiragana=12413;e.pointingindexdownwhite=9759;e.pointingindexleftwhite=9756;e.pointingindexrightwhite=9758;e.pointingindexupwhite=9757;e.pokatakana=12509;e.poplathai=3611;e.postalmark=12306;e.postalmarkface=12320;e.pparen=9387;e.precedes=8826;e.prescription=8478;e.primemod=697;e.primereversed=8245;e.product=8719;e.projective=8965;e.prolongedkana=12540;e.propellor=8984;e.propersubset=8834;e.propersuperset=8835;e.proportion=8759;e.proportional=8733;e.psi=968;e.psicyrillic=1137;e.psilipneumatacyrilliccmb=1158;e.pssquare=13232;e.puhiragana=12407;e.pukatakana=12503;e.pvsquare=13236;e.pwsquare=13242;e.q=113;e.qadeva=2392;e.qadmahebrew=1448;e.qafarabic=1602;e.qaffinalarabic=65238;e.qafinitialarabic=65239;e.qafmedialarabic=65240;e.qamats=1464;e.qamats10=1464;e.qamats1a=1464;e.qamats1c=1464;e.qamats27=1464;e.qamats29=1464;e.qamats33=1464;e.qamatsde=1464;e.qamatshebrew=1464;e.qamatsnarrowhebrew=1464;e.qamatsqatanhebrew=1464;e.qamatsqatannarrowhebrew=1464;e.qamatsqatanquarterhebrew=1464;e.qamatsqatanwidehebrew=1464;e.qamatsquarterhebrew=1464;e.qamatswidehebrew=1464;e.qarneyparahebrew=1439;e.qbopomofo=12561;e.qcircle=9440;e.qhook=672;e.qmonospace=65361;e.qof=1511;e.qofdagesh=64327;e.qofdageshhebrew=64327;e.qofhebrew=1511;e.qparen=9388;e.quarternote=9833;e.qubuts=1467;e.qubuts18=1467;e.qubuts25=1467;e.qubuts31=1467;e.qubutshebrew=1467;e.qubutsnarrowhebrew=1467;e.qubutsquarterhebrew=1467;e.qubutswidehebrew=1467;e.question=63;e.questionarabic=1567;e.questionarmenian=1374;e.questiondown=191;e.questiondownsmall=63423;e.questiongreek=894;e.questionmonospace=65311;e.questionsmall=63295;e.quotedbl=34;e.quotedblbase=8222;e.quotedblleft=8220;e.quotedblmonospace=65282;e.quotedblprime=12318;e.quotedblprimereversed=12317;e.quotedblright=8221;e.quoteleft=8216;e.quoteleftreversed=8219;e.quotereversed=8219;e.quoteright=8217;e.quoterightn=329;e.quotesinglbase=8218;e.quotesingle=39;e.quotesinglemonospace=65287;e.r=114;e.raarmenian=1404;e.rabengali=2480;e.racute=341;e.radeva=2352;e.radical=8730;e.radicalex=63717;e.radoverssquare=13230;e.radoverssquaredsquare=13231;e.radsquare=13229;e.rafe=1471;e.rafehebrew=1471;e.ragujarati=2736;e.ragurmukhi=2608;e.rahiragana=12425;e.rakatakana=12521;e.rakatakanahalfwidth=65431;e.ralowerdiagonalbengali=2545;e.ramiddlediagonalbengali=2544;e.ramshorn=612;e.ratio=8758;e.rbopomofo=12566;e.rcaron=345;e.rcedilla=343;e.rcircle=9441;e.rcommaaccent=343;e.rdblgrave=529;e.rdotaccent=7769;e.rdotbelow=7771;e.rdotbelowmacron=7773;e.referencemark=8251;e.reflexsubset=8838;e.reflexsuperset=8839;e.registered=174;e.registersans=63720;e.registerserif=63194;e.reharabic=1585;e.reharmenian=1408;e.rehfinalarabic=65198;e.rehiragana=12428;e.rekatakana=12524;e.rekatakanahalfwidth=65434;e.resh=1512;e.reshdageshhebrew=64328;e.reshhebrew=1512;e.reversedtilde=8765;e.reviahebrew=1431;e.reviamugrashhebrew=1431;e.revlogicalnot=8976;e.rfishhook=638;e.rfishhookreversed=639;e.rhabengali=2525;e.rhadeva=2397;e.rho=961;e.rhook=637;e.rhookturned=635;e.rhookturnedsuperior=693;e.rhosymbolgreek=1009;e.rhotichookmod=734;e.rieulacirclekorean=12913;e.rieulaparenkorean=12817;e.rieulcirclekorean=12899;e.rieulhieuhkorean=12608;e.rieulkiyeokkorean=12602;e.rieulkiyeoksioskorean=12649;e.rieulkorean=12601;e.rieulmieumkorean=12603;e.rieulpansioskorean=12652;e.rieulparenkorean=12803;e.rieulphieuphkorean=12607;e.rieulpieupkorean=12604;e.rieulpieupsioskorean=12651;e.rieulsioskorean=12605;e.rieulthieuthkorean=12606;e.rieultikeutkorean=12650;e.rieulyeorinhieuhkorean=12653;e.rightangle=8735;e.righttackbelowcmb=793;e.righttriangle=8895;e.rihiragana=12426;e.rikatakana=12522;e.rikatakanahalfwidth=65432;e.ring=730;e.ringbelowcmb=805;e.ringcmb=778;e.ringhalfleft=703;e.ringhalfleftarmenian=1369;e.ringhalfleftbelowcmb=796;e.ringhalfleftcentered=723;e.ringhalfright=702;e.ringhalfrightbelowcmb=825;e.ringhalfrightcentered=722;e.rinvertedbreve=531;e.rittorusquare=13137;e.rlinebelow=7775;e.rlongleg=636;e.rlonglegturned=634;e.rmonospace=65362;e.rohiragana=12429;e.rokatakana=12525;e.rokatakanahalfwidth=65435;e.roruathai=3619;e.rparen=9389;e.rrabengali=2524;e.rradeva=2353;e.rragurmukhi=2652;e.rreharabic=1681;e.rrehfinalarabic=64397;e.rrvocalicbengali=2528;e.rrvocalicdeva=2400;e.rrvocalicgujarati=2784;e.rrvocalicvowelsignbengali=2500;e.rrvocalicvowelsigndeva=2372;e.rrvocalicvowelsigngujarati=2756;e.rsuperior=63217;e.rtblock=9616;e.rturned=633;e.rturnedsuperior=692;e.ruhiragana=12427;e.rukatakana=12523;e.rukatakanahalfwidth=65433;e.rupeemarkbengali=2546;e.rupeesignbengali=2547;e.rupiah=63197;e.ruthai=3620;e.rvocalicbengali=2443;e.rvocalicdeva=2315;e.rvocalicgujarati=2699;e.rvocalicvowelsignbengali=2499;e.rvocalicvowelsigndeva=2371;e.rvocalicvowelsigngujarati=2755;e.s=115;e.sabengali=2488;e.sacute=347;e.sacutedotaccent=7781;e.sadarabic=1589;e.sadeva=2360;e.sadfinalarabic=65210;e.sadinitialarabic=65211;e.sadmedialarabic=65212;e.sagujarati=2744;e.sagurmukhi=2616;e.sahiragana=12373;e.sakatakana=12469;e.sakatakanahalfwidth=65403;e.sallallahoualayhewasallamarabic=65018;e.samekh=1505;e.samekhdagesh=64321;e.samekhdageshhebrew=64321;e.samekhhebrew=1505;e.saraaathai=3634;e.saraaethai=3649;e.saraaimaimalaithai=3652;e.saraaimaimuanthai=3651;e.saraamthai=3635;e.saraathai=3632;e.saraethai=3648;e.saraiileftthai=63622;e.saraiithai=3637;e.saraileftthai=63621;e.saraithai=3636;e.saraothai=3650;e.saraueeleftthai=63624;e.saraueethai=3639;e.saraueleftthai=63623;e.sarauethai=3638;e.sarauthai=3640;e.sarauuthai=3641;e.sbopomofo=12569;e.scaron=353;e.scarondotaccent=7783;e.scedilla=351;e.schwa=601;e.schwacyrillic=1241;e.schwadieresiscyrillic=1243;e.schwahook=602;e.scircle=9442;e.scircumflex=349;e.scommaaccent=537;e.sdotaccent=7777;e.sdotbelow=7779;e.sdotbelowdotaccent=7785;e.seagullbelowcmb=828;e.second=8243;e.secondtonechinese=714;e.section=167;e.seenarabic=1587;e.seenfinalarabic=65202;e.seeninitialarabic=65203;e.seenmedialarabic=65204;e.segol=1462;e.segol13=1462;e.segol1f=1462;e.segol2c=1462;e.segolhebrew=1462;e.segolnarrowhebrew=1462;e.segolquarterhebrew=1462;e.segoltahebrew=1426;e.segolwidehebrew=1462;e.seharmenian=1405;e.sehiragana=12379;e.sekatakana=12475;e.sekatakanahalfwidth=65406;e.semicolon=59;e.semicolonarabic=1563;e.semicolonmonospace=65307;e.semicolonsmall=65108;e.semivoicedmarkkana=12444;e.semivoicedmarkkanahalfwidth=65439;e.sentisquare=13090;e.sentosquare=13091;e.seven=55;e.sevenarabic=1639;e.sevenbengali=2541;e.sevencircle=9318;e.sevencircleinversesansserif=10128;e.sevendeva=2413;e.seveneighths=8542;e.sevengujarati=2797;e.sevengurmukhi=2669;e.sevenhackarabic=1639;e.sevenhangzhou=12327;e.sevenideographicparen=12838;e.seveninferior=8327;e.sevenmonospace=65303;e.sevenoldstyle=63287;e.sevenparen=9338;e.sevenperiod=9358;e.sevenpersian=1783;e.sevenroman=8566;e.sevensuperior=8311;e.seventeencircle=9328;e.seventeenparen=9348;e.seventeenperiod=9368;e.seventhai=3671;e.sfthyphen=173;e.shaarmenian=1399;e.shabengali=2486;e.shacyrillic=1096;e.shaddaarabic=1617;e.shaddadammaarabic=64609;e.shaddadammatanarabic=64606;e.shaddafathaarabic=64608;e.shaddakasraarabic=64610;e.shaddakasratanarabic=64607;e.shade=9618;e.shadedark=9619;e.shadelight=9617;e.shademedium=9618;e.shadeva=2358;e.shagujarati=2742;e.shagurmukhi=2614;e.shalshelethebrew=1427;e.shbopomofo=12565;e.shchacyrillic=1097;e.sheenarabic=1588;e.sheenfinalarabic=65206;e.sheeninitialarabic=65207;e.sheenmedialarabic=65208;e.sheicoptic=995;e.sheqel=8362;e.sheqelhebrew=8362;e.sheva=1456;e.sheva115=1456;e.sheva15=1456;e.sheva22=1456;e.sheva2e=1456;e.shevahebrew=1456;e.shevanarrowhebrew=1456;e.shevaquarterhebrew=1456;e.shevawidehebrew=1456;e.shhacyrillic=1211;e.shimacoptic=1005;e.shin=1513;e.shindagesh=64329;e.shindageshhebrew=64329;e.shindageshshindot=64300;e.shindageshshindothebrew=64300;e.shindageshsindot=64301;e.shindageshsindothebrew=64301;e.shindothebrew=1473;e.shinhebrew=1513;e.shinshindot=64298;e.shinshindothebrew=64298;e.shinsindot=64299;e.shinsindothebrew=64299;e.shook=642;e.sigma=963;e.sigma1=962;e.sigmafinal=962;e.sigmalunatesymbolgreek=1010;e.sihiragana=12375;e.sikatakana=12471;e.sikatakanahalfwidth=65404;e.siluqhebrew=1469;e.siluqlefthebrew=1469;e.similar=8764;e.sindothebrew=1474;e.siosacirclekorean=12916;e.siosaparenkorean=12820;e.sioscieuckorean=12670;e.sioscirclekorean=12902;e.sioskiyeokkorean=12666;e.sioskorean=12613;e.siosnieunkorean=12667;e.siosparenkorean=12806;e.siospieupkorean=12669;e.siostikeutkorean=12668;e.six=54;e.sixarabic=1638;e.sixbengali=2540;e.sixcircle=9317;e.sixcircleinversesansserif=10127;e.sixdeva=2412;e.sixgujarati=2796;e.sixgurmukhi=2668;e.sixhackarabic=1638;e.sixhangzhou=12326;e.sixideographicparen=12837;e.sixinferior=8326;e.sixmonospace=65302;e.sixoldstyle=63286;e.sixparen=9337;e.sixperiod=9357;e.sixpersian=1782;e.sixroman=8565;e.sixsuperior=8310;e.sixteencircle=9327;e.sixteencurrencydenominatorbengali=2553;e.sixteenparen=9347;e.sixteenperiod=9367;e.sixthai=3670;e.slash=47;e.slashmonospace=65295;e.slong=383;e.slongdotaccent=7835;e.smileface=9786;e.smonospace=65363;e.sofpasuqhebrew=1475;e.softhyphen=173;e.softsigncyrillic=1100;e.sohiragana=12381;e.sokatakana=12477;e.sokatakanahalfwidth=65407;e.soliduslongoverlaycmb=824;e.solidusshortoverlaycmb=823;e.sorusithai=3625;e.sosalathai=3624;e.sosothai=3595;e.sosuathai=3626;e.space=32;e.spacehackarabic=32;e.spade=9824;e.spadesuitblack=9824;e.spadesuitwhite=9828;e.sparen=9390;e.squarebelowcmb=827;e.squarecc=13252;e.squarecm=13213;e.squarediagonalcrosshatchfill=9641;e.squarehorizontalfill=9636;e.squarekg=13199;e.squarekm=13214;e.squarekmcapital=13262;e.squareln=13265;e.squarelog=13266;e.squaremg=13198;e.squaremil=13269;e.squaremm=13212;e.squaremsquared=13217;e.squareorthogonalcrosshatchfill=9638;e.squareupperlefttolowerrightfill=9639;e.squareupperrighttolowerleftfill=9640;e.squareverticalfill=9637;e.squarewhitewithsmallblack=9635;e.srsquare=13275;e.ssabengali=2487;e.ssadeva=2359;e.ssagujarati=2743;e.ssangcieuckorean=12617;e.ssanghieuhkorean=12677;e.ssangieungkorean=12672;e.ssangkiyeokkorean=12594;e.ssangnieunkorean=12645;e.ssangpieupkorean=12611;e.ssangsioskorean=12614;e.ssangtikeutkorean=12600;e.ssuperior=63218;e.sterling=163;e.sterlingmonospace=65505;e.strokelongoverlaycmb=822;e.strokeshortoverlaycmb=821;e.subset=8834;e.subsetnotequal=8842;e.subsetorequal=8838;e.succeeds=8827;e.suchthat=8715;e.suhiragana=12377;e.sukatakana=12473;e.sukatakanahalfwidth=65405;e.sukunarabic=1618;e.summation=8721;e.sun=9788;e.superset=8835;e.supersetnotequal=8843;e.supersetorequal=8839;e.svsquare=13276;e.syouwaerasquare=13180;e.t=116;e.tabengali=2468;e.tackdown=8868;e.tackleft=8867;e.tadeva=2340;e.tagujarati=2724;e.tagurmukhi=2596;e.taharabic=1591;e.tahfinalarabic=65218;e.tahinitialarabic=65219;e.tahiragana=12383;e.tahmedialarabic=65220;e.taisyouerasquare=13181;e.takatakana=12479;e.takatakanahalfwidth=65408;e.tatweelarabic=1600;e.tau=964;e.tav=1514;e.tavdages=64330;e.tavdagesh=64330;e.tavdageshhebrew=64330;e.tavhebrew=1514;e.tbar=359;e.tbopomofo=12554;e.tcaron=357;e.tccurl=680;e.tcedilla=355;e.tcheharabic=1670;e.tchehfinalarabic=64379;e.tchehinitialarabic=64380;e.tchehmedialarabic=64381;e.tcircle=9443;e.tcircumflexbelow=7793;e.tcommaaccent=355;e.tdieresis=7831;e.tdotaccent=7787;e.tdotbelow=7789;e.tecyrillic=1090;e.tedescendercyrillic=1197;e.teharabic=1578;e.tehfinalarabic=65174;e.tehhahinitialarabic=64674;e.tehhahisolatedarabic=64524;e.tehinitialarabic=65175;e.tehiragana=12390;e.tehjeeminitialarabic=64673;e.tehjeemisolatedarabic=64523;e.tehmarbutaarabic=1577;e.tehmarbutafinalarabic=65172;e.tehmedialarabic=65176;e.tehmeeminitialarabic=64676;e.tehmeemisolatedarabic=64526;e.tehnoonfinalarabic=64627;e.tekatakana=12486;e.tekatakanahalfwidth=65411;e.telephone=8481;e.telephoneblack=9742;e.telishagedolahebrew=1440;e.telishaqetanahebrew=1449;e.tencircle=9321;e.tenideographicparen=12841;e.tenparen=9341;e.tenperiod=9361;e.tenroman=8569;e.tesh=679;e.tet=1496;e.tetdagesh=64312;e.tetdageshhebrew=64312;e.tethebrew=1496;e.tetsecyrillic=1205;e.tevirhebrew=1435;e.tevirlefthebrew=1435;e.thabengali=2469;e.thadeva=2341;e.thagujarati=2725;e.thagurmukhi=2597;e.thalarabic=1584;e.thalfinalarabic=65196;e.thanthakhatlowleftthai=63640;e.thanthakhatlowrightthai=63639;e.thanthakhatthai=3660;e.thanthakhatupperleftthai=63638;e.theharabic=1579;e.thehfinalarabic=65178;e.thehinitialarabic=65179;e.thehmedialarabic=65180;e.thereexists=8707;e.therefore=8756;e.theta=952;e.theta1=977;e.thetasymbolgreek=977;e.thieuthacirclekorean=12921;e.thieuthaparenkorean=12825;e.thieuthcirclekorean=12907;e.thieuthkorean=12620;e.thieuthparenkorean=12811;e.thirteencircle=9324;e.thirteenparen=9344;e.thirteenperiod=9364;e.thonangmonthothai=3601;e.thook=429;e.thophuthaothai=3602;e.thorn=254;e.thothahanthai=3607;e.thothanthai=3600;e.thothongthai=3608;e.thothungthai=3606;e.thousandcyrillic=1154;e.thousandsseparatorarabic=1644;e.thousandsseparatorpersian=1644;e.three=51;e.threearabic=1635;e.threebengali=2537;e.threecircle=9314;e.threecircleinversesansserif=10124;e.threedeva=2409;e.threeeighths=8540;e.threegujarati=2793;e.threegurmukhi=2665;e.threehackarabic=1635;e.threehangzhou=12323;e.threeideographicparen=12834;e.threeinferior=8323;e.threemonospace=65299;e.threenumeratorbengali=2550;e.threeoldstyle=63283;e.threeparen=9334;e.threeperiod=9354;e.threepersian=1779;e.threequarters=190;e.threequartersemdash=63198;e.threeroman=8562;e.threesuperior=179;e.threethai=3667;e.thzsquare=13204;e.tihiragana=12385;e.tikatakana=12481;e.tikatakanahalfwidth=65409;e.tikeutacirclekorean=12912;e.tikeutaparenkorean=12816;e.tikeutcirclekorean=12898;e.tikeutkorean=12599;e.tikeutparenkorean=12802;e.tilde=732;e.tildebelowcmb=816;e.tildecmb=771;e.tildecomb=771;e.tildedoublecmb=864;e.tildeoperator=8764;e.tildeoverlaycmb=820;e.tildeverticalcmb=830;e.timescircle=8855;e.tipehahebrew=1430;e.tipehalefthebrew=1430;e.tippigurmukhi=2672;e.titlocyrilliccmb=1155;e.tiwnarmenian=1407;e.tlinebelow=7791;e.tmonospace=65364;e.toarmenian=1385;e.tohiragana=12392;e.tokatakana=12488;e.tokatakanahalfwidth=65412;e.tonebarextrahighmod=741;e.tonebarextralowmod=745;e.tonebarhighmod=742;e.tonebarlowmod=744;e.tonebarmidmod=743;e.tonefive=445;e.tonesix=389;e.tonetwo=424;e.tonos=900;e.tonsquare=13095;e.topatakthai=3599;e.tortoiseshellbracketleft=12308;e.tortoiseshellbracketleftsmall=65117;e.tortoiseshellbracketleftvertical=65081;e.tortoiseshellbracketright=12309;e.tortoiseshellbracketrightsmall=65118;e.tortoiseshellbracketrightvertical=65082;e.totaothai=3605;e.tpalatalhook=427;e.tparen=9391;e.trademark=8482;e.trademarksans=63722;e.trademarkserif=63195;e.tretroflexhook=648;e.triagdn=9660;e.triaglf=9668;e.triagrt=9658;e.triagup=9650;e.ts=678;e.tsadi=1510;e.tsadidagesh=64326;e.tsadidageshhebrew=64326;e.tsadihebrew=1510;e.tsecyrillic=1094;e.tsere=1461;e.tsere12=1461;e.tsere1e=1461;e.tsere2b=1461;e.tserehebrew=1461;e.tserenarrowhebrew=1461;e.tserequarterhebrew=1461;e.tserewidehebrew=1461;e.tshecyrillic=1115;e.tsuperior=63219;e.ttabengali=2463;e.ttadeva=2335;e.ttagujarati=2719;e.ttagurmukhi=2591;e.tteharabic=1657;e.ttehfinalarabic=64359;e.ttehinitialarabic=64360;e.ttehmedialarabic=64361;e.tthabengali=2464;e.tthadeva=2336;e.tthagujarati=2720;e.tthagurmukhi=2592;e.tturned=647;e.tuhiragana=12388;e.tukatakana=12484;e.tukatakanahalfwidth=65410;e.tusmallhiragana=12387;e.tusmallkatakana=12483;e.tusmallkatakanahalfwidth=65391;e.twelvecircle=9323;e.twelveparen=9343;e.twelveperiod=9363;e.twelveroman=8571;e.twentycircle=9331;e.twentyhangzhou=21316;e.twentyparen=9351;e.twentyperiod=9371;e.two=50;e.twoarabic=1634;e.twobengali=2536;e.twocircle=9313;e.twocircleinversesansserif=10123;e.twodeva=2408;e.twodotenleader=8229;e.twodotleader=8229;e.twodotleadervertical=65072;e.twogujarati=2792;e.twogurmukhi=2664;e.twohackarabic=1634;e.twohangzhou=12322;e.twoideographicparen=12833;e.twoinferior=8322;e.twomonospace=65298;e.twonumeratorbengali=2549;e.twooldstyle=63282;e.twoparen=9333;e.twoperiod=9353;e.twopersian=1778;e.tworoman=8561;e.twostroke=443;e.twosuperior=178;e.twothai=3666;e.twothirds=8532;e.u=117;e.uacute=250;e.ubar=649;e.ubengali=2441;e.ubopomofo=12584;e.ubreve=365;e.ucaron=468;e.ucircle=9444;e.ucircumflex=251;e.ucircumflexbelow=7799;e.ucyrillic=1091;e.udattadeva=2385;e.udblacute=369;e.udblgrave=533;e.udeva=2313;e.udieresis=252;e.udieresisacute=472;e.udieresisbelow=7795;e.udieresiscaron=474;e.udieresiscyrillic=1265;e.udieresisgrave=476;e.udieresismacron=470;e.udotbelow=7909;e.ugrave=249;e.ugujarati=2697;e.ugurmukhi=2569;e.uhiragana=12358;e.uhookabove=7911;e.uhorn=432;e.uhornacute=7913;e.uhorndotbelow=7921;e.uhorngrave=7915;e.uhornhookabove=7917;e.uhorntilde=7919;e.uhungarumlaut=369;e.uhungarumlautcyrillic=1267;e.uinvertedbreve=535;e.ukatakana=12454;e.ukatakanahalfwidth=65395;e.ukcyrillic=1145;e.ukorean=12636;e.umacron=363;e.umacroncyrillic=1263;e.umacrondieresis=7803;e.umatragurmukhi=2625;e.umonospace=65365;e.underscore=95;e.underscoredbl=8215;e.underscoremonospace=65343;e.underscorevertical=65075;e.underscorewavy=65103;e.union=8746;e.universal=8704;e.uogonek=371;e.uparen=9392;e.upblock=9600;e.upperdothebrew=1476;e.upsilon=965;e.upsilondieresis=971;e.upsilondieresistonos=944;e.upsilonlatin=650;e.upsilontonos=973;e.uptackbelowcmb=797;e.uptackmod=724;e.uragurmukhi=2675;e.uring=367;e.ushortcyrillic=1118;e.usmallhiragana=12357;e.usmallkatakana=12453;e.usmallkatakanahalfwidth=65385;e.ustraightcyrillic=1199;e.ustraightstrokecyrillic=1201;e.utilde=361;e.utildeacute=7801;e.utildebelow=7797;e.uubengali=2442;e.uudeva=2314;e.uugujarati=2698;e.uugurmukhi=2570;e.uumatragurmukhi=2626;e.uuvowelsignbengali=2498;e.uuvowelsigndeva=2370;e.uuvowelsigngujarati=2754;e.uvowelsignbengali=2497;e.uvowelsigndeva=2369;e.uvowelsigngujarati=2753;e.v=118;e.vadeva=2357;e.vagujarati=2741;e.vagurmukhi=2613;e.vakatakana=12535;e.vav=1493;e.vavdagesh=64309;e.vavdagesh65=64309;e.vavdageshhebrew=64309;e.vavhebrew=1493;e.vavholam=64331;e.vavholamhebrew=64331;e.vavvavhebrew=1520;e.vavyodhebrew=1521;e.vcircle=9445;e.vdotbelow=7807;e.vecyrillic=1074;e.veharabic=1700;e.vehfinalarabic=64363;e.vehinitialarabic=64364;e.vehmedialarabic=64365;e.vekatakana=12537;e.venus=9792;e.verticalbar=124;e.verticallineabovecmb=781;e.verticallinebelowcmb=809;e.verticallinelowmod=716;e.verticallinemod=712;e.vewarmenian=1406;e.vhook=651;e.vikatakana=12536;e.viramabengali=2509;e.viramadeva=2381;e.viramagujarati=2765;e.visargabengali=2435;e.visargadeva=2307;e.visargagujarati=2691;e.vmonospace=65366;e.voarmenian=1400;e.voicediterationhiragana=12446;e.voicediterationkatakana=12542;e.voicedmarkkana=12443;e.voicedmarkkanahalfwidth=65438;e.vokatakana=12538;e.vparen=9393;e.vtilde=7805;e.vturned=652;e.vuhiragana=12436;e.vukatakana=12532;e.w=119;e.wacute=7811;e.waekorean=12633;e.wahiragana=12431;e.wakatakana=12527;e.wakatakanahalfwidth=65436;e.wakorean=12632;e.wasmallhiragana=12430;e.wasmallkatakana=12526;e.wattosquare=13143;e.wavedash=12316;e.wavyunderscorevertical=65076;e.wawarabic=1608;e.wawfinalarabic=65262;e.wawhamzaabovearabic=1572;e.wawhamzaabovefinalarabic=65158;e.wbsquare=13277;e.wcircle=9446;e.wcircumflex=373;e.wdieresis=7813;e.wdotaccent=7815;e.wdotbelow=7817;e.wehiragana=12433;e.weierstrass=8472;e.wekatakana=12529;e.wekorean=12638;e.weokorean=12637;e.wgrave=7809;e.whitebullet=9702;e.whitecircle=9675;e.whitecircleinverse=9689;e.whitecornerbracketleft=12302;e.whitecornerbracketleftvertical=65091;e.whitecornerbracketright=12303;e.whitecornerbracketrightvertical=65092;e.whitediamond=9671;e.whitediamondcontainingblacksmalldiamond=9672;e.whitedownpointingsmalltriangle=9663;e.whitedownpointingtriangle=9661;e.whiteleftpointingsmalltriangle=9667;e.whiteleftpointingtriangle=9665;e.whitelenticularbracketleft=12310;e.whitelenticularbracketright=12311;e.whiterightpointingsmalltriangle=9657;e.whiterightpointingtriangle=9655;e.whitesmallsquare=9643;e.whitesmilingface=9786;e.whitesquare=9633;e.whitestar=9734;e.whitetelephone=9743;e.whitetortoiseshellbracketleft=12312;e.whitetortoiseshellbracketright=12313;e.whiteuppointingsmalltriangle=9653;e.whiteuppointingtriangle=9651;e.wihiragana=12432;e.wikatakana=12528;e.wikorean=12639;e.wmonospace=65367;e.wohiragana=12434;e.wokatakana=12530;e.wokatakanahalfwidth=65382;e.won=8361;e.wonmonospace=65510;e.wowaenthai=3623;e.wparen=9394;e.wring=7832;e.wsuperior=695;e.wturned=653;e.wynn=447;e.x=120;e.xabovecmb=829;e.xbopomofo=12562;e.xcircle=9447;e.xdieresis=7821;e.xdotaccent=7819;e.xeharmenian=1389;e.xi=958;e.xmonospace=65368;e.xparen=9395;e.xsuperior=739;e.y=121;e.yaadosquare=13134;e.yabengali=2479;e.yacute=253;e.yadeva=2351;e.yaekorean=12626;e.yagujarati=2735;e.yagurmukhi=2607;e.yahiragana=12420;e.yakatakana=12516;e.yakatakanahalfwidth=65428;e.yakorean=12625;e.yamakkanthai=3662;e.yasmallhiragana=12419;e.yasmallkatakana=12515;e.yasmallkatakanahalfwidth=65388;e.yatcyrillic=1123;e.ycircle=9448;e.ycircumflex=375;e.ydieresis=255;e.ydotaccent=7823;e.ydotbelow=7925;e.yeharabic=1610;e.yehbarreearabic=1746;e.yehbarreefinalarabic=64431;e.yehfinalarabic=65266;e.yehhamzaabovearabic=1574;e.yehhamzaabovefinalarabic=65162;e.yehhamzaaboveinitialarabic=65163;e.yehhamzaabovemedialarabic=65164;e.yehinitialarabic=65267;e.yehmedialarabic=65268;e.yehmeeminitialarabic=64733;e.yehmeemisolatedarabic=64600;e.yehnoonfinalarabic=64660;e.yehthreedotsbelowarabic=1745;e.yekorean=12630;e.yen=165;e.yenmonospace=65509;e.yeokorean=12629;e.yeorinhieuhkorean=12678;e.yerahbenyomohebrew=1450;e.yerahbenyomolefthebrew=1450;e.yericyrillic=1099;e.yerudieresiscyrillic=1273;e.yesieungkorean=12673;e.yesieungpansioskorean=12675;e.yesieungsioskorean=12674;e.yetivhebrew=1434;e.ygrave=7923;e.yhook=436;e.yhookabove=7927;e.yiarmenian=1397;e.yicyrillic=1111;e.yikorean=12642;e.yinyang=9775;e.yiwnarmenian=1410;e.ymonospace=65369;e.yod=1497;e.yoddagesh=64313;e.yoddageshhebrew=64313;e.yodhebrew=1497;e.yodyodhebrew=1522;e.yodyodpatahhebrew=64287;e.yohiragana=12424;e.yoikorean=12681;e.yokatakana=12520;e.yokatakanahalfwidth=65430;e.yokorean=12635;e.yosmallhiragana=12423;e.yosmallkatakana=12519;e.yosmallkatakanahalfwidth=65390;e.yotgreek=1011;e.yoyaekorean=12680;e.yoyakorean=12679;e.yoyakthai=3618;e.yoyingthai=3597;e.yparen=9396;e.ypogegrammeni=890;e.ypogegrammenigreekcmb=837;e.yr=422;e.yring=7833;e.ysuperior=696;e.ytilde=7929;e.yturned=654;e.yuhiragana=12422;e.yuikorean=12684;e.yukatakana=12518;e.yukatakanahalfwidth=65429;e.yukorean=12640;e.yusbigcyrillic=1131;e.yusbigiotifiedcyrillic=1133;e.yuslittlecyrillic=1127;e.yuslittleiotifiedcyrillic=1129;e.yusmallhiragana=12421;e.yusmallkatakana=12517;e.yusmallkatakanahalfwidth=65389;e.yuyekorean=12683;e.yuyeokorean=12682;e.yyabengali=2527;e.yyadeva=2399;e.z=122;e.zaarmenian=1382;e.zacute=378;e.zadeva=2395;e.zagurmukhi=2651;e.zaharabic=1592;e.zahfinalarabic=65222;e.zahinitialarabic=65223;e.zahiragana=12374;e.zahmedialarabic=65224;e.zainarabic=1586;e.zainfinalarabic=65200;e.zakatakana=12470;e.zaqefgadolhebrew=1429;e.zaqefqatanhebrew=1428;e.zarqahebrew=1432;e.zayin=1494;e.zayindagesh=64310;e.zayindageshhebrew=64310;e.zayinhebrew=1494;e.zbopomofo=12567;e.zcaron=382;e.zcircle=9449;e.zcircumflex=7825;e.zcurl=657;e.zdot=380;e.zdotaccent=380;e.zdotbelow=7827;e.zecyrillic=1079;e.zedescendercyrillic=1177;e.zedieresiscyrillic=1247;e.zehiragana=12380;e.zekatakana=12476;e.zero=48;e.zeroarabic=1632;e.zerobengali=2534;e.zerodeva=2406;e.zerogujarati=2790;e.zerogurmukhi=2662;e.zerohackarabic=1632;e.zeroinferior=8320;e.zeromonospace=65296;e.zerooldstyle=63280;e.zeropersian=1776;e.zerosuperior=8304;e.zerothai=3664;e.zerowidthjoiner=65279;e.zerowidthnonjoiner=8204;e.zerowidthspace=8203;e.zeta=950;e.zhbopomofo=12563;e.zhearmenian=1386;e.zhebrevecyrillic=1218;e.zhecyrillic=1078;e.zhedescendercyrillic=1175;e.zhedieresiscyrillic=1245;e.zihiragana=12376;e.zikatakana=12472;e.zinorhebrew=1454;e.zlinebelow=7829;e.zmonospace=65370;e.zohiragana=12382;e.zokatakana=12478;e.zparen=9397;e.zretroflexhook=656;e.zstroke=438;e.zuhiragana=12378;e.zukatakana=12474;e[".notdef"]=0;e.angbracketleftbig=9001;e.angbracketleftBig=9001;e.angbracketleftbigg=9001;e.angbracketleftBigg=9001;e.angbracketrightBig=9002;e.angbracketrightbig=9002;e.angbracketrightBigg=9002;e.angbracketrightbigg=9002;e.arrowhookleft=8618;e.arrowhookright=8617;e.arrowlefttophalf=8636;e.arrowleftbothalf=8637;e.arrownortheast=8599;e.arrownorthwest=8598;e.arrowrighttophalf=8640;e.arrowrightbothalf=8641;e.arrowsoutheast=8600;e.arrowsouthwest=8601;e.backslashbig=8726;e.backslashBig=8726;e.backslashBigg=8726;e.backslashbigg=8726;e.bardbl=8214;e.bracehtipdownleft=65079;e.bracehtipdownright=65079;e.bracehtipupleft=65080;e.bracehtipupright=65080;e.braceleftBig=123;e.braceleftbig=123;e.braceleftbigg=123;e.braceleftBigg=123;e.bracerightBig=125;e.bracerightbig=125;e.bracerightbigg=125;e.bracerightBigg=125;e.bracketleftbig=91;e.bracketleftBig=91;e.bracketleftbigg=91;e.bracketleftBigg=91;e.bracketrightBig=93;e.bracketrightbig=93;e.bracketrightbigg=93;e.bracketrightBigg=93;e.ceilingleftbig=8968;e.ceilingleftBig=8968;e.ceilingleftBigg=8968;e.ceilingleftbigg=8968;e.ceilingrightbig=8969;e.ceilingrightBig=8969;e.ceilingrightbigg=8969;e.ceilingrightBigg=8969;e.circledotdisplay=8857;e.circledottext=8857;e.circlemultiplydisplay=8855;e.circlemultiplytext=8855;e.circleplusdisplay=8853;e.circleplustext=8853;e.contintegraldisplay=8750;e.contintegraltext=8750;e.coproductdisplay=8720;e.coproducttext=8720;e.floorleftBig=8970;e.floorleftbig=8970;e.floorleftbigg=8970;e.floorleftBigg=8970;e.floorrightbig=8971;e.floorrightBig=8971;e.floorrightBigg=8971;e.floorrightbigg=8971;e.hatwide=770;e.hatwider=770;e.hatwidest=770;e.intercal=7488;e.integraldisplay=8747;e.integraltext=8747;e.intersectiondisplay=8898;e.intersectiontext=8898;e.logicalanddisplay=8743;e.logicalandtext=8743;e.logicalordisplay=8744;e.logicalortext=8744;e.parenleftBig=40;e.parenleftbig=40;e.parenleftBigg=40;e.parenleftbigg=40;e.parenrightBig=41;e.parenrightbig=41;e.parenrightBigg=41;e.parenrightbigg=41;e.prime=8242;e.productdisplay=8719;e.producttext=8719;e.radicalbig=8730;e.radicalBig=8730;e.radicalBigg=8730;e.radicalbigg=8730;e.radicalbt=8730;e.radicaltp=8730;e.radicalvertex=8730;e.slashbig=47;e.slashBig=47;e.slashBigg=47;e.slashbigg=47;e.summationdisplay=8721;e.summationtext=8721;e.tildewide=732;e.tildewider=732;e.tildewidest=732;e.uniondisplay=8899;e.unionmultidisplay=8846;e.unionmultitext=8846;e.unionsqdisplay=8852;e.unionsqtext=8852;e.uniontext=8899;e.vextenddouble=8741;e.vextendsingle=8739})),n=r((function(e){e.space=32;e.a1=9985;e.a2=9986;e.a202=9987;e.a3=9988;e.a4=9742;e.a5=9990;e.a119=9991;e.a118=9992;e.a117=9993;e.a11=9755;e.a12=9758;e.a13=9996;e.a14=9997;e.a15=9998;e.a16=9999;e.a105=1e4;e.a17=10001;e.a18=10002;e.a19=10003;e.a20=10004;e.a21=10005;e.a22=10006;e.a23=10007;e.a24=10008;e.a25=10009;e.a26=10010;e.a27=10011;e.a28=10012;e.a6=10013;e.a7=10014;e.a8=10015;e.a9=10016;e.a10=10017;e.a29=10018;e.a30=10019;e.a31=10020;e.a32=10021;e.a33=10022;e.a34=10023;e.a35=9733;e.a36=10025;e.a37=10026;e.a38=10027;e.a39=10028;e.a40=10029;e.a41=10030;e.a42=10031;e.a43=10032;e.a44=10033;e.a45=10034;e.a46=10035;e.a47=10036;e.a48=10037;e.a49=10038;e.a50=10039;e.a51=10040;e.a52=10041;e.a53=10042;e.a54=10043;e.a55=10044;e.a56=10045;e.a57=10046;e.a58=10047;e.a59=10048;e.a60=10049;e.a61=10050;e.a62=10051;e.a63=10052;e.a64=10053;e.a65=10054;e.a66=10055;e.a67=10056;e.a68=10057;e.a69=10058;e.a70=10059;e.a71=9679;e.a72=10061;e.a73=9632;e.a74=10063;e.a203=10064;e.a75=10065;e.a204=10066;e.a76=9650;e.a77=9660;e.a78=9670;e.a79=10070;e.a81=9687;e.a82=10072;e.a83=10073;e.a84=10074;e.a97=10075;e.a98=10076;e.a99=10077;e.a100=10078;e.a101=10081;e.a102=10082;e.a103=10083;e.a104=10084;e.a106=10085;e.a107=10086;e.a108=10087;e.a112=9827;e.a111=9830;e.a110=9829;e.a109=9824;e.a120=9312;e.a121=9313;e.a122=9314;e.a123=9315;e.a124=9316;e.a125=9317;e.a126=9318;e.a127=9319;e.a128=9320;e.a129=9321;e.a130=10102;e.a131=10103;e.a132=10104;e.a133=10105;e.a134=10106;e.a135=10107;e.a136=10108;e.a137=10109;e.a138=10110;e.a139=10111;e.a140=10112;e.a141=10113;e.a142=10114;e.a143=10115;e.a144=10116;e.a145=10117;e.a146=10118;e.a147=10119;e.a148=10120;e.a149=10121;e.a150=10122;e.a151=10123;e.a152=10124;e.a153=10125;e.a154=10126;e.a155=10127;e.a156=10128;e.a157=10129;e.a158=10130;e.a159=10131;e.a160=10132;e.a161=8594;e.a163=8596;e.a164=8597;e.a196=10136;e.a165=10137;e.a192=10138;e.a166=10139;e.a167=10140;e.a168=10141;e.a169=10142;e.a170=10143;e.a171=10144;e.a172=10145;e.a173=10146;e.a162=10147;e.a174=10148;e.a175=10149;e.a176=10150;e.a177=10151;e.a178=10152;e.a179=10153;e.a193=10154;e.a180=10155;e.a199=10156;e.a181=10157;e.a200=10158;e.a182=10159;e.a201=10161;e.a183=10162;e.a184=10163;e.a197=10164;e.a185=10165;e.a194=10166;e.a198=10167;e.a186=10168;e.a195=10169;e.a187=10170;e.a188=10171;e.a189=10172;e.a190=10173;e.a191=10174;e.a89=10088;e.a90=10089;e.a93=10090;e.a94=10091;e.a91=10092;e.a92=10093;e.a205=10094;e.a85=10095;e.a206=10096;e.a86=10097;e.a87=10098;e.a88=10099;e.a95=10100;e.a96=10101;e[".notdef"]=0}));t.getGlyphsUnicode=i;t.getDingbatsGlyphsUnicode=n},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.getSupplementalGlyphMapForCalibri=t.getSupplementalGlyphMapForArialBlack=t.getGlyphMapForStandardFonts=t.getSymbolsFonts=t.getSerifFonts=t.getNonStdFontMap=t.getStdFontMap=void 0;var r=a(7);const i=(0,r.getLookupTableFactory)((function(e){e.ArialNarrow="Helvetica";e["ArialNarrow-Bold"]="Helvetica-Bold";e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique";e["ArialNarrow-Italic"]="Helvetica-Oblique";e.ArialBlack="Helvetica";e["ArialBlack-Bold"]="Helvetica-Bold";e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique";e["ArialBlack-Italic"]="Helvetica-Oblique";e["Arial-Black"]="Helvetica";e["Arial-Black-Bold"]="Helvetica-Bold";e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique";e["Arial-Black-Italic"]="Helvetica-Oblique";e.Arial="Helvetica";e["Arial-Bold"]="Helvetica-Bold";e["Arial-BoldItalic"]="Helvetica-BoldOblique";e["Arial-Italic"]="Helvetica-Oblique";e["Arial-BoldItalicMT"]="Helvetica-BoldOblique";e["Arial-BoldMT"]="Helvetica-Bold";e["Arial-ItalicMT"]="Helvetica-Oblique";e.ArialMT="Helvetica";e["Courier-Bold"]="Courier-Bold";e["Courier-BoldItalic"]="Courier-BoldOblique";e["Courier-Italic"]="Courier-Oblique";e.CourierNew="Courier";e["CourierNew-Bold"]="Courier-Bold";e["CourierNew-BoldItalic"]="Courier-BoldOblique";e["CourierNew-Italic"]="Courier-Oblique";e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique";e["CourierNewPS-BoldMT"]="Courier-Bold";e["CourierNewPS-ItalicMT"]="Courier-Oblique";e.CourierNewPSMT="Courier";e.Helvetica="Helvetica";e["Helvetica-Bold"]="Helvetica-Bold";e["Helvetica-BoldItalic"]="Helvetica-BoldOblique";e["Helvetica-BoldOblique"]="Helvetica-BoldOblique";e["Helvetica-Italic"]="Helvetica-Oblique";e["Helvetica-Oblique"]="Helvetica-Oblique";e["Symbol-Bold"]="Symbol";e["Symbol-BoldItalic"]="Symbol";e["Symbol-Italic"]="Symbol";e.TimesNewRoman="Times-Roman";e["TimesNewRoman-Bold"]="Times-Bold";e["TimesNewRoman-BoldItalic"]="Times-BoldItalic";e["TimesNewRoman-Italic"]="Times-Italic";e.TimesNewRomanPS="Times-Roman";e["TimesNewRomanPS-Bold"]="Times-Bold";e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic";e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic";e["TimesNewRomanPS-BoldMT"]="Times-Bold";e["TimesNewRomanPS-Italic"]="Times-Italic";e["TimesNewRomanPS-ItalicMT"]="Times-Italic";e.TimesNewRomanPSMT="Times-Roman";e["TimesNewRomanPSMT-Bold"]="Times-Bold";e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic";e["TimesNewRomanPSMT-Italic"]="Times-Italic"}));t.getStdFontMap=i;const n=(0,r.getLookupTableFactory)((function(e){e.Calibri="Helvetica";e["Calibri-Bold"]="Helvetica-Bold";e["Calibri-BoldItalic"]="Helvetica-BoldOblique";e["Calibri-Italic"]="Helvetica-Oblique";e.CenturyGothic="Helvetica";e["CenturyGothic-Bold"]="Helvetica-Bold";e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique";e["CenturyGothic-Italic"]="Helvetica-Oblique";e.ComicSansMS="Comic Sans MS";e["ComicSansMS-Bold"]="Comic Sans MS-Bold";e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic";e["ComicSansMS-Italic"]="Comic Sans MS-Italic";e.LucidaConsole="Courier";e["LucidaConsole-Bold"]="Courier-Bold";e["LucidaConsole-BoldItalic"]="Courier-BoldOblique";e["LucidaConsole-Italic"]="Courier-Oblique";e["LucidaSans-Demi"]="Helvetica-Bold";e["MS-Gothic"]="MS Gothic";e["MS-Gothic-Bold"]="MS Gothic-Bold";e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic";e["MS-Gothic-Italic"]="MS Gothic-Italic";e["MS-Mincho"]="MS Mincho";e["MS-Mincho-Bold"]="MS Mincho-Bold";e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic";e["MS-Mincho-Italic"]="MS Mincho-Italic";e["MS-PGothic"]="MS PGothic";e["MS-PGothic-Bold"]="MS PGothic-Bold";e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic";e["MS-PGothic-Italic"]="MS PGothic-Italic";e["MS-PMincho"]="MS PMincho";e["MS-PMincho-Bold"]="MS PMincho-Bold";e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic";e["MS-PMincho-Italic"]="MS PMincho-Italic";e.NuptialScript="Times-Italic";e.SegoeUISymbol="Helvetica";e.Wingdings="ZapfDingbats";e["Wingdings-Regular"]="ZapfDingbats"}));t.getNonStdFontMap=n;const s=(0,r.getLookupTableFactory)((function(e){e["Adobe Jenson"]=!0;e["Adobe Text"]=!0;e.Albertus=!0;e.Aldus=!0;e.Alexandria=!0;e.Algerian=!0;e["American Typewriter"]=!0;e.Antiqua=!0;e.Apex=!0;e.Arno=!0;e.Aster=!0;e.Aurora=!0;e.Baskerville=!0;e.Bell=!0;e.Bembo=!0;e["Bembo Schoolbook"]=!0;e.Benguiat=!0;e["Berkeley Old Style"]=!0;e["Bernhard Modern"]=!0;e["Berthold City"]=!0;e.Bodoni=!0;e["Bauer Bodoni"]=!0;e["Book Antiqua"]=!0;e.Bookman=!0;e["Bordeaux Roman"]=!0;e["Californian FB"]=!0;e.Calisto=!0;e.Calvert=!0;e.Capitals=!0;e.Cambria=!0;e.Cartier=!0;e.Caslon=!0;e.Catull=!0;e.Centaur=!0;e["Century Old Style"]=!0;e["Century Schoolbook"]=!0;e.Chaparral=!0;e["Charis SIL"]=!0;e.Cheltenham=!0;e["Cholla Slab"]=!0;e.Clarendon=!0;e.Clearface=!0;e.Cochin=!0;e.Colonna=!0;e["Computer Modern"]=!0;e["Concrete Roman"]=!0;e.Constantia=!0;e["Cooper Black"]=!0;e.Corona=!0;e.Ecotype=!0;e.Egyptienne=!0;e.Elephant=!0;e.Excelsior=!0;e.Fairfield=!0;e["FF Scala"]=!0;e.Folkard=!0;e.Footlight=!0;e.FreeSerif=!0;e["Friz Quadrata"]=!0;e.Garamond=!0;e.Gentium=!0;e.Georgia=!0;e.Gloucester=!0;e["Goudy Old Style"]=!0;e["Goudy Schoolbook"]=!0;e["Goudy Pro Font"]=!0;e.Granjon=!0;e["Guardian Egyptian"]=!0;e.Heather=!0;e.Hercules=!0;e["High Tower Text"]=!0;e.Hiroshige=!0;e["Hoefler Text"]=!0;e["Humana Serif"]=!0;e.Imprint=!0;e["Ionic No. 5"]=!0;e.Janson=!0;e.Joanna=!0;e.Korinna=!0;e.Lexicon=!0;e["Liberation Serif"]=!0;e["Linux Libertine"]=!0;e.Literaturnaya=!0;e.Lucida=!0;e["Lucida Bright"]=!0;e.Melior=!0;e.Memphis=!0;e.Miller=!0;e.Minion=!0;e.Modern=!0;e["Mona Lisa"]=!0;e["Mrs Eaves"]=!0;e["MS Serif"]=!0;e["Museo Slab"]=!0;e["New York"]=!0;e["Nimbus Roman"]=!0;e["NPS Rawlinson Roadway"]=!0;e.NuptialScript=!0;e.Palatino=!0;e.Perpetua=!0;e.Plantin=!0;e["Plantin Schoolbook"]=!0;e.Playbill=!0;e["Poor Richard"]=!0;e["Rawlinson Roadway"]=!0;e.Renault=!0;e.Requiem=!0;e.Rockwell=!0;e.Roman=!0;e["Rotis Serif"]=!0;e.Sabon=!0;e.Scala=!0;e.Seagull=!0;e.Sistina=!0;e.Souvenir=!0;e.STIX=!0;e["Stone Informal"]=!0;e["Stone Serif"]=!0;e.Sylfaen=!0;e.Times=!0;e.Trajan=!0;e["Trinité"]=!0;e["Trump Mediaeval"]=!0;e.Utopia=!0;e["Vale Type"]=!0;e["Bitstream Vera"]=!0;e["Vera Serif"]=!0;e.Versailles=!0;e.Wanted=!0;e.Weiss=!0;e["Wide Latin"]=!0;e.Windsor=!0;e.XITS=!0}));t.getSerifFonts=s;const o=(0,r.getLookupTableFactory)((function(e){e.Dingbats=!0;e.Symbol=!0;e.ZapfDingbats=!0}));t.getSymbolsFonts=o;const c=(0,r.getLookupTableFactory)((function(e){e[2]=10;e[3]=32;e[4]=33;e[5]=34;e[6]=35;e[7]=36;e[8]=37;e[9]=38;e[10]=39;e[11]=40;e[12]=41;e[13]=42;e[14]=43;e[15]=44;e[16]=45;e[17]=46;e[18]=47;e[19]=48;e[20]=49;e[21]=50;e[22]=51;e[23]=52;e[24]=53;e[25]=54;e[26]=55;e[27]=56;e[28]=57;e[29]=58;e[30]=894;e[31]=60;e[32]=61;e[33]=62;e[34]=63;e[35]=64;e[36]=65;e[37]=66;e[38]=67;e[39]=68;e[40]=69;e[41]=70;e[42]=71;e[43]=72;e[44]=73;e[45]=74;e[46]=75;e[47]=76;e[48]=77;e[49]=78;e[50]=79;e[51]=80;e[52]=81;e[53]=82;e[54]=83;e[55]=84;e[56]=85;e[57]=86;e[58]=87;e[59]=88;e[60]=89;e[61]=90;e[62]=91;e[63]=92;e[64]=93;e[65]=94;e[66]=95;e[67]=96;e[68]=97;e[69]=98;e[70]=99;e[71]=100;e[72]=101;e[73]=102;e[74]=103;e[75]=104;e[76]=105;e[77]=106;e[78]=107;e[79]=108;e[80]=109;e[81]=110;e[82]=111;e[83]=112;e[84]=113;e[85]=114;e[86]=115;e[87]=116;e[88]=117;e[89]=118;e[90]=119;e[91]=120;e[92]=121;e[93]=122;e[94]=123;e[95]=124;e[96]=125;e[97]=126;e[98]=196;e[99]=197;e[100]=199;e[101]=201;e[102]=209;e[103]=214;e[104]=220;e[105]=225;e[106]=224;e[107]=226;e[108]=228;e[109]=227;e[110]=229;e[111]=231;e[112]=233;e[113]=232;e[114]=234;e[115]=235;e[116]=237;e[117]=236;e[118]=238;e[119]=239;e[120]=241;e[121]=243;e[122]=242;e[123]=244;e[124]=246;e[125]=245;e[126]=250;e[127]=249;e[128]=251;e[129]=252;e[130]=8224;e[131]=176;e[132]=162;e[133]=163;e[134]=167;e[135]=8226;e[136]=182;e[137]=223;e[138]=174;e[139]=169;e[140]=8482;e[141]=180;e[142]=168;e[143]=8800;e[144]=198;e[145]=216;e[146]=8734;e[147]=177;e[148]=8804;e[149]=8805;e[150]=165;e[151]=181;e[152]=8706;e[153]=8721;e[154]=8719;e[156]=8747;e[157]=170;e[158]=186;e[159]=8486;e[160]=230;e[161]=248;e[162]=191;e[163]=161;e[164]=172;e[165]=8730;e[166]=402;e[167]=8776;e[168]=8710;e[169]=171;e[170]=187;e[171]=8230;e[210]=218;e[223]=711;e[224]=321;e[225]=322;e[227]=353;e[229]=382;e[234]=253;e[252]=263;e[253]=268;e[254]=269;e[258]=258;e[260]=260;e[261]=261;e[265]=280;e[266]=281;e[268]=283;e[269]=313;e[275]=323;e[276]=324;e[278]=328;e[284]=345;e[285]=346;e[286]=347;e[292]=367;e[295]=377;e[296]=378;e[298]=380;e[305]=963;e[306]=964;e[307]=966;e[308]=8215;e[309]=8252;e[310]=8319;e[311]=8359;e[312]=8592;e[313]=8593;e[337]=9552;e[493]=1039;e[494]=1040;e[705]=1524;e[706]=8362;e[710]=64288;e[711]=64298;e[759]=1617;e[761]=1776;e[763]=1778;e[775]=1652;e[777]=1764;e[778]=1780;e[779]=1781;e[780]=1782;e[782]=771;e[783]=64726;e[786]=8363;e[788]=8532;e[790]=768;e[791]=769;e[792]=768;e[795]=803;e[797]=64336;e[798]=64337;e[799]=64342;e[800]=64343;e[801]=64344;e[802]=64345;e[803]=64362;e[804]=64363;e[805]=64364;e[2424]=7821;e[2425]=7822;e[2426]=7823;e[2427]=7824;e[2428]=7825;e[2429]=7826;e[2430]=7827;e[2433]=7682;e[2678]=8045;e[2679]=8046;e[2830]=1552;e[2838]=686;e[2840]=751;e[2842]=753;e[2843]=754;e[2844]=755;e[2846]=757;e[2856]=767;e[2857]=848;e[2858]=849;e[2862]=853;e[2863]=854;e[2864]=855;e[2865]=861;e[2866]=862;e[2906]=7460;e[2908]=7462;e[2909]=7463;e[2910]=7464;e[2912]=7466;e[2913]=7467;e[2914]=7468;e[2916]=7470;e[2917]=7471;e[2918]=7472;e[2920]=7474;e[2921]=7475;e[2922]=7476;e[2924]=7478;e[2925]=7479;e[2926]=7480;e[2928]=7482;e[2929]=7483;e[2930]=7484;e[2932]=7486;e[2933]=7487;e[2934]=7488;e[2936]=7490;e[2937]=7491;e[2938]=7492;e[2940]=7494;e[2941]=7495;e[2942]=7496;e[2944]=7498;e[2946]=7500;e[2948]=7502;e[2950]=7504;e[2951]=7505;e[2952]=7506;e[2954]=7508;e[2955]=7509;e[2956]=7510;e[2958]=7512;e[2959]=7513;e[2960]=7514;e[2962]=7516;e[2963]=7517;e[2964]=7518;e[2966]=7520;e[2967]=7521;e[2968]=7522;e[2970]=7524;e[2971]=7525;e[2972]=7526;e[2974]=7528;e[2975]=7529;e[2976]=7530;e[2978]=1537;e[2979]=1538;e[2980]=1539;e[2982]=1549;e[2983]=1551;e[2984]=1552;e[2986]=1554;e[2987]=1555;e[2988]=1556;e[2990]=1623;e[2991]=1624;e[2995]=1775;e[2999]=1791;e[3002]=64290;e[3003]=64291;e[3004]=64292;e[3006]=64294;e[3007]=64295;e[3008]=64296;e[3011]=1900;e[3014]=8223;e[3015]=8244;e[3017]=7532;e[3018]=7533;e[3019]=7534;e[3075]=7590;e[3076]=7591;e[3079]=7594;e[3080]=7595;e[3083]=7598;e[3084]=7599;e[3087]=7602;e[3088]=7603;e[3091]=7606;e[3092]=7607;e[3095]=7610;e[3096]=7611;e[3099]=7614;e[3100]=7615;e[3103]=7618;e[3104]=7619;e[3107]=8337;e[3108]=8338;e[3116]=1884;e[3119]=1885;e[3120]=1885;e[3123]=1886;e[3124]=1886;e[3127]=1887;e[3128]=1887;e[3131]=1888;e[3132]=1888;e[3135]=1889;e[3136]=1889;e[3139]=1890;e[3140]=1890;e[3143]=1891;e[3144]=1891;e[3147]=1892;e[3148]=1892;e[3153]=580;e[3154]=581;e[3157]=584;e[3158]=585;e[3161]=588;e[3162]=589;e[3165]=891;e[3166]=892;e[3169]=1274;e[3170]=1275;e[3173]=1278;e[3174]=1279;e[3181]=7622;e[3182]=7623;e[3282]=11799;e[3316]=578;e[3379]=42785;e[3393]=1159;e[3416]=8377}));t.getGlyphMapForStandardFonts=c;const l=(0,r.getLookupTableFactory)((function(e){e[227]=322;e[264]=261;e[291]=346}));t.getSupplementalGlyphMapForArialBlack=l;const h=(0,r.getLookupTableFactory)((function(e){e[1]=32;e[4]=65;e[17]=66;e[18]=67;e[24]=68;e[28]=69;e[38]=70;e[39]=71;e[44]=72;e[47]=73;e[58]=74;e[60]=75;e[62]=76;e[68]=77;e[69]=78;e[75]=79;e[87]=80;e[89]=81;e[90]=82;e[94]=83;e[100]=84;e[104]=85;e[115]=86;e[116]=87;e[121]=88;e[122]=89;e[127]=90;e[258]=97;e[268]=261;e[271]=98;e[272]=99;e[273]=263;e[282]=100;e[286]=101;e[295]=281;e[296]=102;e[336]=103;e[346]=104;e[349]=105;e[361]=106;e[364]=107;e[367]=108;e[371]=322;e[373]=109;e[374]=110;e[381]=111;e[383]=243;e[393]=112;e[395]=113;e[396]=114;e[400]=115;e[401]=347;e[410]=116;e[437]=117;e[448]=118;e[449]=119;e[454]=120;e[455]=121;e[460]=122;e[463]=380;e[853]=44;e[855]=58;e[856]=46;e[876]=47;e[878]=45;e[882]=45;e[894]=40;e[895]=41;e[896]=91;e[897]=93;e[923]=64;e[1004]=48;e[1005]=49;e[1006]=50;e[1007]=51;e[1008]=52;e[1009]=53;e[1010]=54;e[1011]=55;e[1012]=56;e[1013]=57;e[1081]=37;e[1085]=43;e[1086]=45}));t.getSupplementalGlyphMapForCalibri=h},function(e,t,a){var r=a(7).getLookupTableFactory,i=r((function(e){e[63721]=169;e[63193]=169;e[63720]=174;e[63194]=174;e[63722]=8482;e[63195]=8482;e[63729]=9127;e[63730]=9128;e[63731]=9129;e[63740]=9131;e[63741]=9132;e[63742]=9133;e[63726]=9121;e[63727]=9122;e[63728]=9123;e[63737]=9124;e[63738]=9125;e[63739]=9126;e[63723]=9115;e[63724]=9116;e[63725]=9117;e[63734]=9118;e[63735]=9119;e[63736]=9120}));var n=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}];var s=r((function(e){e["¨"]=" ̈";e["¯"]=" ̄";e["´"]=" ́";e["µ"]="μ";e["¸"]=" ̧";e["Ĳ"]="IJ";e["ĳ"]="ij";e["Ŀ"]="L·";e["ŀ"]="l·";e["ŉ"]="ʼn";e["ſ"]="s";e["Ǆ"]="DŽ";e["ǅ"]="Dž";e["ǆ"]="dž";e["Ǉ"]="LJ";e["ǈ"]="Lj";e["ǉ"]="lj";e["Ǌ"]="NJ";e["ǋ"]="Nj";e["ǌ"]="nj";e["Ǳ"]="DZ";e["ǲ"]="Dz";e["ǳ"]="dz";e["˘"]=" ̆";e["˙"]=" ̇";e["˚"]=" ̊";e["˛"]=" ̨";e["˜"]=" ̃";e["˝"]=" ̋";e["ͺ"]=" ͅ";e["΄"]=" ́";e["ϐ"]="β";e["ϑ"]="θ";e["ϒ"]="Υ";e["ϕ"]="φ";e["ϖ"]="π";e["ϰ"]="κ";e["ϱ"]="ρ";e["ϲ"]="ς";e["ϴ"]="Θ";e["ϵ"]="ε";e["Ϲ"]="Σ";e["և"]="եւ";e["ٵ"]="اٴ";e["ٶ"]="وٴ";e["ٷ"]="ۇٴ";e["ٸ"]="يٴ";e["ำ"]="ํา";e["ຳ"]="ໍາ";e["ໜ"]="ຫນ";e["ໝ"]="ຫມ";e["ཷ"]="ྲཱྀ";e["ཹ"]="ླཱྀ";e["ẚ"]="aʾ";e["᾽"]=" ̓";e["᾿"]=" ̓";e["῀"]=" ͂";e["῾"]=" ̔";e[" "]=" ";e[" "]=" ";e[" "]=" ";e[" "]=" ";e[" "]=" ";e[" "]=" ";e[" "]=" ";e[" "]=" ";e["‗"]=" ̳";e["․"]=".";e["‥"]="..";e["…"]="...";e["″"]="′′";e["‴"]="′′′";e["‶"]="‵‵";e["‷"]="‵‵‵";e["‼"]="!!";e["‾"]=" ̅";e["⁇"]="??";e["⁈"]="?!";e["⁉"]="!?";e["⁗"]="′′′′";e[" "]=" ";e["₨"]="Rs";e["℀"]="a/c";e["℁"]="a/s";e["℃"]="°C";e["℅"]="c/o";e["℆"]="c/u";e["ℇ"]="Ɛ";e["℉"]="°F";e["№"]="No";e["℡"]="TEL";e["ℵ"]="א";e["ℶ"]="ב";e["ℷ"]="ג";e["ℸ"]="ד";e["℻"]="FAX";e["Ⅰ"]="I";e["Ⅱ"]="II";e["Ⅲ"]="III";e["Ⅳ"]="IV";e["Ⅴ"]="V";e["Ⅵ"]="VI";e["Ⅶ"]="VII";e["Ⅷ"]="VIII";e["Ⅸ"]="IX";e["Ⅹ"]="X";e["Ⅺ"]="XI";e["Ⅻ"]="XII";e["Ⅼ"]="L";e["Ⅽ"]="C";e["Ⅾ"]="D";e["Ⅿ"]="M";e["ⅰ"]="i";e["ⅱ"]="ii";e["ⅲ"]="iii";e["ⅳ"]="iv";e["ⅴ"]="v";e["ⅵ"]="vi";e["ⅶ"]="vii";e["ⅷ"]="viii";e["ⅸ"]="ix";e["ⅹ"]="x";e["ⅺ"]="xi";e["ⅻ"]="xii";e["ⅼ"]="l";e["ⅽ"]="c";e["ⅾ"]="d";e["ⅿ"]="m";e["∬"]="∫∫";e["∭"]="∫∫∫";e["∯"]="∮∮";e["∰"]="∮∮∮";e["⑴"]="(1)";e["⑵"]="(2)";e["⑶"]="(3)";e["⑷"]="(4)";e["⑸"]="(5)";e["⑹"]="(6)";e["⑺"]="(7)";e["⑻"]="(8)";e["⑼"]="(9)";e["⑽"]="(10)";e["⑾"]="(11)";e["⑿"]="(12)";e["⒀"]="(13)";e["⒁"]="(14)";e["⒂"]="(15)";e["⒃"]="(16)";e["⒄"]="(17)";e["⒅"]="(18)";e["⒆"]="(19)";e["⒇"]="(20)";e["⒈"]="1.";e["⒉"]="2.";e["⒊"]="3.";e["⒋"]="4.";e["⒌"]="5.";e["⒍"]="6.";e["⒎"]="7.";e["⒏"]="8.";e["⒐"]="9.";e["⒑"]="10.";e["⒒"]="11.";e["⒓"]="12.";e["⒔"]="13.";e["⒕"]="14.";e["⒖"]="15.";e["⒗"]="16.";e["⒘"]="17.";e["⒙"]="18.";e["⒚"]="19.";e["⒛"]="20.";e["⒜"]="(a)";e["⒝"]="(b)";e["⒞"]="(c)";e["⒟"]="(d)";e["⒠"]="(e)";e["⒡"]="(f)";e["⒢"]="(g)";e["⒣"]="(h)";e["⒤"]="(i)";e["⒥"]="(j)";e["⒦"]="(k)";e["⒧"]="(l)";e["⒨"]="(m)";e["⒩"]="(n)";e["⒪"]="(o)";e["⒫"]="(p)";e["⒬"]="(q)";e["⒭"]="(r)";e["⒮"]="(s)";e["⒯"]="(t)";e["⒰"]="(u)";e["⒱"]="(v)";e["⒲"]="(w)";e["⒳"]="(x)";e["⒴"]="(y)";e["⒵"]="(z)";e["⨌"]="∫∫∫∫";e["⩴"]="::=";e["⩵"]="==";e["⩶"]="===";e["⺟"]="母";e["⻳"]="龟";e["⼀"]="一";e["⼁"]="丨";e["⼂"]="丶";e["⼃"]="丿";e["⼄"]="乙";e["⼅"]="亅";e["⼆"]="二";e["⼇"]="亠";e["⼈"]="人";e["⼉"]="儿";e["⼊"]="入";e["⼋"]="八";e["⼌"]="冂";e["⼍"]="冖";e["⼎"]="冫";e["⼏"]="几";e["⼐"]="凵";e["⼑"]="刀";e["⼒"]="力";e["⼓"]="勹";e["⼔"]="匕";e["⼕"]="匚";e["⼖"]="匸";e["⼗"]="十";e["⼘"]="卜";e["⼙"]="卩";e["⼚"]="厂";e["⼛"]="厶";e["⼜"]="又";e["⼝"]="口";e["⼞"]="囗";e["⼟"]="土";e["⼠"]="士";e["⼡"]="夂";e["⼢"]="夊";e["⼣"]="夕";e["⼤"]="大";e["⼥"]="女";e["⼦"]="子";e["⼧"]="宀";e["⼨"]="寸";e["⼩"]="小";e["⼪"]="尢";e["⼫"]="尸";e["⼬"]="屮";e["⼭"]="山";e["⼮"]="巛";e["⼯"]="工";e["⼰"]="己";e["⼱"]="巾";e["⼲"]="干";e["⼳"]="幺";e["⼴"]="广";e["⼵"]="廴";e["⼶"]="廾";e["⼷"]="弋";e["⼸"]="弓";e["⼹"]="彐";e["⼺"]="彡";e["⼻"]="彳";e["⼼"]="心";e["⼽"]="戈";e["⼾"]="戶";e["⼿"]="手";e["⽀"]="支";e["⽁"]="攴";e["⽂"]="文";e["⽃"]="斗";e["⽄"]="斤";e["⽅"]="方";e["⽆"]="无";e["⽇"]="日";e["⽈"]="曰";e["⽉"]="月";e["⽊"]="木";e["⽋"]="欠";e["⽌"]="止";e["⽍"]="歹";e["⽎"]="殳";e["⽏"]="毋";e["⽐"]="比";e["⽑"]="毛";e["⽒"]="氏";e["⽓"]="气";e["⽔"]="水";e["⽕"]="火";e["⽖"]="爪";e["⽗"]="父";e["⽘"]="爻";e["⽙"]="爿";e["⽚"]="片";e["⽛"]="牙";e["⽜"]="牛";e["⽝"]="犬";e["⽞"]="玄";e["⽟"]="玉";e["⽠"]="瓜";e["⽡"]="瓦";e["⽢"]="甘";e["⽣"]="生";e["⽤"]="用";e["⽥"]="田";e["⽦"]="疋";e["⽧"]="疒";e["⽨"]="癶";e["⽩"]="白";e["⽪"]="皮";e["⽫"]="皿";e["⽬"]="目";e["⽭"]="矛";e["⽮"]="矢";e["⽯"]="石";e["⽰"]="示";e["⽱"]="禸";e["⽲"]="禾";e["⽳"]="穴";e["⽴"]="立";e["⽵"]="竹";e["⽶"]="米";e["⽷"]="糸";e["⽸"]="缶";e["⽹"]="网";e["⽺"]="羊";e["⽻"]="羽";e["⽼"]="老";e["⽽"]="而";e["⽾"]="耒";e["⽿"]="耳";e["⾀"]="聿";e["⾁"]="肉";e["⾂"]="臣";e["⾃"]="自";e["⾄"]="至";e["⾅"]="臼";e["⾆"]="舌";e["⾇"]="舛";e["⾈"]="舟";e["⾉"]="艮";e["⾊"]="色";e["⾋"]="艸";e["⾌"]="虍";e["⾍"]="虫";e["⾎"]="血";e["⾏"]="行";e["⾐"]="衣";e["⾑"]="襾";e["⾒"]="見";e["⾓"]="角";e["⾔"]="言";e["⾕"]="谷";e["⾖"]="豆";e["⾗"]="豕";e["⾘"]="豸";e["⾙"]="貝";e["⾚"]="赤";e["⾛"]="走";e["⾜"]="足";e["⾝"]="身";e["⾞"]="車";e["⾟"]="辛";e["⾠"]="辰";e["⾡"]="辵";e["⾢"]="邑";e["⾣"]="酉";e["⾤"]="釆";e["⾥"]="里";e["⾦"]="金";e["⾧"]="長";e["⾨"]="門";e["⾩"]="阜";e["⾪"]="隶";e["⾫"]="隹";e["⾬"]="雨";e["⾭"]="靑";e["⾮"]="非";e["⾯"]="面";e["⾰"]="革";e["⾱"]="韋";e["⾲"]="韭";e["⾳"]="音";e["⾴"]="頁";e["⾵"]="風";e["⾶"]="飛";e["⾷"]="食";e["⾸"]="首";e["⾹"]="香";e["⾺"]="馬";e["⾻"]="骨";e["⾼"]="高";e["⾽"]="髟";e["⾾"]="鬥";e["⾿"]="鬯";e["⿀"]="鬲";e["⿁"]="鬼";e["⿂"]="魚";e["⿃"]="鳥";e["⿄"]="鹵";e["⿅"]="鹿";e["⿆"]="麥";e["⿇"]="麻";e["⿈"]="黃";e["⿉"]="黍";e["⿊"]="黑";e["⿋"]="黹";e["⿌"]="黽";e["⿍"]="鼎";e["⿎"]="鼓";e["⿏"]="鼠";e["⿐"]="鼻";e["⿑"]="齊";e["⿒"]="齒";e["⿓"]="龍";e["⿔"]="龜";e["⿕"]="龠";e["〶"]="〒";e["〸"]="十";e["〹"]="卄";e["〺"]="卅";e["゛"]=" ゙";e["゜"]=" ゚";e["ㄱ"]="ᄀ";e["ㄲ"]="ᄁ";e["ㄳ"]="ᆪ";e["ㄴ"]="ᄂ";e["ㄵ"]="ᆬ";e["ㄶ"]="ᆭ";e["ㄷ"]="ᄃ";e["ㄸ"]="ᄄ";e["ㄹ"]="ᄅ";e["ㄺ"]="ᆰ";e["ㄻ"]="ᆱ";e["ㄼ"]="ᆲ";e["ㄽ"]="ᆳ";e["ㄾ"]="ᆴ";e["ㄿ"]="ᆵ";e["ㅀ"]="ᄚ";e["ㅁ"]="ᄆ";e["ㅂ"]="ᄇ";e["ㅃ"]="ᄈ";e["ㅄ"]="ᄡ";e["ㅅ"]="ᄉ";e["ㅆ"]="ᄊ";e["ㅇ"]="ᄋ";e["ㅈ"]="ᄌ";e["ㅉ"]="ᄍ";e["ㅊ"]="ᄎ";e["ㅋ"]="ᄏ";e["ㅌ"]="ᄐ";e["ㅍ"]="ᄑ";e["ㅎ"]="ᄒ";e["ㅏ"]="ᅡ";e["ㅐ"]="ᅢ";e["ㅑ"]="ᅣ";e["ㅒ"]="ᅤ";e["ㅓ"]="ᅥ";e["ㅔ"]="ᅦ";e["ㅕ"]="ᅧ";e["ㅖ"]="ᅨ";e["ㅗ"]="ᅩ";e["ㅘ"]="ᅪ";e["ㅙ"]="ᅫ";e["ㅚ"]="ᅬ";e["ㅛ"]="ᅭ";e["ㅜ"]="ᅮ";e["ㅝ"]="ᅯ";e["ㅞ"]="ᅰ";e["ㅟ"]="ᅱ";e["ㅠ"]="ᅲ";e["ㅡ"]="ᅳ";e["ㅢ"]="ᅴ";e["ㅣ"]="ᅵ";e["ㅤ"]="ᅠ";e["ㅥ"]="ᄔ";e["ㅦ"]="ᄕ";e["ㅧ"]="ᇇ";e["ㅨ"]="ᇈ";e["ㅩ"]="ᇌ";e["ㅪ"]="ᇎ";e["ㅫ"]="ᇓ";e["ㅬ"]="ᇗ";e["ㅭ"]="ᇙ";e["ㅮ"]="ᄜ";e["ㅯ"]="ᇝ";e["ㅰ"]="ᇟ";e["ㅱ"]="ᄝ";e["ㅲ"]="ᄞ";e["ㅳ"]="ᄠ";e["ㅴ"]="ᄢ";e["ㅵ"]="ᄣ";e["ㅶ"]="ᄧ";e["ㅷ"]="ᄩ";e["ㅸ"]="ᄫ";e["ㅹ"]="ᄬ";e["ㅺ"]="ᄭ";e["ㅻ"]="ᄮ";e["ㅼ"]="ᄯ";e["ㅽ"]="ᄲ";e["ㅾ"]="ᄶ";e["ㅿ"]="ᅀ";e["ㆀ"]="ᅇ";e["ㆁ"]="ᅌ";e["ㆂ"]="ᇱ";e["ㆃ"]="ᇲ";e["ㆄ"]="ᅗ";e["ㆅ"]="ᅘ";e["ㆆ"]="ᅙ";e["ㆇ"]="ᆄ";e["ㆈ"]="ᆅ";e["ㆉ"]="ᆈ";e["ㆊ"]="ᆑ";e["ㆋ"]="ᆒ";e["ㆌ"]="ᆔ";e["ㆍ"]="ᆞ";e["ㆎ"]="ᆡ";e["㈀"]="(ᄀ)";e["㈁"]="(ᄂ)";e["㈂"]="(ᄃ)";e["㈃"]="(ᄅ)";e["㈄"]="(ᄆ)";e["㈅"]="(ᄇ)";e["㈆"]="(ᄉ)";e["㈇"]="(ᄋ)";e["㈈"]="(ᄌ)";e["㈉"]="(ᄎ)";e["㈊"]="(ᄏ)";e["㈋"]="(ᄐ)";e["㈌"]="(ᄑ)";e["㈍"]="(ᄒ)";e["㈎"]="(가)";e["㈏"]="(나)";e["㈐"]="(다)";e["㈑"]="(라)";e["㈒"]="(마)";e["㈓"]="(바)";e["㈔"]="(사)";e["㈕"]="(아)";e["㈖"]="(자)";e["㈗"]="(차)";e["㈘"]="(카)";e["㈙"]="(타)";e["㈚"]="(파)";e["㈛"]="(하)";e["㈜"]="(주)";e["㈝"]="(오전)";e["㈞"]="(오후)";e["㈠"]="(一)";e["㈡"]="(二)";e["㈢"]="(三)";e["㈣"]="(四)";e["㈤"]="(五)";e["㈥"]="(六)";e["㈦"]="(七)";e["㈧"]="(八)";e["㈨"]="(九)";e["㈩"]="(十)";e["㈪"]="(月)";e["㈫"]="(火)";e["㈬"]="(水)";e["㈭"]="(木)";e["㈮"]="(金)";e["㈯"]="(土)";e["㈰"]="(日)";e["㈱"]="(株)";e["㈲"]="(有)";e["㈳"]="(社)";e["㈴"]="(名)";e["㈵"]="(特)";e["㈶"]="(財)";e["㈷"]="(祝)";e["㈸"]="(労)";e["㈹"]="(代)";e["㈺"]="(呼)";e["㈻"]="(学)";e["㈼"]="(監)";e["㈽"]="(企)";e["㈾"]="(資)";e["㈿"]="(協)";e["㉀"]="(祭)";e["㉁"]="(休)";e["㉂"]="(自)";e["㉃"]="(至)";e["㋀"]="1月";e["㋁"]="2月";e["㋂"]="3月";e["㋃"]="4月";e["㋄"]="5月";e["㋅"]="6月";e["㋆"]="7月";e["㋇"]="8月";e["㋈"]="9月";e["㋉"]="10月";e["㋊"]="11月";e["㋋"]="12月";e["㍘"]="0点";e["㍙"]="1点";e["㍚"]="2点";e["㍛"]="3点";e["㍜"]="4点";e["㍝"]="5点";e["㍞"]="6点";e["㍟"]="7点";e["㍠"]="8点";e["㍡"]="9点";e["㍢"]="10点";e["㍣"]="11点";e["㍤"]="12点";e["㍥"]="13点";e["㍦"]="14点";e["㍧"]="15点";e["㍨"]="16点";e["㍩"]="17点";e["㍪"]="18点";e["㍫"]="19点";e["㍬"]="20点";e["㍭"]="21点";e["㍮"]="22点";e["㍯"]="23点";e["㍰"]="24点";e["㏠"]="1日";e["㏡"]="2日";e["㏢"]="3日";e["㏣"]="4日";e["㏤"]="5日";e["㏥"]="6日";e["㏦"]="7日";e["㏧"]="8日";e["㏨"]="9日";e["㏩"]="10日";e["㏪"]="11日";e["㏫"]="12日";e["㏬"]="13日";e["㏭"]="14日";e["㏮"]="15日";e["㏯"]="16日";e["㏰"]="17日";e["㏱"]="18日";e["㏲"]="19日";e["㏳"]="20日";e["㏴"]="21日";e["㏵"]="22日";e["㏶"]="23日";e["㏷"]="24日";e["㏸"]="25日";e["㏹"]="26日";e["㏺"]="27日";e["㏻"]="28日";e["㏼"]="29日";e["㏽"]="30日";e["㏾"]="31日";e["ﬀ"]="ff";e["ﬁ"]="fi";e["ﬂ"]="fl";e["ﬃ"]="ffi";e["ﬄ"]="ffl";e["ﬅ"]="ſt";e["ﬆ"]="st";e["ﬓ"]="մն";e["ﬔ"]="մե";e["ﬕ"]="մի";e["ﬖ"]="վն";e["ﬗ"]="մխ";e["ﭏ"]="אל";e["ﭐ"]="ٱ";e["ﭑ"]="ٱ";e["ﭒ"]="ٻ";e["ﭓ"]="ٻ";e["ﭔ"]="ٻ";e["ﭕ"]="ٻ";e["ﭖ"]="پ";e["ﭗ"]="پ";e["ﭘ"]="پ";e["ﭙ"]="پ";e["ﭚ"]="ڀ";e["ﭛ"]="ڀ";e["ﭜ"]="ڀ";e["ﭝ"]="ڀ";e["ﭞ"]="ٺ";e["ﭟ"]="ٺ";e["ﭠ"]="ٺ";e["ﭡ"]="ٺ";e["ﭢ"]="ٿ";e["ﭣ"]="ٿ";e["ﭤ"]="ٿ";e["ﭥ"]="ٿ";e["ﭦ"]="ٹ";e["ﭧ"]="ٹ";e["ﭨ"]="ٹ";e["ﭩ"]="ٹ";e["ﭪ"]="ڤ";e["ﭫ"]="ڤ";e["ﭬ"]="ڤ";e["ﭭ"]="ڤ";e["ﭮ"]="ڦ";e["ﭯ"]="ڦ";e["ﭰ"]="ڦ";e["ﭱ"]="ڦ";e["ﭲ"]="ڄ";e["ﭳ"]="ڄ";e["ﭴ"]="ڄ";e["ﭵ"]="ڄ";e["ﭶ"]="ڃ";e["ﭷ"]="ڃ";e["ﭸ"]="ڃ";e["ﭹ"]="ڃ";e["ﭺ"]="چ";e["ﭻ"]="چ";e["ﭼ"]="چ";e["ﭽ"]="چ";e["ﭾ"]="ڇ";e["ﭿ"]="ڇ";e["ﮀ"]="ڇ";e["ﮁ"]="ڇ";e["ﮂ"]="ڍ";e["ﮃ"]="ڍ";e["ﮄ"]="ڌ";e["ﮅ"]="ڌ";e["ﮆ"]="ڎ";e["ﮇ"]="ڎ";e["ﮈ"]="ڈ";e["ﮉ"]="ڈ";e["ﮊ"]="ژ";e["ﮋ"]="ژ";e["ﮌ"]="ڑ";e["ﮍ"]="ڑ";e["ﮎ"]="ک";e["ﮏ"]="ک";e["ﮐ"]="ک";e["ﮑ"]="ک";e["ﮒ"]="گ";e["ﮓ"]="گ";e["ﮔ"]="گ";e["ﮕ"]="گ";e["ﮖ"]="ڳ";e["ﮗ"]="ڳ";e["ﮘ"]="ڳ";e["ﮙ"]="ڳ";e["ﮚ"]="ڱ";e["ﮛ"]="ڱ";e["ﮜ"]="ڱ";e["ﮝ"]="ڱ";e["ﮞ"]="ں";e["ﮟ"]="ں";e["ﮠ"]="ڻ";e["ﮡ"]="ڻ";e["ﮢ"]="ڻ";e["ﮣ"]="ڻ";e["ﮤ"]="ۀ";e["ﮥ"]="ۀ";e["ﮦ"]="ہ";e["ﮧ"]="ہ";e["ﮨ"]="ہ";e["ﮩ"]="ہ";e["ﮪ"]="ھ";e["ﮫ"]="ھ";e["ﮬ"]="ھ";e["ﮭ"]="ھ";e["ﮮ"]="ے";e["ﮯ"]="ے";e["ﮰ"]="ۓ";e["ﮱ"]="ۓ";e["ﯓ"]="ڭ";e["ﯔ"]="ڭ";e["ﯕ"]="ڭ";e["ﯖ"]="ڭ";e["ﯗ"]="ۇ";e["ﯘ"]="ۇ";e["ﯙ"]="ۆ";e["ﯚ"]="ۆ";e["ﯛ"]="ۈ";e["ﯜ"]="ۈ";e["ﯝ"]="ٷ";e["ﯞ"]="ۋ";e["ﯟ"]="ۋ";e["ﯠ"]="ۅ";e["ﯡ"]="ۅ";e["ﯢ"]="ۉ";e["ﯣ"]="ۉ";e["ﯤ"]="ې";e["ﯥ"]="ې";e["ﯦ"]="ې";e["ﯧ"]="ې";e["ﯨ"]="ى";e["ﯩ"]="ى";e["ﯪ"]="ئا";e["ﯫ"]="ئا";e["ﯬ"]="ئە";e["ﯭ"]="ئە";e["ﯮ"]="ئو";e["ﯯ"]="ئو";e["ﯰ"]="ئۇ";e["ﯱ"]="ئۇ";e["ﯲ"]="ئۆ";e["ﯳ"]="ئۆ";e["ﯴ"]="ئۈ";e["ﯵ"]="ئۈ";e["ﯶ"]="ئې";e["ﯷ"]="ئې";e["ﯸ"]="ئې";e["ﯹ"]="ئى";e["ﯺ"]="ئى";e["ﯻ"]="ئى";e["ﯼ"]="ی";e["ﯽ"]="ی";e["ﯾ"]="ی";e["ﯿ"]="ی";e["ﰀ"]="ئج";e["ﰁ"]="ئح";e["ﰂ"]="ئم";e["ﰃ"]="ئى";e["ﰄ"]="ئي";e["ﰅ"]="بج";e["ﰆ"]="بح";e["ﰇ"]="بخ";e["ﰈ"]="بم";e["ﰉ"]="بى";e["ﰊ"]="بي";e["ﰋ"]="تج";e["ﰌ"]="تح";e["ﰍ"]="تخ";e["ﰎ"]="تم";e["ﰏ"]="تى";e["ﰐ"]="تي";e["ﰑ"]="ثج";e["ﰒ"]="ثم";e["ﰓ"]="ثى";e["ﰔ"]="ثي";e["ﰕ"]="جح";e["ﰖ"]="جم";e["ﰗ"]="حج";e["ﰘ"]="حم";e["ﰙ"]="خج";e["ﰚ"]="خح";e["ﰛ"]="خم";e["ﰜ"]="سج";e["ﰝ"]="سح";e["ﰞ"]="سخ";e["ﰟ"]="سم";e["ﰠ"]="صح";e["ﰡ"]="صم";e["ﰢ"]="ضج";e["ﰣ"]="ضح";e["ﰤ"]="ضخ";e["ﰥ"]="ضم";e["ﰦ"]="طح";e["ﰧ"]="طم";e["ﰨ"]="ظم";e["ﰩ"]="عج";e["ﰪ"]="عم";e["ﰫ"]="غج";e["ﰬ"]="غم";e["ﰭ"]="فج";e["ﰮ"]="فح";e["ﰯ"]="فخ";e["ﰰ"]="فم";e["ﰱ"]="فى";e["ﰲ"]="في";e["ﰳ"]="قح";e["ﰴ"]="قم";e["ﰵ"]="قى";e["ﰶ"]="قي";e["ﰷ"]="كا";e["ﰸ"]="كج";e["ﰹ"]="كح";e["ﰺ"]="كخ";e["ﰻ"]="كل";e["ﰼ"]="كم";e["ﰽ"]="كى";e["ﰾ"]="كي";e["ﰿ"]="لج";e["ﱀ"]="لح";e["ﱁ"]="لخ";e["ﱂ"]="لم";e["ﱃ"]="لى";e["ﱄ"]="لي";e["ﱅ"]="مج";e["ﱆ"]="مح";e["ﱇ"]="مخ";e["ﱈ"]="مم";e["ﱉ"]="مى";e["ﱊ"]="مي";e["ﱋ"]="نج";e["ﱌ"]="نح";e["ﱍ"]="نخ";e["ﱎ"]="نم";e["ﱏ"]="نى";e["ﱐ"]="ني";e["ﱑ"]="هج";e["ﱒ"]="هم";e["ﱓ"]="هى";e["ﱔ"]="هي";e["ﱕ"]="يج";e["ﱖ"]="يح";e["ﱗ"]="يخ";e["ﱘ"]="يم";e["ﱙ"]="يى";e["ﱚ"]="يي";e["ﱛ"]="ذٰ";e["ﱜ"]="رٰ";e["ﱝ"]="ىٰ";e["ﱞ"]=" ٌّ";e["ﱟ"]=" ٍّ";e["ﱠ"]=" َّ";e["ﱡ"]=" ُّ";e["ﱢ"]=" ِّ";e["ﱣ"]=" ّٰ";e["ﱤ"]="ئر";e["ﱥ"]="ئز";e["ﱦ"]="ئم";e["ﱧ"]="ئن";e["ﱨ"]="ئى";e["ﱩ"]="ئي";e["ﱪ"]="بر";e["ﱫ"]="بز";e["ﱬ"]="بم";e["ﱭ"]="بن";e["ﱮ"]="بى";e["ﱯ"]="بي";e["ﱰ"]="تر";e["ﱱ"]="تز";e["ﱲ"]="تم";e["ﱳ"]="تن";e["ﱴ"]="تى";e["ﱵ"]="تي";e["ﱶ"]="ثر";e["ﱷ"]="ثز";e["ﱸ"]="ثم";e["ﱹ"]="ثن";e["ﱺ"]="ثى";e["ﱻ"]="ثي";e["ﱼ"]="فى";e["ﱽ"]="في";e["ﱾ"]="قى";e["ﱿ"]="قي";e["ﲀ"]="كا";e["ﲁ"]="كل";e["ﲂ"]="كم";e["ﲃ"]="كى";e["ﲄ"]="كي";e["ﲅ"]="لم";e["ﲆ"]="لى";e["ﲇ"]="لي";e["ﲈ"]="ما";e["ﲉ"]="مم";e["ﲊ"]="نر";e["ﲋ"]="نز";e["ﲌ"]="نم";e["ﲍ"]="نن";e["ﲎ"]="نى";e["ﲏ"]="ني";e["ﲐ"]="ىٰ";e["ﲑ"]="ير";e["ﲒ"]="يز";e["ﲓ"]="يم";e["ﲔ"]="ين";e["ﲕ"]="يى";e["ﲖ"]="يي";e["ﲗ"]="ئج";e["ﲘ"]="ئح";e["ﲙ"]="ئخ";e["ﲚ"]="ئم";e["ﲛ"]="ئه";e["ﲜ"]="بج";e["ﲝ"]="بح";e["ﲞ"]="بخ";e["ﲟ"]="بم";e["ﲠ"]="به";e["ﲡ"]="تج";e["ﲢ"]="تح";e["ﲣ"]="تخ";e["ﲤ"]="تم";e["ﲥ"]="ته";e["ﲦ"]="ثم";e["ﲧ"]="جح";e["ﲨ"]="جم";e["ﲩ"]="حج";e["ﲪ"]="حم";e["ﲫ"]="خج";e["ﲬ"]="خم";e["ﲭ"]="سج";e["ﲮ"]="سح";e["ﲯ"]="سخ";e["ﲰ"]="سم";e["ﲱ"]="صح";e["ﲲ"]="صخ";e["ﲳ"]="صم";e["ﲴ"]="ضج";e["ﲵ"]="ضح";e["ﲶ"]="ضخ";e["ﲷ"]="ضم";e["ﲸ"]="طح";e["ﲹ"]="ظم";e["ﲺ"]="عج";e["ﲻ"]="عم";e["ﲼ"]="غج";e["ﲽ"]="غم";e["ﲾ"]="فج";e["ﲿ"]="فح";e["ﳀ"]="فخ";e["ﳁ"]="فم";e["ﳂ"]="قح";e["ﳃ"]="قم";e["ﳄ"]="كج";e["ﳅ"]="كح";e["ﳆ"]="كخ";e["ﳇ"]="كل";e["ﳈ"]="كم";e["ﳉ"]="لج";e["ﳊ"]="لح";e["ﳋ"]="لخ";e["ﳌ"]="لم";e["ﳍ"]="له";e["ﳎ"]="مج";e["ﳏ"]="مح";e["ﳐ"]="مخ";e["ﳑ"]="مم";e["ﳒ"]="نج";e["ﳓ"]="نح";e["ﳔ"]="نخ";e["ﳕ"]="نم";e["ﳖ"]="نه";e["ﳗ"]="هج";e["ﳘ"]="هم";e["ﳙ"]="هٰ";e["ﳚ"]="يج";e["ﳛ"]="يح";e["ﳜ"]="يخ";e["ﳝ"]="يم";e["ﳞ"]="يه";e["ﳟ"]="ئم";e["ﳠ"]="ئه";e["ﳡ"]="بم";e["ﳢ"]="به";e["ﳣ"]="تم";e["ﳤ"]="ته";e["ﳥ"]="ثم";e["ﳦ"]="ثه";e["ﳧ"]="سم";e["ﳨ"]="سه";e["ﳩ"]="شم";e["ﳪ"]="شه";e["ﳫ"]="كل";e["ﳬ"]="كم";e["ﳭ"]="لم";e["ﳮ"]="نم";e["ﳯ"]="نه";e["ﳰ"]="يم";e["ﳱ"]="يه";e["ﳲ"]="ـَّ";e["ﳳ"]="ـُّ";e["ﳴ"]="ـِّ";e["ﳵ"]="طى";e["ﳶ"]="طي";e["ﳷ"]="عى";e["ﳸ"]="عي";e["ﳹ"]="غى";e["ﳺ"]="غي";e["ﳻ"]="سى";e["ﳼ"]="سي";e["ﳽ"]="شى";e["ﳾ"]="شي";e["ﳿ"]="حى";e["ﴀ"]="حي";e["ﴁ"]="جى";e["ﴂ"]="جي";e["ﴃ"]="خى";e["ﴄ"]="خي";e["ﴅ"]="صى";e["ﴆ"]="صي";e["ﴇ"]="ضى";e["ﴈ"]="ضي";e["ﴉ"]="شج";e["ﴊ"]="شح";e["ﴋ"]="شخ";e["ﴌ"]="شم";e["ﴍ"]="شر";e["ﴎ"]="سر";e["ﴏ"]="صر";e["ﴐ"]="ضر";e["ﴑ"]="طى";e["ﴒ"]="طي";e["ﴓ"]="عى";e["ﴔ"]="عي";e["ﴕ"]="غى";e["ﴖ"]="غي";e["ﴗ"]="سى";e["ﴘ"]="سي";e["ﴙ"]="شى";e["ﴚ"]="شي";e["ﴛ"]="حى";e["ﴜ"]="حي";e["ﴝ"]="جى";e["ﴞ"]="جي";e["ﴟ"]="خى";e["ﴠ"]="خي";e["ﴡ"]="صى";e["ﴢ"]="صي";e["ﴣ"]="ضى";e["ﴤ"]="ضي";e["ﴥ"]="شج";e["ﴦ"]="شح";e["ﴧ"]="شخ";e["ﴨ"]="شم";e["ﴩ"]="شر";e["ﴪ"]="سر";e["ﴫ"]="صر";e["ﴬ"]="ضر";e["ﴭ"]="شج";e["ﴮ"]="شح";e["ﴯ"]="شخ";e["ﴰ"]="شم";e["ﴱ"]="سه";e["ﴲ"]="شه";e["ﴳ"]="طم";e["ﴴ"]="سج";e["ﴵ"]="سح";e["ﴶ"]="سخ";e["ﴷ"]="شج";e["ﴸ"]="شح";e["ﴹ"]="شخ";e["ﴺ"]="طم";e["ﴻ"]="ظم";e["ﴼ"]="اً";e["ﴽ"]="اً";e["ﵐ"]="تجم";e["ﵑ"]="تحج";e["ﵒ"]="تحج";e["ﵓ"]="تحم";e["ﵔ"]="تخم";e["ﵕ"]="تمج";e["ﵖ"]="تمح";e["ﵗ"]="تمخ";e["ﵘ"]="جمح";e["ﵙ"]="جمح";e["ﵚ"]="حمي";e["ﵛ"]="حمى";e["ﵜ"]="سحج";e["ﵝ"]="سجح";e["ﵞ"]="سجى";e["ﵟ"]="سمح";e["ﵠ"]="سمح";e["ﵡ"]="سمج";e["ﵢ"]="سمم";e["ﵣ"]="سمم";e["ﵤ"]="صحح";e["ﵥ"]="صحح";e["ﵦ"]="صمم";e["ﵧ"]="شحم";e["ﵨ"]="شحم";e["ﵩ"]="شجي";e["ﵪ"]="شمخ";e["ﵫ"]="شمخ";e["ﵬ"]="شمم";e["ﵭ"]="شمم";e["ﵮ"]="ضحى";e["ﵯ"]="ضخم";e["ﵰ"]="ضخم";e["ﵱ"]="طمح";e["ﵲ"]="طمح";e["ﵳ"]="طمم";e["ﵴ"]="طمي";e["ﵵ"]="عجم";e["ﵶ"]="عمم";e["ﵷ"]="عمم";e["ﵸ"]="عمى";e["ﵹ"]="غمم";e["ﵺ"]="غمي";e["ﵻ"]="غمى";e["ﵼ"]="فخم";e["ﵽ"]="فخم";e["ﵾ"]="قمح";e["ﵿ"]="قمم";e["ﶀ"]="لحم";e["ﶁ"]="لحي";e["ﶂ"]="لحى";e["ﶃ"]="لجج";e["ﶄ"]="لجج";e["ﶅ"]="لخم";e["ﶆ"]="لخم";e["ﶇ"]="لمح";e["ﶈ"]="لمح";e["ﶉ"]="محج";e["ﶊ"]="محم";e["ﶋ"]="محي";e["ﶌ"]="مجح";e["ﶍ"]="مجم";e["ﶎ"]="مخج";e["ﶏ"]="مخم";e["ﶒ"]="مجخ";e["ﶓ"]="همج";e["ﶔ"]="همم";e["ﶕ"]="نحم";e["ﶖ"]="نحى";e["ﶗ"]="نجم";e["ﶘ"]="نجم";e["ﶙ"]="نجى";e["ﶚ"]="نمي";e["ﶛ"]="نمى";e["ﶜ"]="يمم";e["ﶝ"]="يمم";e["ﶞ"]="بخي";e["ﶟ"]="تجي";e["ﶠ"]="تجى";e["ﶡ"]="تخي";e["ﶢ"]="تخى";e["ﶣ"]="تمي";e["ﶤ"]="تمى";e["ﶥ"]="جمي";e["ﶦ"]="جحى";e["ﶧ"]="جمى";e["ﶨ"]="سخى";e["ﶩ"]="صحي";e["ﶪ"]="شحي";e["ﶫ"]="ضحي";e["ﶬ"]="لجي";e["ﶭ"]="لمي";e["ﶮ"]="يحي";e["ﶯ"]="يجي";e["ﶰ"]="يمي";e["ﶱ"]="ممي";e["ﶲ"]="قمي";e["ﶳ"]="نحي";e["ﶴ"]="قمح";e["ﶵ"]="لحم";e["ﶶ"]="عمي";e["ﶷ"]="كمي";e["ﶸ"]="نجح";e["ﶹ"]="مخي";e["ﶺ"]="لجم";e["ﶻ"]="كمم";e["ﶼ"]="لجم";e["ﶽ"]="نجح";e["ﶾ"]="جحي";e["ﶿ"]="حجي";e["ﷀ"]="مجي";e["ﷁ"]="فمي";e["ﷂ"]="بحي";e["ﷃ"]="كمم";e["ﷄ"]="عجم";e["ﷅ"]="صمم";e["ﷆ"]="سخي";e["ﷇ"]="نجي";e["﹉"]="‾";e["﹊"]="‾";e["﹋"]="‾";e["﹌"]="‾";e["﹍"]="_";e["﹎"]="_";e["﹏"]="_";e["ﺀ"]="ء";e["ﺁ"]="آ";e["ﺂ"]="آ";e["ﺃ"]="أ";e["ﺄ"]="أ";e["ﺅ"]="ؤ";e["ﺆ"]="ؤ";e["ﺇ"]="إ";e["ﺈ"]="إ";e["ﺉ"]="ئ";e["ﺊ"]="ئ";e["ﺋ"]="ئ";e["ﺌ"]="ئ";e["ﺍ"]="ا";e["ﺎ"]="ا";e["ﺏ"]="ب";e["ﺐ"]="ب";e["ﺑ"]="ب";e["ﺒ"]="ب";e["ﺓ"]="ة";e["ﺔ"]="ة";e["ﺕ"]="ت";e["ﺖ"]="ت";e["ﺗ"]="ت";e["ﺘ"]="ت";e["ﺙ"]="ث";e["ﺚ"]="ث";e["ﺛ"]="ث";e["ﺜ"]="ث";e["ﺝ"]="ج";e["ﺞ"]="ج";e["ﺟ"]="ج";e["ﺠ"]="ج";e["ﺡ"]="ح";e["ﺢ"]="ح";e["ﺣ"]="ح";e["ﺤ"]="ح";e["ﺥ"]="خ";e["ﺦ"]="خ";e["ﺧ"]="خ";e["ﺨ"]="خ";e["ﺩ"]="د";e["ﺪ"]="د";e["ﺫ"]="ذ";e["ﺬ"]="ذ";e["ﺭ"]="ر";e["ﺮ"]="ر";e["ﺯ"]="ز";e["ﺰ"]="ز";e["ﺱ"]="س";e["ﺲ"]="س";e["ﺳ"]="س";e["ﺴ"]="س";e["ﺵ"]="ش";e["ﺶ"]="ش";e["ﺷ"]="ش";e["ﺸ"]="ش";e["ﺹ"]="ص";e["ﺺ"]="ص";e["ﺻ"]="ص";e["ﺼ"]="ص";e["ﺽ"]="ض";e["ﺾ"]="ض";e["ﺿ"]="ض";e["ﻀ"]="ض";e["ﻁ"]="ط";e["ﻂ"]="ط";e["ﻃ"]="ط";e["ﻄ"]="ط";e["ﻅ"]="ظ";e["ﻆ"]="ظ";e["ﻇ"]="ظ";e["ﻈ"]="ظ";e["ﻉ"]="ع";e["ﻊ"]="ع";e["ﻋ"]="ع";e["ﻌ"]="ع";e["ﻍ"]="غ";e["ﻎ"]="غ";e["ﻏ"]="غ";e["ﻐ"]="غ";e["ﻑ"]="ف";e["ﻒ"]="ف";e["ﻓ"]="ف";e["ﻔ"]="ف";e["ﻕ"]="ق";e["ﻖ"]="ق";e["ﻗ"]="ق";e["ﻘ"]="ق";e["ﻙ"]="ك";e["ﻚ"]="ك";e["ﻛ"]="ك";e["ﻜ"]="ك";e["ﻝ"]="ل";e["ﻞ"]="ل";e["ﻟ"]="ل";e["ﻠ"]="ل";e["ﻡ"]="م";e["ﻢ"]="م";e["ﻣ"]="م";e["ﻤ"]="م";e["ﻥ"]="ن";e["ﻦ"]="ن";e["ﻧ"]="ن";e["ﻨ"]="ن";e["ﻩ"]="ه";e["ﻪ"]="ه";e["ﻫ"]="ه";e["ﻬ"]="ه";e["ﻭ"]="و";e["ﻮ"]="و";e["ﻯ"]="ى";e["ﻰ"]="ى";e["ﻱ"]="ي";e["ﻲ"]="ي";e["ﻳ"]="ي";e["ﻴ"]="ي";e["ﻵ"]="لآ";e["ﻶ"]="لآ";e["ﻷ"]="لأ";e["ﻸ"]="لأ";e["ﻹ"]="لإ";e["ﻺ"]="لإ";e["ﻻ"]="لا";e["ﻼ"]="لا"}));t.mapSpecialUnicodeValues=function(e){return e>=65520&&e<=65535?0:e>=62976&&e<=63743?i()[e]||e:173===e?45:e};t.reverseIfRtl=function(e){var t,a,r=e.length;if(r<=1||!(t=e.charCodeAt(0),a=n[13],t>=a.begin&&t<a.end||t>=(a=n[11]).begin&&t<a.end))return e;for(var i="",s=r-1;s>=0;s--)i+=e[s];return i};t.getUnicodeRangeFor=function(e){for(var t=0,a=n.length;t<a;t++){var r=n[t];if(e>=r.begin&&e<r.end)return t}return-1};t.getNormalizedUnicodes=s;t.getUnicodeForGlyph=function(e,t){var a=t[e];if(void 0!==a)return a;if(!e)return-1;if("u"===e[0]){var r,i=e.length;if(7===i&&"n"===e[1]&&"i"===e[2])r=e.substring(3);else{if(!(i>=5&&i<=7))return-1;r=e.substring(1)}if(r===r.toUpperCase()&&(a=parseInt(r,16))>=0)return a}return-1}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.FontRendererFactory=void 0;var r=a(2),i=a(28),n=a(31),s=a(30),o=a(11),c=function(){function e(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]}function t(e,t){return e[t]<<8|e[t+1]}function a(e){const t=e.length;let a=32768;t<1240?a=107:t<33900&&(a=1131);return a}function c(a,i,n){var s,o,c,l=1===t(a,i+2)?e(a,i+8):e(a,i+16),h=t(a,i+l);if(4===h){t(a,i+l+2);var u=t(a,i+l+6)>>1;o=i+l+14;s=[];for(c=0;c<u;c++,o+=2)s[c]={end:t(a,o)};o+=2;for(c=0;c<u;c++,o+=2)s[c].start=t(a,o);for(c=0;c<u;c++,o+=2)s[c].idDelta=t(a,o);for(c=0;c<u;c++,o+=2){var d=t(a,o);if(0!==d){s[c].ids=[];for(var f=0,g=s[c].end-s[c].start+1;f<g;f++){s[c].ids[f]=t(a,o+d);d+=2}}}return s}if(12===h){e(a,i+l+4);var m=e(a,i+l+12);o=i+l+16;s=[];for(c=0;c<m;c++){s.push({start:e(a,o),end:e(a,o+4),idDelta:e(a,o+8)-e(a,o)});o+=12}return s}throw new r.FormatError(`unsupported cmap: ${h}`)}function l(e,t,a,r){var n=new i.CFFParser(new o.Stream(e,t,a-t),{},r).parse();return{glyphs:n.charStrings.objects,subrs:n.topDict.privateDict&&n.topDict.privateDict.subrsIndex&&n.topDict.privateDict.subrsIndex.objects,gsubrs:n.globalSubrIndex&&n.globalSubrIndex.objects,isCFFCIDFont:n.isCIDFont,fdSelect:n.fdSelect,fdArray:n.fdArray}}function h(e,t){for(var a=t.codePointAt(0),r=0,i=0,n=e.length-1;i<n;){var s=i+n+1>>1;a<e[s].start?n=s-1:i=s}e[i].start<=a&&a<=e[i].end&&(r=e[i].idDelta+(e[i].ids?e[i].ids[a-e[i].start]:a)&65535);return{charCode:a,glyphId:r}}const u=[];class d{constructor(e){this.constructor===d&&(0,r.unreachable)("Cannot initialize CompiledFont.");this.fontMatrix=e;this.compiledGlyphs=Object.create(null);this.compiledCharCodeToGlyphId=Object.create(null)}getPathJs(e){const t=h(this.cmap,e);let a=this.compiledGlyphs[t.glyphId];if(!a){a=this.compileGlyph(this.glyphs[t.glyphId],t.glyphId);this.compiledGlyphs[t.glyphId]=a}void 0===this.compiledCharCodeToGlyphId[t.charCode]&&(this.compiledCharCodeToGlyphId[t.charCode]=t.glyphId);return a}compileGlyph(e,t){if(!e||0===e.length||14===e[0])return u;let a=this.fontMatrix;if(this.isCFFCIDFont){const e=this.fdSelect.getFDIndex(t);if(e>=0&&e<this.fdArray.length){a=this.fdArray[e].getByName("FontMatrix")||r.FONT_IDENTITY_MATRIX}else(0,r.warn)("Invalid fd index for glyph index.")}const i=[];i.push({cmd:"save"});i.push({cmd:"transform",args:a.slice()});i.push({cmd:"scale",args:["size","-size"]});this.compileGlyphImpl(e,i,t);i.push({cmd:"restore"});return i}compileGlyphImpl(){(0,r.unreachable)("Children classes should implement this.")}hasBuiltPath(e){const t=h(this.cmap,e);return void 0!==this.compiledGlyphs[t.glyphId]&&void 0!==this.compiledCharCodeToGlyphId[t.charCode]}}class f extends d{constructor(e,t,a){super(a||[488e-6,0,0,488e-6,0,0]);this.glyphs=e;this.cmap=t}compileGlyphImpl(e,t){!function e(t,a,r){function i(e,t){a.push({cmd:"moveTo",args:[e,t]})}function n(e,t){a.push({cmd:"lineTo",args:[e,t]})}function s(e,t,r,i){a.push({cmd:"quadraticCurveTo",args:[e,t,r,i]})}var o,c=0,l=(t[c]<<24|t[c+1]<<16)>>16,h=0,u=0;c+=10;if(l<0)do{o=t[c]<<8|t[c+1];var d,f,g=t[c+2]<<8|t[c+3];c+=4;if(1&o){d=(t[c]<<24|t[c+1]<<16)>>16;f=(t[c+2]<<24|t[c+3]<<16)>>16;c+=4}else{d=t[c++];f=t[c++]}if(2&o){h=d;u=f}else{h=0;u=0}var m=1,p=1,b=0,y=0;if(8&o){m=p=(t[c]<<24|t[c+1]<<16)/1073741824;c+=2}else if(64&o){m=(t[c]<<24|t[c+1]<<16)/1073741824;p=(t[c+2]<<24|t[c+3]<<16)/1073741824;c+=4}else if(128&o){m=(t[c]<<24|t[c+1]<<16)/1073741824;b=(t[c+2]<<24|t[c+3]<<16)/1073741824;y=(t[c+4]<<24|t[c+5]<<16)/1073741824;p=(t[c+6]<<24|t[c+7]<<16)/1073741824;c+=8}var v=r.glyphs[g];if(v){a.push({cmd:"save"});a.push({cmd:"transform",args:[m,b,y,p,h,u]});e(v,a,r);a.push({cmd:"restore"})}}while(32&o);else{var w,k,S=[];for(w=0;w<l;w++){S.push(t[c]<<8|t[c+1]);c+=2}c+=2+(t[c]<<8|t[c+1]);for(var C=S[S.length-1]+1,x=[];x.length<C;){var A=1;8&(o=t[c++])&&(A+=t[c++]);for(;A-- >0;)x.push({flags:o})}for(w=0;w<C;w++){switch(18&x[w].flags){case 0:h+=(t[c]<<24|t[c+1]<<16)>>16;c+=2;break;case 2:h-=t[c++];break;case 18:h+=t[c++]}x[w].x=h}for(w=0;w<C;w++){switch(36&x[w].flags){case 0:u+=(t[c]<<24|t[c+1]<<16)>>16;c+=2;break;case 4:u-=t[c++];break;case 36:u+=t[c++]}x[w].y=u}var I=0;for(c=0;c<l;c++){var F=S[c],T=x.slice(I,F+1);if(1&T[0].flags)T.push(T[0]);else if(1&T[T.length-1].flags)T.unshift(T[T.length-1]);else{var E={flags:1,x:(T[0].x+T[T.length-1].x)/2,y:(T[0].y+T[T.length-1].y)/2};T.unshift(E);T.push(E)}i(T[0].x,T[0].y);for(w=1,k=T.length;w<k;w++)if(1&T[w].flags)n(T[w].x,T[w].y);else if(1&T[w+1].flags){s(T[w].x,T[w].y,T[w+1].x,T[w+1].y);w++}else s(T[w].x,T[w].y,(T[w].x+T[w+1].x)/2,(T[w].y+T[w+1].y)/2);I=F+1}}}(e,t,this)}}class g extends d{constructor(e,t,r,i){super(r||[.001,0,0,.001,0,0]);this.glyphs=e.glyphs;this.gsubrs=e.gsubrs||[];this.subrs=e.subrs||[];this.cmap=t;this.glyphNameMap=i||(0,n.getGlyphsUnicode)();this.gsubrsBias=a(this.gsubrs);this.subrsBias=a(this.subrs);this.isCFFCIDFont=e.isCFFCIDFont;this.fdSelect=e.fdSelect;this.fdArray=e.fdArray}compileGlyphImpl(e,t,i){!function e(t,i,n,o){var c=[],l=0,u=0,d=0;function f(e,t){i.push({cmd:"moveTo",args:[e,t]})}function g(e,t){i.push({cmd:"lineTo",args:[e,t]})}function m(e,t,a,r,n,s){i.push({cmd:"bezierCurveTo",args:[e,t,a,r,n,s]})}!function t(p){for(var b=0;b<p.length;){var y,v,w,k,S,C,x,A,I=!1,F=p[b++];switch(F){case 1:case 3:d+=c.length>>1;I=!0;break;case 4:u+=c.pop();f(l,u);I=!0;break;case 5:for(;c.length>0;){l+=c.shift();u+=c.shift();g(l,u)}break;case 6:for(;c.length>0;){g(l+=c.shift(),u);if(0===c.length)break;u+=c.shift();g(l,u)}break;case 7:for(;c.length>0;){u+=c.shift();g(l,u);if(0===c.length)break;g(l+=c.shift(),u)}break;case 8:for(;c.length>0;){y=l+c.shift();w=u+c.shift();v=y+c.shift();k=w+c.shift();l=v+c.shift();u=k+c.shift();m(y,w,v,k,l,u)}break;case 10:x=c.pop();A=null;if(n.isCFFCIDFont){const e=n.fdSelect.getFDIndex(o);if(e>=0&&e<n.fdArray.length){const t=n.fdArray[e];let r;t.privateDict&&t.privateDict.subrsIndex&&(r=t.privateDict.subrsIndex.objects);r&&(A=r[x+=a(r)])}else(0,r.warn)("Invalid fd index for glyph index.")}else A=n.subrs[x+n.subrsBias];A&&t(A);break;case 11:return;case 12:switch(F=p[b++]){case 34:v=(y=l+c.shift())+c.shift();S=u+c.shift();l=v+c.shift();m(y,u,v,S,l,S);v=(y=l+c.shift())+c.shift();l=v+c.shift();m(y,S,v,u,l,u);break;case 35:y=l+c.shift();w=u+c.shift();v=y+c.shift();k=w+c.shift();l=v+c.shift();u=k+c.shift();m(y,w,v,k,l,u);y=l+c.shift();w=u+c.shift();v=y+c.shift();k=w+c.shift();l=v+c.shift();u=k+c.shift();m(y,w,v,k,l,u);c.pop();break;case 36:m(y=l+c.shift(),S=u+c.shift(),v=y+c.shift(),C=S+c.shift(),l=v+c.shift(),C);m(y=l+c.shift(),C,v=y+c.shift(),C+c.shift(),l=v+c.shift(),u);break;case 37:var T=l,E=u;y=l+c.shift();w=u+c.shift();v=y+c.shift();k=w+c.shift();l=v+c.shift();u=k+c.shift();m(y,w,v,k,l,u);y=l+c.shift();w=u+c.shift();v=y+c.shift();k=w+c.shift();l=v;u=k;Math.abs(l-T)>Math.abs(u-E)?l+=c.shift():u+=c.shift();m(y,w,v,k,l,u);break;default:throw new r.FormatError(`unknown operator: 12 ${F}`)}break;case 14:if(c.length>=4){var O=c.pop(),P=c.pop();u=c.pop();l=c.pop();i.push({cmd:"save"});i.push({cmd:"translate",args:[l,u]});var B=h(n.cmap,String.fromCharCode(n.glyphNameMap[s.StandardEncoding[O]]));e(n.glyphs[B.glyphId],i,n,B.glyphId);i.push({cmd:"restore"});B=h(n.cmap,String.fromCharCode(n.glyphNameMap[s.StandardEncoding[P]]));e(n.glyphs[B.glyphId],i,n,B.glyphId)}return;case 18:d+=c.length>>1;I=!0;break;case 19:case 20:b+=(d+=c.length>>1)+7>>3;I=!0;break;case 21:u+=c.pop();f(l+=c.pop(),u);I=!0;break;case 22:f(l+=c.pop(),u);I=!0;break;case 23:d+=c.length>>1;I=!0;break;case 24:for(;c.length>2;){y=l+c.shift();w=u+c.shift();v=y+c.shift();k=w+c.shift();l=v+c.shift();u=k+c.shift();m(y,w,v,k,l,u)}l+=c.shift();u+=c.shift();g(l,u);break;case 25:for(;c.length>6;){l+=c.shift();u+=c.shift();g(l,u)}y=l+c.shift();w=u+c.shift();v=y+c.shift();k=w+c.shift();l=v+c.shift();u=k+c.shift();m(y,w,v,k,l,u);break;case 26:c.length%2&&(l+=c.shift());for(;c.length>0;){y=l;w=u+c.shift();v=y+c.shift();k=w+c.shift();l=v;u=k+c.shift();m(y,w,v,k,l,u)}break;case 27:c.length%2&&(u+=c.shift());for(;c.length>0;)m(y=l+c.shift(),w=u,v=y+c.shift(),k=w+c.shift(),l=v+c.shift(),u=k);break;case 28:c.push((p[b]<<24|p[b+1]<<16)>>16);b+=2;break;case 29:x=c.pop()+n.gsubrsBias;(A=n.gsubrs[x])&&t(A);break;case 30:for(;c.length>0;){y=l;w=u+c.shift();v=y+c.shift();k=w+c.shift();l=v+c.shift();u=k+(1===c.length?c.shift():0);m(y,w,v,k,l,u);if(0===c.length)break;y=l+c.shift();w=u;v=y+c.shift();k=w+c.shift();u=k+c.shift();m(y,w,v,k,l=v+(1===c.length?c.shift():0),u)}break;case 31:for(;c.length>0;){y=l+c.shift();w=u;v=y+c.shift();k=w+c.shift();u=k+c.shift();m(y,w,v,k,l=v+(1===c.length?c.shift():0),u);if(0===c.length)break;y=l;w=u+c.shift();v=y+c.shift();k=w+c.shift();l=v+c.shift();u=k+(1===c.length?c.shift():0);m(y,w,v,k,l,u)}break;default:if(F<32)throw new r.FormatError(`unknown operator: ${F}`);if(F<247)c.push(F-139);else if(F<251)c.push(256*(F-247)+p[b++]+108);else if(F<255)c.push(256*-(F-251)-p[b++]-108);else{c.push((p[b]<<24|p[b+1]<<16|p[b+2]<<8|p[b+3])/65536);b+=4}}I&&(c.length=0)}}(t)}(e,t,this,i)}}return{create:function(a,i){for(var n,s,o,h,u,d,m=new Uint8Array(a.data),p=t(m,4),b=0,y=12;b<p;b++,y+=16){var v=(0,r.bytesToString)(m.subarray(y,y+4)),w=e(m,y+8),k=e(m,y+12);switch(v){case"cmap":n=c(m,w);break;case"glyf":s=m.subarray(w,w+k);break;case"loca":o=m.subarray(w,w+k);break;case"head":d=t(m,w+18);u=t(m,w+50);break;case"CFF ":h=l(m,w,w+k,i)}}if(s){var S=d?[1/d,0,0,1/d,0,0]:a.fontMatrix;return new f(function(e,t,a){var r,i;if(a){r=4;i=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]}}else{r=2;i=function(e,t){return e[t]<<9|e[t+1]<<1}}for(var n=[],s=i(t,0),o=r;o<t.length;o+=r){var c=i(t,o);n.push(e.subarray(s,c));s=c}return n}(s,o,u),n,S)}return new g(h,n,a.fontMatrix,a.glyphNameMap)}}}();t.FontRendererFactory=c},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.Type1Parser=void 0;var r=a(30),i=a(7),n=a(11),s=a(2),o=function(){var e=[4],t=[5],a=[6],r=[7],i=[8],n=[12,35],o=[14],c=[21],l=[22],h=[30],u=[31];function d(){this.width=0;this.lsb=0;this.flexing=!1;this.output=[];this.stack=[]}d.prototype={convert:function(d,f,g){for(var m,p,b,y=d.length,v=!1,w=0;w<y;w++){var k=d[w];if(k<32){12===k&&(k=(k<<8)+d[++w]);switch(k){case 1:case 3:this.stack=[];break;case 4:if(this.flexing){if(this.stack.length<1){v=!0;break}var S=this.stack.pop();this.stack.push(0,S);break}v=this.executeCommand(1,e);break;case 5:v=this.executeCommand(2,t);break;case 6:v=this.executeCommand(1,a);break;case 7:v=this.executeCommand(1,r);break;case 8:v=this.executeCommand(6,i);break;case 9:this.stack=[];break;case 10:if(this.stack.length<1){v=!0;break}if(!f[b=this.stack.pop()]){v=!0;break}v=this.convert(f[b],f,g);break;case 11:return v;case 13:if(this.stack.length<2){v=!0;break}m=this.stack.pop();p=this.stack.pop();this.lsb=p;this.width=m;this.stack.push(m,p);v=this.executeCommand(2,l);break;case 14:this.output.push(o[0]);break;case 21:if(this.flexing)break;v=this.executeCommand(2,c);break;case 22:if(this.flexing){this.stack.push(0);break}v=this.executeCommand(1,l);break;case 30:v=this.executeCommand(4,h);break;case 31:v=this.executeCommand(4,u);break;case 3072:case 3073:case 3074:this.stack=[];break;case 3078:if(g){this.seac=this.stack.splice(-4,4);v=this.executeCommand(0,o)}else v=this.executeCommand(4,o);break;case 3079:if(this.stack.length<4){v=!0;break}this.stack.pop();m=this.stack.pop();var C=this.stack.pop();p=this.stack.pop();this.lsb=p;this.width=m;this.stack.push(m,p,C);v=this.executeCommand(3,c);break;case 3084:if(this.stack.length<2){v=!0;break}var x=this.stack.pop(),A=this.stack.pop();this.stack.push(A/x);break;case 3088:if(this.stack.length<2){v=!0;break}b=this.stack.pop();var I=this.stack.pop();if(0===b&&3===I){var F=this.stack.splice(this.stack.length-17,17);this.stack.push(F[2]+F[0],F[3]+F[1],F[4],F[5],F[6],F[7],F[8],F[9],F[10],F[11],F[12],F[13],F[14]);v=this.executeCommand(13,n,!0);this.flexing=!1;this.stack.push(F[15],F[16])}else 1===b&&0===I&&(this.flexing=!0);break;case 3089:break;case 3105:this.stack=[];break;default:(0,s.warn)('Unknown type 1 charstring command of "'+k+'"')}if(v)break}else{k<=246?k-=139:k=k<=250?256*(k-247)+d[++w]+108:k<=254?-256*(k-251)-d[++w]-108:(255&d[++w])<<24|(255&d[++w])<<16|(255&d[++w])<<8|(255&d[++w])<<0;this.stack.push(k)}}return v},executeCommand(e,t,a){var r=this.stack.length;if(e>r)return!0;for(var i=r-e,n=i;n<r;n++){var s=this.stack[n];if(Number.isInteger(s))this.output.push(28,s>>8&255,255&s);else{s=65536*s|0;this.output.push(255,s>>24&255,s>>16&255,s>>8&255,255&s)}}this.output.push.apply(this.output,t);a?this.stack.splice(i,e):this.stack.length=0;return!1}};return d}(),c=function(){function e(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function t(e,t,a){if(a>=e.length)return new Uint8Array(0);var r,i,n=0|t;for(r=0;r<a;r++)n=52845*(e[r]+n)+22719&65535;var s=e.length-a,o=new Uint8Array(s);for(r=a,i=0;i<s;r++,i++){var c=e[r];o[i]=c^n>>8;n=52845*(c+n)+22719&65535}return o}function a(e){return 47===e||91===e||93===e||123===e||125===e||40===e||41===e}function s(a,r,i){if(r){var s=a.getBytes(),o=!(e(s[0])&&e(s[1])&&e(s[2])&&e(s[3]));a=new n.Stream(o?t(s,55665,4):function(t,a,r){var i,n,s=0|a,o=t.length,c=new Uint8Array(o>>>1);for(i=0,n=0;i<o;i++){var l=t[i];if(e(l)){i++;for(var h;i<o&&!e(h=t[i]);)i++;if(i<o){var u=parseInt(String.fromCharCode(l,h),16);c[n++]=u^s>>8;s=52845*(u+s)+22719&65535}}}return Array.prototype.slice.call(c,r,n)}(s,55665,4))}this.seacAnalysisEnabled=!!i;this.stream=a;this.nextChar()}s.prototype={readNumberArray:function(){this.getToken();for(var e=[];;){var t=this.getToken();if(null===t||"]"===t||"}"===t)break;e.push(parseFloat(t||0))}return e},readNumber:function(){var e=this.getToken();return parseFloat(e||0)},readInt:function(){var e=this.getToken();return 0|parseInt(e||0,10)},readBoolean:function(){return"true"===this.getToken()?1:0},nextChar:function(){return this.currentChar=this.stream.getByte()},getToken:function(){for(var e=!1,t=this.currentChar;;){if(-1===t)return null;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!(0,i.isWhiteSpace)(t))break;t=this.nextChar()}if(a(t)){this.nextChar();return String.fromCharCode(t)}var r="";do{r+=String.fromCharCode(t);t=this.nextChar()}while(t>=0&&!(0,i.isWhiteSpace)(t)&&!a(t));return r},readCharStrings:function(e,a){return-1===a?e:t(e,4330,a)},extractFontProgram:function(e){var t=this.stream,a=[],r=[],i=Object.create(null);i.lenIV=4;for(var n,s,c,l,h,u={subrs:[],charstrings:[],properties:{privateData:i}};null!==(n=this.getToken());)if("/"===n)switch(n=this.getToken()){case"CharStrings":this.getToken();this.getToken();this.getToken();this.getToken();for(;null!==(n=this.getToken())&&"end"!==n;)if("/"===n){var d=this.getToken();s=this.readInt();this.getToken();c=s>0?t.getBytes(s):new Uint8Array(0);l=u.properties.privateData.lenIV;h=this.readCharStrings(c,l);this.nextChar();"noaccess"===(n=this.getToken())&&this.getToken();r.push({glyph:d,encoded:h})}break;case"Subrs":this.readInt();this.getToken();for(;"dup"===this.getToken();){var f=this.readInt();s=this.readInt();this.getToken();c=s>0?t.getBytes(s):new Uint8Array(0);l=u.properties.privateData.lenIV;h=this.readCharStrings(c,l);this.nextChar();"noaccess"===(n=this.getToken())&&this.getToken();a[f]=h}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":var g=this.readNumberArray();g.length>0&&g.length,0;break;case"StemSnapH":case"StemSnapV":u.properties.privateData[n]=this.readNumberArray();break;case"StdHW":case"StdVW":u.properties.privateData[n]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":case"ExpansionFactor":u.properties.privateData[n]=this.readNumber();break;case"ForceBold":u.properties.privateData[n]=this.readBoolean()}for(var m=0;m<r.length;m++){d=r[m].glyph;h=r[m].encoded;var p=new o,b=p.convert(h,a,this.seacAnalysisEnabled),y=p.output;b&&(y=[14]);const t={glyphName:d,charstring:y,width:p.width,lsb:p.lsb,seac:p.seac};".notdef"===d?u.charstrings.unshift(t):u.charstrings.push(t);if(e.builtInEncoding){const t=e.builtInEncoding.indexOf(d);t>-1&&void 0===e.widths[t]&&t>=e.firstChar&&t<=e.lastChar&&(e.widths[t]=p.width)}}return u},extractFontHeader:function(e){for(var t;null!==(t=this.getToken());)if("/"===t)switch(t=this.getToken()){case"FontMatrix":var a=this.readNumberArray();e.fontMatrix=a;break;case"Encoding":var i,n=this.getToken();if(/^\d+$/.test(n)){i=[];var s=0|parseInt(n,10);this.getToken();for(var o=0;o<s;o++){t=this.getToken();for(;"dup"!==t&&"def"!==t;)if(null===(t=this.getToken()))return;if("def"===t)break;var c=this.readInt();this.getToken();var l=this.getToken();i[c]=l;this.getToken()}}else i=(0,r.getEncoding)(n);e.builtInEncoding=i;break;case"FontBBox":var h=this.readNumberArray();e.ascent=Math.max(h[3],h[1]);e.descent=Math.min(h[1],h[3]);e.ascentScaled=!0}}};return s}();t.Type1Parser=c},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.getTilingPatternIR=function(e,t,a){const i=t.getArray("Matrix"),n=r.Util.normalizeRect(t.getArray("BBox")),s=t.get("XStep"),o=t.get("YStep"),c=t.get("PaintType"),l=t.get("TilingType");if(n[2]-n[0]==0||n[3]-n[1]==0)throw new r.FormatError(`Invalid getTilingPatternIR /BBox array: [${n}].`);return["TilingPattern",a,e,i,n,s,o,c,l]};t.Pattern=void 0;var r=a(2),i=a(22),n=a(4),s=a(7),o=2,c=3,l=4,h=5,u=6,d=7,f=function(){function e(){(0,r.unreachable)("should not call Pattern constructor")}e.prototype={getPattern:function(e){(0,r.unreachable)(`Should not call Pattern.getStyle: ${e}`)}};e.parseShading=function(e,t,a,i,f,m){var p=(0,n.isStream)(e)?e.dict:e,b=p.get("ShadingType");try{switch(b){case o:case c:return new g.RadialAxial(p,t,a,i,m);case l:case h:case u:case d:return new g.Mesh(e,t,a,i,m);default:throw new r.FormatError("Unsupported ShadingType: "+b)}}catch(e){if(e instanceof s.MissingDataException)throw e;f.send("UnsupportedFeature",{featureId:r.UNSUPPORTED_FEATURES.shadingPattern});(0,r.warn)(e);return new g.Dummy}};return e}();t.Pattern=f;var g={SMALL_NUMBER:1e-6};g.RadialAxial=function(){function e(e,t,a,n,s){this.matrix=t;this.coordsArr=e.getArray("Coords");this.shadingType=e.get("ShadingType");this.type="Pattern";var o=e.get("ColorSpace","CS");o=i.ColorSpace.parse(o,a,n,s);this.cs=o;const l=e.getArray("BBox");Array.isArray(l)&&4===l.length?this.bbox=r.Util.normalizeRect(l):this.bbox=null;var h=0,u=1;if(e.has("Domain")){var d=e.getArray("Domain");h=d[0];u=d[1]}var f=!1,m=!1;if(e.has("Extend")){var p=e.getArray("Extend");f=p[0];m=p[1]}if(!(this.shadingType!==c||f&&m)){var b=this.coordsArr[0],y=this.coordsArr[1],v=this.coordsArr[2],w=this.coordsArr[3],k=this.coordsArr[4],S=this.coordsArr[5],C=Math.sqrt((b-w)*(b-w)+(y-k)*(y-k));v<=S+C&&S<=v+C&&(0,r.warn)("Unsupported radial gradient.")}this.extendStart=f;this.extendEnd=m;var x=e.get("Function"),A=s.createFromArray(x);const I=(u-h)/10;var F=this.colorStops=[];if(h>=u||I<=0)(0,r.info)("Bad shading domain.");else{var T,E=new Float32Array(o.numComps),O=new Float32Array(1);for(let e=0;e<=10;e++){O[0]=h+e*I;A(O,0,E,0);T=o.getRgb(E,0);var P=r.Util.makeCssRgb(T[0],T[1],T[2]);F.push([e/10,P])}var B="transparent";if(e.has("Background")){T=o.getRgb(e.get("Background"),0);B=r.Util.makeCssRgb(T[0],T[1],T[2])}if(!f){F.unshift([0,B]);F[1][0]+=g.SMALL_NUMBER}if(!m){F[F.length-1][0]-=g.SMALL_NUMBER;F.push([1,B])}this.colorStops=F}}e.prototype={getIR:function(){var e,t,a,i,n,s=this.coordsArr,l=this.shadingType;if(l===o){t=[s[0],s[1]];a=[s[2],s[3]];i=null;n=null;e="axial"}else if(l===c){t=[s[0],s[1]];a=[s[3],s[4]];i=s[2];n=s[5];e="radial"}else(0,r.unreachable)(`getPattern type unknown: ${l}`);var h=this.matrix;if(h){t=r.Util.applyTransform(t,h);a=r.Util.applyTransform(a,h);if(l===c){var u=r.Util.singularValueDecompose2dScale(h);i*=u[0];n*=u[1]}}return["RadialAxial",e,this.bbox,this.colorStops,t,a,i,n]}};return e}();g.Mesh=function(){function e(e,t){this.stream=e;this.context=t;this.buffer=0;this.bufferLength=0;var a=t.numComps;this.tmpCompsBuf=new Float32Array(a);var r=t.colorSpace.numComps;this.tmpCsCompsBuf=t.colorFn?new Float32Array(r):this.tmpCompsBuf}e.prototype={get hasData(){if(this.stream.end)return this.stream.pos<this.stream.end;if(this.bufferLength>0)return!0;var e=this.stream.getByte();if(e<0)return!1;this.buffer=e;this.bufferLength=8;return!0},readBits:function(e){var t=this.buffer,a=this.bufferLength;if(32===e){if(0===a)return(this.stream.getByte()<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte())>>>0;t=t<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte();var r=this.stream.getByte();this.buffer=r&(1<<a)-1;return(t<<8-a|(255&r)>>a)>>>0}if(8===e&&0===a)return this.stream.getByte();for(;a<e;){t=t<<8|this.stream.getByte();a+=8}a-=e;this.bufferLength=a;this.buffer=t&(1<<a)-1;return t>>a},align:function(){this.buffer=0;this.bufferLength=0},readFlag:function(){return this.readBits(this.context.bitsPerFlag)},readCoordinate:function(){var e=this.context.bitsPerCoordinate,t=this.readBits(e),a=this.readBits(e),r=this.context.decode,i=e<32?1/((1<<e)-1):2.3283064365386963e-10;return[t*i*(r[1]-r[0])+r[0],a*i*(r[3]-r[2])+r[2]]},readComponents:function(){for(var e=this.context.numComps,t=this.context.bitsPerComponent,a=t<32?1/((1<<t)-1):2.3283064365386963e-10,r=this.context.decode,i=this.tmpCompsBuf,n=0,s=4;n<e;n++,s+=2){var o=this.readBits(t);i[n]=o*a*(r[s+1]-r[s])+r[s]}var c=this.tmpCsCompsBuf;this.context.colorFn&&this.context.colorFn(i,0,c,0);return this.context.colorSpace.getRgb(c,0)}};var t,a=(t=[],function(e){t[e]||(t[e]=function(e){for(var t=[],a=0;a<=e;a++){var r=a/e,i=1-r;t.push(new Float32Array([i*i*i,3*r*i*i,3*r*r*i,r*r*r]))}return t}(e));return t[e]});function s(e,t){var i=e.figures[t];(0,r.assert)("patch"===i.type,"Unexpected patch mesh figure");var n=e.coords,s=e.colors,o=i.coords,c=i.colors,l=Math.min(n[o[0]][0],n[o[3]][0],n[o[12]][0],n[o[15]][0]),h=Math.min(n[o[0]][1],n[o[3]][1],n[o[12]][1],n[o[15]][1]),u=Math.max(n[o[0]][0],n[o[3]][0],n[o[12]][0],n[o[15]][0]),d=Math.max(n[o[0]][1],n[o[3]][1],n[o[12]][1],n[o[15]][1]),f=Math.ceil(20*(u-l)/(e.bounds[2]-e.bounds[0]));f=Math.max(3,Math.min(20,f));var g=Math.ceil(20*(d-h)/(e.bounds[3]-e.bounds[1]));g=Math.max(3,Math.min(20,g));for(var m=f+1,p=new Int32Array((g+1)*m),b=new Int32Array((g+1)*m),y=0,v=new Uint8Array(3),w=new Uint8Array(3),k=s[c[0]],S=s[c[1]],C=s[c[2]],x=s[c[3]],A=a(g),I=a(f),F=0;F<=g;F++){v[0]=(k[0]*(g-F)+C[0]*F)/g|0;v[1]=(k[1]*(g-F)+C[1]*F)/g|0;v[2]=(k[2]*(g-F)+C[2]*F)/g|0;w[0]=(S[0]*(g-F)+x[0]*F)/g|0;w[1]=(S[1]*(g-F)+x[1]*F)/g|0;w[2]=(S[2]*(g-F)+x[2]*F)/g|0;for(var T=0;T<=f;T++,y++)if(0!==F&&F!==g||0!==T&&T!==f){for(var E=0,O=0,P=0,B=0;B<=3;B++)for(var D=0;D<=3;D++,P++){var N=A[F][B]*I[T][D];E+=n[o[P]][0]*N;O+=n[o[P]][1]*N}p[y]=n.length;n.push([E,O]);b[y]=s.length;var M=new Uint8Array(3);M[0]=(v[0]*(f-T)+w[0]*T)/f|0;M[1]=(v[1]*(f-T)+w[1]*T)/f|0;M[2]=(v[2]*(f-T)+w[2]*T)/f|0;s.push(M)}}p[0]=o[0];b[0]=c[0];p[f]=o[3];b[f]=c[1];p[m*g]=o[12];b[m*g]=c[2];p[m*g+f]=o[15];b[m*g+f]=c[3];e.figures[t]={type:"lattice",coords:p,colors:b,verticesPerRow:m}}function o(e){for(var t=e.coords[0][0],a=e.coords[0][1],r=t,i=a,n=1,s=e.coords.length;n<s;n++){var o=e.coords[n][0],c=e.coords[n][1];t=t>o?o:t;a=a>c?c:a;r=r<o?o:r;i=i<c?c:i}e.bounds=[t,a,r,i]}function c(t,a,c,f,g){if(!(0,n.isStream)(t))throw new r.FormatError("Mesh data is not a stream");var m=t.dict;this.matrix=a;this.shadingType=m.get("ShadingType");this.type="Pattern";const p=m.getArray("BBox");Array.isArray(p)&&4===p.length?this.bbox=r.Util.normalizeRect(p):this.bbox=null;var b=m.get("ColorSpace","CS");b=i.ColorSpace.parse(b,c,f,g);this.cs=b;this.background=m.has("Background")?b.getRgb(m.get("Background"),0):null;var y=m.get("Function"),v=y?g.createFromArray(y):null;this.coords=[];this.colors=[];this.figures=[];var w=new e(t,{bitsPerCoordinate:m.get("BitsPerCoordinate"),bitsPerComponent:m.get("BitsPerComponent"),bitsPerFlag:m.get("BitsPerFlag"),decode:m.getArray("Decode"),colorFn:v,colorSpace:b,numComps:v?1:b.numComps}),k=!1;switch(this.shadingType){case l:!function(e,t){for(var a=e.coords,i=e.colors,n=[],s=[],o=0;t.hasData;){var c=t.readFlag(),l=t.readCoordinate(),h=t.readComponents();if(0===o){if(!(0<=c&&c<=2))throw new r.FormatError("Unknown type4 flag");switch(c){case 0:o=3;break;case 1:s.push(s[s.length-2],s[s.length-1]);o=1;break;case 2:s.push(s[s.length-3],s[s.length-1]);o=1}n.push(c)}s.push(a.length);a.push(l);i.push(h);o--;t.align()}e.figures.push({type:"triangles",coords:new Int32Array(s),colors:new Int32Array(s)})}(this,w);break;case h:var S=0|m.get("VerticesPerRow");if(S<2)throw new r.FormatError("Invalid VerticesPerRow");!function(e,t,a){for(var r=e.coords,i=e.colors,n=[];t.hasData;){var s=t.readCoordinate(),o=t.readComponents();n.push(r.length);r.push(s);i.push(o)}e.figures.push({type:"lattice",coords:new Int32Array(n),colors:new Int32Array(n),verticesPerRow:a})}(this,w,S);break;case u:!function(e,t){for(var a=e.coords,i=e.colors,n=new Int32Array(16),s=new Int32Array(4);t.hasData;){var o,c,l=t.readFlag();if(!(0<=l&&l<=3))throw new r.FormatError("Unknown type6 flag");var h=a.length;for(o=0,c=0!==l?8:12;o<c;o++)a.push(t.readCoordinate());var u,d,f,g,m=i.length;for(o=0,c=0!==l?2:4;o<c;o++)i.push(t.readComponents());switch(l){case 0:n[12]=h+3;n[13]=h+4;n[14]=h+5;n[15]=h+6;n[8]=h+2;n[11]=h+7;n[4]=h+1;n[7]=h+8;n[0]=h;n[1]=h+11;n[2]=h+10;n[3]=h+9;s[2]=m+1;s[3]=m+2;s[0]=m;s[1]=m+3;break;case 1:u=n[12];d=n[13];f=n[14];g=n[15];n[12]=g;n[13]=h+0;n[14]=h+1;n[15]=h+2;n[8]=f;n[11]=h+3;n[4]=d;n[7]=h+4;n[0]=u;n[1]=h+7;n[2]=h+6;n[3]=h+5;u=s[2];d=s[3];s[2]=d;s[3]=m;s[0]=u;s[1]=m+1;break;case 2:u=n[15];d=n[11];n[12]=n[3];n[13]=h+0;n[14]=h+1;n[15]=h+2;n[8]=n[7];n[11]=h+3;n[4]=d;n[7]=h+4;n[0]=u;n[1]=h+7;n[2]=h+6;n[3]=h+5;u=s[3];s[2]=s[1];s[3]=m;s[0]=u;s[1]=m+1;break;case 3:n[12]=n[0];n[13]=h+0;n[14]=h+1;n[15]=h+2;n[8]=n[1];n[11]=h+3;n[4]=n[2];n[7]=h+4;n[0]=n[3];n[1]=h+7;n[2]=h+6;n[3]=h+5;s[2]=s[0];s[3]=m;s[0]=s[1];s[1]=m+1}n[5]=a.length;a.push([(-4*a[n[0]][0]-a[n[15]][0]+6*(a[n[4]][0]+a[n[1]][0])-2*(a[n[12]][0]+a[n[3]][0])+3*(a[n[13]][0]+a[n[7]][0]))/9,(-4*a[n[0]][1]-a[n[15]][1]+6*(a[n[4]][1]+a[n[1]][1])-2*(a[n[12]][1]+a[n[3]][1])+3*(a[n[13]][1]+a[n[7]][1]))/9]);n[6]=a.length;a.push([(-4*a[n[3]][0]-a[n[12]][0]+6*(a[n[2]][0]+a[n[7]][0])-2*(a[n[0]][0]+a[n[15]][0])+3*(a[n[4]][0]+a[n[14]][0]))/9,(-4*a[n[3]][1]-a[n[12]][1]+6*(a[n[2]][1]+a[n[7]][1])-2*(a[n[0]][1]+a[n[15]][1])+3*(a[n[4]][1]+a[n[14]][1]))/9]);n[9]=a.length;a.push([(-4*a[n[12]][0]-a[n[3]][0]+6*(a[n[8]][0]+a[n[13]][0])-2*(a[n[0]][0]+a[n[15]][0])+3*(a[n[11]][0]+a[n[1]][0]))/9,(-4*a[n[12]][1]-a[n[3]][1]+6*(a[n[8]][1]+a[n[13]][1])-2*(a[n[0]][1]+a[n[15]][1])+3*(a[n[11]][1]+a[n[1]][1]))/9]);n[10]=a.length;a.push([(-4*a[n[15]][0]-a[n[0]][0]+6*(a[n[11]][0]+a[n[14]][0])-2*(a[n[12]][0]+a[n[3]][0])+3*(a[n[2]][0]+a[n[8]][0]))/9,(-4*a[n[15]][1]-a[n[0]][1]+6*(a[n[11]][1]+a[n[14]][1])-2*(a[n[12]][1]+a[n[3]][1])+3*(a[n[2]][1]+a[n[8]][1]))/9]);e.figures.push({type:"patch",coords:new Int32Array(n),colors:new Int32Array(s)})}}(this,w);k=!0;break;case d:!function(e,t){for(var a=e.coords,i=e.colors,n=new Int32Array(16),s=new Int32Array(4);t.hasData;){var o,c,l=t.readFlag();if(!(0<=l&&l<=3))throw new r.FormatError("Unknown type7 flag");var h=a.length;for(o=0,c=0!==l?12:16;o<c;o++)a.push(t.readCoordinate());var u,d,f,g,m=i.length;for(o=0,c=0!==l?2:4;o<c;o++)i.push(t.readComponents());switch(l){case 0:n[12]=h+3;n[13]=h+4;n[14]=h+5;n[15]=h+6;n[8]=h+2;n[9]=h+13;n[10]=h+14;n[11]=h+7;n[4]=h+1;n[5]=h+12;n[6]=h+15;n[7]=h+8;n[0]=h;n[1]=h+11;n[2]=h+10;n[3]=h+9;s[2]=m+1;s[3]=m+2;s[0]=m;s[1]=m+3;break;case 1:u=n[12];d=n[13];f=n[14];g=n[15];n[12]=g;n[13]=h+0;n[14]=h+1;n[15]=h+2;n[8]=f;n[9]=h+9;n[10]=h+10;n[11]=h+3;n[4]=d;n[5]=h+8;n[6]=h+11;n[7]=h+4;n[0]=u;n[1]=h+7;n[2]=h+6;n[3]=h+5;u=s[2];d=s[3];s[2]=d;s[3]=m;s[0]=u;s[1]=m+1;break;case 2:u=n[15];d=n[11];n[12]=n[3];n[13]=h+0;n[14]=h+1;n[15]=h+2;n[8]=n[7];n[9]=h+9;n[10]=h+10;n[11]=h+3;n[4]=d;n[5]=h+8;n[6]=h+11;n[7]=h+4;n[0]=u;n[1]=h+7;n[2]=h+6;n[3]=h+5;u=s[3];s[2]=s[1];s[3]=m;s[0]=u;s[1]=m+1;break;case 3:n[12]=n[0];n[13]=h+0;n[14]=h+1;n[15]=h+2;n[8]=n[1];n[9]=h+9;n[10]=h+10;n[11]=h+3;n[4]=n[2];n[5]=h+8;n[6]=h+11;n[7]=h+4;n[0]=n[3];n[1]=h+7;n[2]=h+6;n[3]=h+5;s[2]=s[0];s[3]=m;s[0]=s[1];s[1]=m+1}e.figures.push({type:"patch",coords:new Int32Array(n),colors:new Int32Array(s)})}}(this,w);k=!0;break;default:(0,r.unreachable)("Unsupported mesh type.")}if(k){o(this);for(var C=0,x=this.figures.length;C<x;C++)s(this,C)}o(this);!function(e){var t,a,r,i,n=e.coords,s=new Float32Array(2*n.length);for(t=0,r=0,a=n.length;t<a;t++){var o=n[t];s[r++]=o[0];s[r++]=o[1]}e.coords=s;var c=e.colors,l=new Uint8Array(3*c.length);for(t=0,r=0,a=c.length;t<a;t++){var h=c[t];l[r++]=h[0];l[r++]=h[1];l[r++]=h[2]}e.colors=l;var u=e.figures;for(t=0,a=u.length;t<a;t++){var d=u[t],f=d.coords,g=d.colors;for(r=0,i=f.length;r<i;r++){f[r]*=2;g[r]*=3}}}(this)}c.prototype={getIR:function(){return["Mesh",this.shadingType,this.coords,this.colors,this.figures,this.bounds,this.matrix,this.bbox,this.background]}};return c}();g.Dummy=function(){function e(){this.type="Pattern"}e.prototype={getIR:function(){return["Dummy"]}};return e}()},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.bidi=function(e,t,a){var g=!0,m=e.length;if(0===m||a)return u(e,g,a);d.length=m;f.length=m;var p,b,y=0;for(p=0;p<m;++p){d[p]=e.charAt(p);var v=e.charCodeAt(p),w="L";v<=255?w=i[v]:1424<=v&&v<=1524?w="R":1536<=v&&v<=1791?(w=n[255&v])||(0,r.warn)("Bidi: invalid Unicode character "+v.toString(16)):1792<=v&&v<=2220&&(w="AL");"R"!==w&&"AL"!==w&&"AN"!==w||y++;f[p]=w}if(0===y)return u(e,g=!0);if(-1===t)if(y/m<.3){g=!0;t=0}else{g=!1;t=1}var k=[];for(p=0;p<m;++p)k[p]=t;var S,C=s(t)?"R":"L",x=C,A=x,I=x;for(p=0;p<m;++p)"NSM"===f[p]?f[p]=I:I=f[p];I=x;for(p=0;p<m;++p)"EN"===(S=f[p])?f[p]="AL"===I?"AN":"EN":"R"!==S&&"L"!==S&&"AL"!==S||(I=S);for(p=0;p<m;++p)"AL"===(S=f[p])&&(f[p]="R");for(p=1;p<m-1;++p){"ES"===f[p]&&"EN"===f[p-1]&&"EN"===f[p+1]&&(f[p]="EN");"CS"!==f[p]||"EN"!==f[p-1]&&"AN"!==f[p-1]||f[p+1]!==f[p-1]||(f[p]=f[p-1])}for(p=0;p<m;++p)if("EN"===f[p]){var F;for(F=p-1;F>=0&&"ET"===f[F];--F)f[F]="EN";for(F=p+1;F<m&&"ET"===f[F];++F)f[F]="EN"}for(p=0;p<m;++p)"WS"!==(S=f[p])&&"ES"!==S&&"ET"!==S&&"CS"!==S||(f[p]="ON");I=x;for(p=0;p<m;++p)"EN"===(S=f[p])?f[p]="L"===I?"L":"EN":"R"!==S&&"L"!==S||(I=S);for(p=0;p<m;++p)if("ON"===f[p]){var T=c(f,p+1,"ON"),E=x;p>0&&(E=f[p-1]);var O=A;T+1<m&&(O=f[T+1]);"L"!==E&&(E="R");"L"!==O&&(O="R");E===O&&l(f,p,T,E);p=T-1}for(p=0;p<m;++p)"ON"===f[p]&&(f[p]=C);for(p=0;p<m;++p){S=f[p];o(k[p])?"R"===S?k[p]+=1:"AN"!==S&&"EN"!==S||(k[p]+=2):"L"!==S&&"AN"!==S&&"EN"!==S||(k[p]+=1)}var P,B=-1,D=99;for(p=0,b=k.length;p<b;++p){P=k[p];B<P&&(B=P);D>P&&s(P)&&(D=P)}for(P=B;P>=D;--P){var N=-1;for(p=0,b=k.length;p<b;++p)if(k[p]<P){if(N>=0){h(d,N,p);N=-1}}else N<0&&(N=p);N>=0&&h(d,N,k.length)}for(p=0,b=d.length;p<b;++p){var M=d[p];"<"!==M&&">"!==M||(d[p]="")}return u(d.join(""),g)};var r=a(2),i=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","ON","ON","ET","ET","ET","ON","ON","ON","ON","ON","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","ON","ET","ET","ET","ET","ON","ON","ON","ON","L","ON","ON","BN","ON","ON","ET","ET","EN","EN","ON","L","ON","ON","ON","EN","L","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L"],n=["AN","AN","AN","AN","AN","AN","ON","ON","AL","ET","ET","AL","CS","AL","ON","ON","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","AN","AN","AN","AN","AN","AN","AN","AN","AN","ET","AN","AN","AL","AL","AL","NSM","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","ON","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","NSM","NSM","ON","NSM","NSM","NSM","NSM","AL","AL","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","AL","AL","AL","AL","AL","AL"];function s(e){return 0!=(1&e)}function o(e){return 0==(1&e)}function c(e,t,a){for(var r=t,i=e.length;r<i;++r)if(e[r]!==a)return r;return r}function l(e,t,a,r){for(var i=t;i<a;++i)e[i]=r}function h(e,t,a){for(var r=t,i=a-1;r<i;++r,--i){var n=e[r];e[r]=e[i];e[i]=n}}function u(e,t,a=!1){let r="ltr";a?r="ttb":t||(r="rtl");return{str:e,dir:r}}var d=[],f=[]},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.getMetrics=void 0;var r=a(7),i=(0,r.getLookupTableFactory)((function(e){e.Courier=600;e["Courier-Bold"]=600;e["Courier-BoldOblique"]=600;e["Courier-Oblique"]=600;e.Helvetica=(0,r.getLookupTableFactory)((function(e){e.space=278;e.exclam=278;e.quotedbl=355;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=667;e.quoteright=222;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=278;e.semicolon=278;e.less=584;e.equal=584;e.greater=584;e.question=556;e.at=1015;e.A=667;e.B=667;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=500;e.K=667;e.L=556;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=278;e.backslash=278;e.bracketright=278;e.asciicircum=469;e.underscore=556;e.quoteleft=222;e.a=556;e.b=556;e.c=500;e.d=556;e.e=556;e.f=278;e.g=556;e.h=556;e.i=222;e.j=222;e.k=500;e.l=222;e.m=833;e.n=556;e.o=556;e.p=556;e.q=556;e.r=333;e.s=500;e.t=278;e.u=556;e.v=500;e.w=722;e.x=500;e.y=500;e.z=500;e.braceleft=334;e.bar=260;e.braceright=334;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=191;e.quotedblleft=333;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=500;e.fl=500;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=537;e.bullet=350;e.quotesinglbase=222;e.quotedblbase=333;e.quotedblright=333;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=556;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=222;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=556;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=667;e.aacute=556;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=500;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=500;e.aring=556;e.Ncommaaccent=722;e.lacute=222;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=500;e.scedilla=500;e.iacute=278;e.lozenge=471;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=556;e.acircumflex=556;e.Amacron=667;e.rcaron=333;e.ccedilla=500;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=643;e.Umacron=722;e.uring=556;e.threesuperior=333;e.Ograve=778;e.Agrave=667;e.Abreve=667;e.multiply=584;e.uacute=556;e.Tcaron=611;e.partialdiff=476;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=500;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=260;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=333;e.omacron=556;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=222;e.tcaron=317;e.eogonek=556;e.Uogonek=722;e.Aacute=667;e.Adieresis=667;e.egrave=556;e.zacute=500;e.iogonek=222;e.Oacute=778;e.oacute=556;e.amacron=556;e.sacute=500;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=556;e.twosuperior=333;e.Odieresis=778;e.mu=556;e.igrave=278;e.ohungarumlaut=556;e.Eogonek=667;e.dcroat=556;e.threequarters=834;e.Scedilla=667;e.lcaron=299;e.Kcommaaccent=667;e.Lacute=556;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=556;e.onehalf=834;e.lessequal=549;e.ocircumflex=556;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=556;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=556;e.Ccaron=722;e.ugrave=556;e.radical=453;e.Dcaron=722;e.rcommaaccent=333;e.Ntilde=722;e.otilde=556;e.Rcommaaccent=722;e.Lcommaaccent=556;e.Atilde=667;e.Aogonek=667;e.Aring=667;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=500;e.minus=584;e.Icircumflex=278;e.ncaron=556;e.tcommaaccent=278;e.logicalnot=584;e.odieresis=556;e.udieresis=556;e.notequal=549;e.gcommaaccent=556;e.eth=556;e.zcaron=500;e.ncommaaccent=556;e.onesuperior=333;e.imacron=278;e.Euro=556}));e["Helvetica-Bold"]=(0,r.getLookupTableFactory)((function(e){e.space=278;e.exclam=333;e.quotedbl=474;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=722;e.quoteright=278;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=333;e.semicolon=333;e.less=584;e.equal=584;e.greater=584;e.question=611;e.at=975;e.A=722;e.B=722;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=556;e.K=722;e.L=611;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=584;e.underscore=556;e.quoteleft=278;e.a=556;e.b=611;e.c=556;e.d=611;e.e=556;e.f=333;e.g=611;e.h=611;e.i=278;e.j=278;e.k=556;e.l=278;e.m=889;e.n=611;e.o=611;e.p=611;e.q=611;e.r=389;e.s=556;e.t=333;e.u=611;e.v=556;e.w=778;e.x=556;e.y=556;e.z=500;e.braceleft=389;e.bar=280;e.braceright=389;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=238;e.quotedblleft=500;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=611;e.fl=611;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=556;e.bullet=350;e.quotesinglbase=278;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=611;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=278;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=611;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=722;e.aacute=556;e.Ucircumflex=722;e.yacute=556;e.scommaaccent=556;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=611;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=556;e.aring=556;e.Ncommaaccent=722;e.lacute=278;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=556;e.scedilla=556;e.iacute=278;e.lozenge=494;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=611;e.acircumflex=556;e.Amacron=722;e.rcaron=389;e.ccedilla=556;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=743;e.Umacron=722;e.uring=611;e.threesuperior=333;e.Ograve=778;e.Agrave=722;e.Abreve=722;e.multiply=584;e.uacute=611;e.Tcaron=611;e.partialdiff=494;e.ydieresis=556;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=556;e.nacute=611;e.umacron=611;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=280;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=389;e.omacron=611;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=278;e.tcaron=389;e.eogonek=556;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=556;e.zacute=500;e.iogonek=278;e.Oacute=778;e.oacute=611;e.amacron=556;e.sacute=556;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=611;e.twosuperior=333;e.Odieresis=778;e.mu=611;e.igrave=278;e.ohungarumlaut=611;e.Eogonek=667;e.dcroat=611;e.threequarters=834;e.Scedilla=667;e.lcaron=400;e.Kcommaaccent=722;e.Lacute=611;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=611;e.onehalf=834;e.lessequal=549;e.ocircumflex=611;e.ntilde=611;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=611;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=611;e.Ccaron=722;e.ugrave=611;e.radical=549;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=722;e.otilde=611;e.Rcommaaccent=722;e.Lcommaaccent=611;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=556;e.minus=584;e.Icircumflex=278;e.ncaron=611;e.tcommaaccent=333;e.logicalnot=584;e.odieresis=611;e.udieresis=611;e.notequal=549;e.gcommaaccent=611;e.eth=611;e.zcaron=500;e.ncommaaccent=611;e.onesuperior=333;e.imacron=278;e.Euro=556}));e["Helvetica-BoldOblique"]=(0,r.getLookupTableFactory)((function(e){e.space=278;e.exclam=333;e.quotedbl=474;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=722;e.quoteright=278;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=333;e.semicolon=333;e.less=584;e.equal=584;e.greater=584;e.question=611;e.at=975;e.A=722;e.B=722;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=556;e.K=722;e.L=611;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=584;e.underscore=556;e.quoteleft=278;e.a=556;e.b=611;e.c=556;e.d=611;e.e=556;e.f=333;e.g=611;e.h=611;e.i=278;e.j=278;e.k=556;e.l=278;e.m=889;e.n=611;e.o=611;e.p=611;e.q=611;e.r=389;e.s=556;e.t=333;e.u=611;e.v=556;e.w=778;e.x=556;e.y=556;e.z=500;e.braceleft=389;e.bar=280;e.braceright=389;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=238;e.quotedblleft=500;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=611;e.fl=611;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=556;e.bullet=350;e.quotesinglbase=278;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=611;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=278;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=611;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=722;e.aacute=556;e.Ucircumflex=722;e.yacute=556;e.scommaaccent=556;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=611;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=556;e.aring=556;e.Ncommaaccent=722;e.lacute=278;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=556;e.scedilla=556;e.iacute=278;e.lozenge=494;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=611;e.acircumflex=556;e.Amacron=722;e.rcaron=389;e.ccedilla=556;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=743;e.Umacron=722;e.uring=611;e.threesuperior=333;e.Ograve=778;e.Agrave=722;e.Abreve=722;e.multiply=584;e.uacute=611;e.Tcaron=611;e.partialdiff=494;e.ydieresis=556;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=556;e.nacute=611;e.umacron=611;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=280;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=389;e.omacron=611;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=278;e.tcaron=389;e.eogonek=556;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=556;e.zacute=500;e.iogonek=278;e.Oacute=778;e.oacute=611;e.amacron=556;e.sacute=556;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=611;e.twosuperior=333;e.Odieresis=778;e.mu=611;e.igrave=278;e.ohungarumlaut=611;e.Eogonek=667;e.dcroat=611;e.threequarters=834;e.Scedilla=667;e.lcaron=400;e.Kcommaaccent=722;e.Lacute=611;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=611;e.onehalf=834;e.lessequal=549;e.ocircumflex=611;e.ntilde=611;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=611;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=611;e.Ccaron=722;e.ugrave=611;e.radical=549;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=722;e.otilde=611;e.Rcommaaccent=722;e.Lcommaaccent=611;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=556;e.minus=584;e.Icircumflex=278;e.ncaron=611;e.tcommaaccent=333;e.logicalnot=584;e.odieresis=611;e.udieresis=611;e.notequal=549;e.gcommaaccent=611;e.eth=611;e.zcaron=500;e.ncommaaccent=611;e.onesuperior=333;e.imacron=278;e.Euro=556}));e["Helvetica-Oblique"]=(0,r.getLookupTableFactory)((function(e){e.space=278;e.exclam=278;e.quotedbl=355;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=667;e.quoteright=222;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=278;e.semicolon=278;e.less=584;e.equal=584;e.greater=584;e.question=556;e.at=1015;e.A=667;e.B=667;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=500;e.K=667;e.L=556;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=278;e.backslash=278;e.bracketright=278;e.asciicircum=469;e.underscore=556;e.quoteleft=222;e.a=556;e.b=556;e.c=500;e.d=556;e.e=556;e.f=278;e.g=556;e.h=556;e.i=222;e.j=222;e.k=500;e.l=222;e.m=833;e.n=556;e.o=556;e.p=556;e.q=556;e.r=333;e.s=500;e.t=278;e.u=556;e.v=500;e.w=722;e.x=500;e.y=500;e.z=500;e.braceleft=334;e.bar=260;e.braceright=334;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=191;e.quotedblleft=333;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=500;e.fl=500;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=537;e.bullet=350;e.quotesinglbase=222;e.quotedblbase=333;e.quotedblright=333;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=556;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=222;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=556;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=667;e.aacute=556;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=500;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=500;e.aring=556;e.Ncommaaccent=722;e.lacute=222;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=500;e.scedilla=500;e.iacute=278;e.lozenge=471;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=556;e.acircumflex=556;e.Amacron=667;e.rcaron=333;e.ccedilla=500;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=643;e.Umacron=722;e.uring=556;e.threesuperior=333;e.Ograve=778;e.Agrave=667;e.Abreve=667;e.multiply=584;e.uacute=556;e.Tcaron=611;e.partialdiff=476;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=500;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=260;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=333;e.omacron=556;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=222;e.tcaron=317;e.eogonek=556;e.Uogonek=722;e.Aacute=667;e.Adieresis=667;e.egrave=556;e.zacute=500;e.iogonek=222;e.Oacute=778;e.oacute=556;e.amacron=556;e.sacute=500;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=556;e.twosuperior=333;e.Odieresis=778;e.mu=556;e.igrave=278;e.ohungarumlaut=556;e.Eogonek=667;e.dcroat=556;e.threequarters=834;e.Scedilla=667;e.lcaron=299;e.Kcommaaccent=667;e.Lacute=556;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=556;e.onehalf=834;e.lessequal=549;e.ocircumflex=556;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=556;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=556;e.Ccaron=722;e.ugrave=556;e.radical=453;e.Dcaron=722;e.rcommaaccent=333;e.Ntilde=722;e.otilde=556;e.Rcommaaccent=722;e.Lcommaaccent=556;e.Atilde=667;e.Aogonek=667;e.Aring=667;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=500;e.minus=584;e.Icircumflex=278;e.ncaron=556;e.tcommaaccent=278;e.logicalnot=584;e.odieresis=556;e.udieresis=556;e.notequal=549;e.gcommaaccent=556;e.eth=556;e.zcaron=500;e.ncommaaccent=556;e.onesuperior=333;e.imacron=278;e.Euro=556}));e.Symbol=(0,r.getLookupTableFactory)((function(e){e.space=250;e.exclam=333;e.universal=713;e.numbersign=500;e.existential=549;e.percent=833;e.ampersand=778;e.suchthat=439;e.parenleft=333;e.parenright=333;e.asteriskmath=500;e.plus=549;e.comma=250;e.minus=549;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=278;e.semicolon=278;e.less=549;e.equal=549;e.greater=549;e.question=444;e.congruent=549;e.Alpha=722;e.Beta=667;e.Chi=722;e.Delta=612;e.Epsilon=611;e.Phi=763;e.Gamma=603;e.Eta=722;e.Iota=333;e.theta1=631;e.Kappa=722;e.Lambda=686;e.Mu=889;e.Nu=722;e.Omicron=722;e.Pi=768;e.Theta=741;e.Rho=556;e.Sigma=592;e.Tau=611;e.Upsilon=690;e.sigma1=439;e.Omega=768;e.Xi=645;e.Psi=795;e.Zeta=611;e.bracketleft=333;e.therefore=863;e.bracketright=333;e.perpendicular=658;e.underscore=500;e.radicalex=500;e.alpha=631;e.beta=549;e.chi=549;e.delta=494;e.epsilon=439;e.phi=521;e.gamma=411;e.eta=603;e.iota=329;e.phi1=603;e.kappa=549;e.lambda=549;e.mu=576;e.nu=521;e.omicron=549;e.pi=549;e.theta=521;e.rho=549;e.sigma=603;e.tau=439;e.upsilon=576;e.omega1=713;e.omega=686;e.xi=493;e.psi=686;e.zeta=494;e.braceleft=480;e.bar=200;e.braceright=480;e.similar=549;e.Euro=750;e.Upsilon1=620;e.minute=247;e.lessequal=549;e.fraction=167;e.infinity=713;e.florin=500;e.club=753;e.diamond=753;e.heart=753;e.spade=753;e.arrowboth=1042;e.arrowleft=987;e.arrowup=603;e.arrowright=987;e.arrowdown=603;e.degree=400;e.plusminus=549;e.second=411;e.greaterequal=549;e.multiply=549;e.proportional=713;e.partialdiff=494;e.bullet=460;e.divide=549;e.notequal=549;e.equivalence=549;e.approxequal=549;e.ellipsis=1e3;e.arrowvertex=603;e.arrowhorizex=1e3;e.carriagereturn=658;e.aleph=823;e.Ifraktur=686;e.Rfraktur=795;e.weierstrass=987;e.circlemultiply=768;e.circleplus=768;e.emptyset=823;e.intersection=768;e.union=768;e.propersuperset=713;e.reflexsuperset=713;e.notsubset=713;e.propersubset=713;e.reflexsubset=713;e.element=713;e.notelement=713;e.angle=768;e.gradient=713;e.registerserif=790;e.copyrightserif=790;e.trademarkserif=890;e.product=823;e.radical=549;e.dotmath=250;e.logicalnot=713;e.logicaland=603;e.logicalor=603;e.arrowdblboth=1042;e.arrowdblleft=987;e.arrowdblup=603;e.arrowdblright=987;e.arrowdbldown=603;e.lozenge=494;e.angleleft=329;e.registersans=790;e.copyrightsans=790;e.trademarksans=786;e.summation=713;e.parenlefttp=384;e.parenleftex=384;e.parenleftbt=384;e.bracketlefttp=384;e.bracketleftex=384;e.bracketleftbt=384;e.bracelefttp=494;e.braceleftmid=494;e.braceleftbt=494;e.braceex=494;e.angleright=329;e.integral=274;e.integraltp=686;e.integralex=686;e.integralbt=686;e.parenrighttp=384;e.parenrightex=384;e.parenrightbt=384;e.bracketrighttp=384;e.bracketrightex=384;e.bracketrightbt=384;e.bracerighttp=494;e.bracerightmid=494;e.bracerightbt=494;e.apple=790}));e["Times-Roman"]=(0,r.getLookupTableFactory)((function(e){e.space=250;e.exclam=333;e.quotedbl=408;e.numbersign=500;e.dollar=500;e.percent=833;e.ampersand=778;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=564;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=278;e.semicolon=278;e.less=564;e.equal=564;e.greater=564;e.question=444;e.at=921;e.A=722;e.B=667;e.C=667;e.D=722;e.E=611;e.F=556;e.G=722;e.H=722;e.I=333;e.J=389;e.K=722;e.L=611;e.M=889;e.N=722;e.O=722;e.P=556;e.Q=722;e.R=667;e.S=556;e.T=611;e.U=722;e.V=722;e.W=944;e.X=722;e.Y=722;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=469;e.underscore=500;e.quoteleft=333;e.a=444;e.b=500;e.c=444;e.d=500;e.e=444;e.f=333;e.g=500;e.h=500;e.i=278;e.j=278;e.k=500;e.l=278;e.m=778;e.n=500;e.o=500;e.p=500;e.q=500;e.r=333;e.s=389;e.t=278;e.u=500;e.v=500;e.w=722;e.x=500;e.y=500;e.z=444;e.braceleft=480;e.bar=200;e.braceright=480;e.asciitilde=541;e.exclamdown=333;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=180;e.quotedblleft=444;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=556;e.fl=556;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=453;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=444;e.quotedblright=444;e.guillemotright=500;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=444;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=889;e.ordfeminine=276;e.Lslash=611;e.Oslash=722;e.OE=889;e.ordmasculine=310;e.ae=667;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=722;e.germandbls=500;e.Idieresis=333;e.eacute=444;e.abreve=444;e.uhungarumlaut=500;e.ecaron=444;e.Ydieresis=722;e.divide=564;e.Yacute=722;e.Acircumflex=722;e.aacute=444;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=444;e.Uacute=722;e.uogonek=500;e.Edieresis=611;e.Dcroat=722;e.commaaccent=250;e.copyright=760;e.Emacron=611;e.ccaron=444;e.aring=444;e.Ncommaaccent=722;e.lacute=278;e.agrave=444;e.Tcommaaccent=611;e.Cacute=667;e.atilde=444;e.Edotaccent=611;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=471;e.Rcaron=667;e.Gcommaaccent=722;e.ucircumflex=500;e.acircumflex=444;e.Amacron=722;e.rcaron=333;e.ccedilla=444;e.Zdotaccent=611;e.Thorn=556;e.Omacron=722;e.Racute=667;e.Sacute=556;e.dcaron=588;e.Umacron=722;e.uring=500;e.threesuperior=300;e.Ograve=722;e.Agrave=722;e.Abreve=722;e.multiply=564;e.uacute=500;e.Tcaron=611;e.partialdiff=476;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=611;e.adieresis=444;e.edieresis=444;e.cacute=444;e.nacute=500;e.umacron=500;e.Ncaron=722;e.Iacute=333;e.plusminus=564;e.brokenbar=200;e.registered=760;e.Gbreve=722;e.Idotaccent=333;e.summation=600;e.Egrave=611;e.racute=333;e.omacron=500;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=667;e.lcommaaccent=278;e.tcaron=326;e.eogonek=444;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=444;e.zacute=444;e.iogonek=278;e.Oacute=722;e.oacute=500;e.amacron=444;e.sacute=389;e.idieresis=278;e.Ocircumflex=722;e.Ugrave=722;e.Delta=612;e.thorn=500;e.twosuperior=300;e.Odieresis=722;e.mu=500;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=611;e.dcroat=500;e.threequarters=750;e.Scedilla=556;e.lcaron=344;e.Kcommaaccent=722;e.Lacute=611;e.trademark=980;e.edotaccent=444;e.Igrave=333;e.Imacron=333;e.Lcaron=611;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=500;e.Uhungarumlaut=722;e.Eacute=611;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=556;e.Scommaaccent=556;e.Ohungarumlaut=722;e.degree=400;e.ograve=500;e.Ccaron=667;e.ugrave=500;e.radical=453;e.Dcaron=722;e.rcommaaccent=333;e.Ntilde=722;e.otilde=500;e.Rcommaaccent=667;e.Lcommaaccent=611;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=722;e.zdotaccent=444;e.Ecaron=611;e.Iogonek=333;e.kcommaaccent=500;e.minus=564;e.Icircumflex=333;e.ncaron=500;e.tcommaaccent=278;e.logicalnot=564;e.odieresis=500;e.udieresis=500;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=444;e.ncommaaccent=500;e.onesuperior=300;e.imacron=278;e.Euro=500}));e["Times-Bold"]=(0,r.getLookupTableFactory)((function(e){e.space=250;e.exclam=333;e.quotedbl=555;e.numbersign=500;e.dollar=500;e.percent=1e3;e.ampersand=833;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=570;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=333;e.semicolon=333;e.less=570;e.equal=570;e.greater=570;e.question=500;e.at=930;e.A=722;e.B=667;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=778;e.I=389;e.J=500;e.K=778;e.L=667;e.M=944;e.N=722;e.O=778;e.P=611;e.Q=778;e.R=722;e.S=556;e.T=667;e.U=722;e.V=722;e.W=1e3;e.X=722;e.Y=722;e.Z=667;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=581;e.underscore=500;e.quoteleft=333;e.a=500;e.b=556;e.c=444;e.d=556;e.e=444;e.f=333;e.g=500;e.h=556;e.i=278;e.j=333;e.k=556;e.l=278;e.m=833;e.n=556;e.o=500;e.p=556;e.q=556;e.r=444;e.s=389;e.t=333;e.u=556;e.v=500;e.w=722;e.x=500;e.y=500;e.z=444;e.braceleft=394;e.bar=220;e.braceright=394;e.asciitilde=520;e.exclamdown=333;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=278;e.quotedblleft=500;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=556;e.fl=556;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=540;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=500;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=500;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=300;e.Lslash=667;e.Oslash=778;e.OE=1e3;e.ordmasculine=330;e.ae=722;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=722;e.germandbls=556;e.Idieresis=389;e.eacute=444;e.abreve=500;e.uhungarumlaut=556;e.ecaron=444;e.Ydieresis=722;e.divide=570;e.Yacute=722;e.Acircumflex=722;e.aacute=500;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=500;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=747;e.Emacron=667;e.ccaron=444;e.aring=500;e.Ncommaaccent=722;e.lacute=278;e.agrave=500;e.Tcommaaccent=667;e.Cacute=722;e.atilde=500;e.Edotaccent=667;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=494;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=556;e.acircumflex=500;e.Amacron=722;e.rcaron=444;e.ccedilla=444;e.Zdotaccent=667;e.Thorn=611;e.Omacron=778;e.Racute=722;e.Sacute=556;e.dcaron=672;e.Umacron=722;e.uring=556;e.threesuperior=300;e.Ograve=778;e.Agrave=722;e.Abreve=722;e.multiply=570;e.uacute=556;e.Tcaron=667;e.partialdiff=494;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=500;e.edieresis=444;e.cacute=444;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=389;e.plusminus=570;e.brokenbar=220;e.registered=747;e.Gbreve=778;e.Idotaccent=389;e.summation=600;e.Egrave=667;e.racute=444;e.omacron=500;e.Zacute=667;e.Zcaron=667;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=278;e.tcaron=416;e.eogonek=444;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=444;e.zacute=444;e.iogonek=278;e.Oacute=778;e.oacute=500;e.amacron=500;e.sacute=389;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=556;e.twosuperior=300;e.Odieresis=778;e.mu=556;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=667;e.dcroat=556;e.threequarters=750;e.Scedilla=556;e.lcaron=394;e.Kcommaaccent=778;e.Lacute=667;e.trademark=1e3;e.edotaccent=444;e.Igrave=389;e.Imacron=389;e.Lcaron=667;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=556;e.Scommaaccent=556;e.Ohungarumlaut=778;e.degree=400;e.ograve=500;e.Ccaron=722;e.ugrave=556;e.radical=549;e.Dcaron=722;e.rcommaaccent=444;e.Ntilde=722;e.otilde=500;e.Rcommaaccent=722;e.Lcommaaccent=667;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=778;e.zdotaccent=444;e.Ecaron=667;e.Iogonek=389;e.kcommaaccent=556;e.minus=570;e.Icircumflex=389;e.ncaron=556;e.tcommaaccent=333;e.logicalnot=570;e.odieresis=500;e.udieresis=556;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=444;e.ncommaaccent=556;e.onesuperior=300;e.imacron=278;e.Euro=500}));e["Times-BoldItalic"]=(0,r.getLookupTableFactory)((function(e){e.space=250;e.exclam=389;e.quotedbl=555;e.numbersign=500;e.dollar=500;e.percent=833;e.ampersand=778;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=570;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=333;e.semicolon=333;e.less=570;e.equal=570;e.greater=570;e.question=500;e.at=832;e.A=667;e.B=667;e.C=667;e.D=722;e.E=667;e.F=667;e.G=722;e.H=778;e.I=389;e.J=500;e.K=667;e.L=611;e.M=889;e.N=722;e.O=722;e.P=611;e.Q=722;e.R=667;e.S=556;e.T=611;e.U=722;e.V=667;e.W=889;e.X=667;e.Y=611;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=570;e.underscore=500;e.quoteleft=333;e.a=500;e.b=500;e.c=444;e.d=500;e.e=444;e.f=333;e.g=500;e.h=556;e.i=278;e.j=278;e.k=500;e.l=278;e.m=778;e.n=556;e.o=500;e.p=500;e.q=500;e.r=389;e.s=389;e.t=278;e.u=556;e.v=444;e.w=667;e.x=500;e.y=444;e.z=389;e.braceleft=348;e.bar=220;e.braceright=348;e.asciitilde=570;e.exclamdown=389;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=278;e.quotedblleft=500;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=556;e.fl=556;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=500;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=500;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=500;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=944;e.ordfeminine=266;e.Lslash=611;e.Oslash=722;e.OE=944;e.ordmasculine=300;e.ae=722;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=722;e.germandbls=500;e.Idieresis=389;e.eacute=444;e.abreve=500;e.uhungarumlaut=556;e.ecaron=444;e.Ydieresis=611;e.divide=570;e.Yacute=611;e.Acircumflex=667;e.aacute=500;e.Ucircumflex=722;e.yacute=444;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=500;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=747;e.Emacron=667;e.ccaron=444;e.aring=500;e.Ncommaaccent=722;e.lacute=278;e.agrave=500;e.Tcommaaccent=611;e.Cacute=667;e.atilde=500;e.Edotaccent=667;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=494;e.Rcaron=667;e.Gcommaaccent=722;e.ucircumflex=556;e.acircumflex=500;e.Amacron=667;e.rcaron=389;e.ccedilla=444;e.Zdotaccent=611;e.Thorn=611;e.Omacron=722;e.Racute=667;e.Sacute=556;e.dcaron=608;e.Umacron=722;e.uring=556;e.threesuperior=300;e.Ograve=722;e.Agrave=667;e.Abreve=667;e.multiply=570;e.uacute=556;e.Tcaron=611;e.partialdiff=494;e.ydieresis=444;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=500;e.edieresis=444;e.cacute=444;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=389;e.plusminus=570;e.brokenbar=220;e.registered=747;e.Gbreve=722;e.Idotaccent=389;e.summation=600;e.Egrave=667;e.racute=389;e.omacron=500;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=667;e.lcommaaccent=278;e.tcaron=366;e.eogonek=444;e.Uogonek=722;e.Aacute=667;e.Adieresis=667;e.egrave=444;e.zacute=389;e.iogonek=278;e.Oacute=722;e.oacute=500;e.amacron=500;e.sacute=389;e.idieresis=278;e.Ocircumflex=722;e.Ugrave=722;e.Delta=612;e.thorn=500;e.twosuperior=300;e.Odieresis=722;e.mu=576;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=667;e.dcroat=500;e.threequarters=750;e.Scedilla=556;e.lcaron=382;e.Kcommaaccent=667;e.Lacute=611;e.trademark=1e3;e.edotaccent=444;e.Igrave=389;e.Imacron=389;e.Lcaron=611;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=556;e.Scommaaccent=556;e.Ohungarumlaut=722;e.degree=400;e.ograve=500;e.Ccaron=667;e.ugrave=556;e.radical=549;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=722;e.otilde=500;e.Rcommaaccent=667;e.Lcommaaccent=611;e.Atilde=667;e.Aogonek=667;e.Aring=667;e.Otilde=722;e.zdotaccent=389;e.Ecaron=667;e.Iogonek=389;e.kcommaaccent=500;e.minus=606;e.Icircumflex=389;e.ncaron=556;e.tcommaaccent=278;e.logicalnot=606;e.odieresis=500;e.udieresis=556;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=389;e.ncommaaccent=556;e.onesuperior=300;e.imacron=278;e.Euro=500}));e["Times-Italic"]=(0,r.getLookupTableFactory)((function(e){e.space=250;e.exclam=333;e.quotedbl=420;e.numbersign=500;e.dollar=500;e.percent=833;e.ampersand=778;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=675;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=333;e.semicolon=333;e.less=675;e.equal=675;e.greater=675;e.question=500;e.at=920;e.A=611;e.B=611;e.C=667;e.D=722;e.E=611;e.F=611;e.G=722;e.H=722;e.I=333;e.J=444;e.K=667;e.L=556;e.M=833;e.N=667;e.O=722;e.P=611;e.Q=722;e.R=611;e.S=500;e.T=556;e.U=722;e.V=611;e.W=833;e.X=611;e.Y=556;e.Z=556;e.bracketleft=389;e.backslash=278;e.bracketright=389;e.asciicircum=422;e.underscore=500;e.quoteleft=333;e.a=500;e.b=500;e.c=444;e.d=500;e.e=444;e.f=278;e.g=500;e.h=500;e.i=278;e.j=278;e.k=444;e.l=278;e.m=722;e.n=500;e.o=500;e.p=500;e.q=500;e.r=389;e.s=389;e.t=278;e.u=500;e.v=444;e.w=667;e.x=444;e.y=444;e.z=389;e.braceleft=400;e.bar=275;e.braceright=400;e.asciitilde=541;e.exclamdown=389;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=214;e.quotedblleft=556;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=500;e.fl=500;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=523;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=556;e.quotedblright=556;e.guillemotright=500;e.ellipsis=889;e.perthousand=1e3;e.questiondown=500;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=889;e.AE=889;e.ordfeminine=276;e.Lslash=556;e.Oslash=722;e.OE=944;e.ordmasculine=310;e.ae=667;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=667;e.germandbls=500;e.Idieresis=333;e.eacute=444;e.abreve=500;e.uhungarumlaut=500;e.ecaron=444;e.Ydieresis=556;e.divide=675;e.Yacute=556;e.Acircumflex=611;e.aacute=500;e.Ucircumflex=722;e.yacute=444;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=500;e.Uacute=722;e.uogonek=500;e.Edieresis=611;e.Dcroat=722;e.commaaccent=250;e.copyright=760;e.Emacron=611;e.ccaron=444;e.aring=500;e.Ncommaaccent=667;e.lacute=278;e.agrave=500;e.Tcommaaccent=556;e.Cacute=667;e.atilde=500;e.Edotaccent=611;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=471;e.Rcaron=611;e.Gcommaaccent=722;e.ucircumflex=500;e.acircumflex=500;e.Amacron=611;e.rcaron=389;e.ccedilla=444;e.Zdotaccent=556;e.Thorn=611;e.Omacron=722;e.Racute=611;e.Sacute=500;e.dcaron=544;e.Umacron=722;e.uring=500;e.threesuperior=300;e.Ograve=722;e.Agrave=611;e.Abreve=611;e.multiply=675;e.uacute=500;e.Tcaron=556;e.partialdiff=476;e.ydieresis=444;e.Nacute=667;e.icircumflex=278;e.Ecircumflex=611;e.adieresis=500;e.edieresis=444;e.cacute=444;e.nacute=500;e.umacron=500;e.Ncaron=667;e.Iacute=333;e.plusminus=675;e.brokenbar=275;e.registered=760;e.Gbreve=722;e.Idotaccent=333;e.summation=600;e.Egrave=611;e.racute=389;e.omacron=500;e.Zacute=556;e.Zcaron=556;e.greaterequal=549;e.Eth=722;e.Ccedilla=667;e.lcommaaccent=278;e.tcaron=300;e.eogonek=444;e.Uogonek=722;e.Aacute=611;e.Adieresis=611;e.egrave=444;e.zacute=389;e.iogonek=278;e.Oacute=722;e.oacute=500;e.amacron=500;e.sacute=389;e.idieresis=278;e.Ocircumflex=722;e.Ugrave=722;e.Delta=612;e.thorn=500;e.twosuperior=300;e.Odieresis=722;e.mu=500;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=611;e.dcroat=500;e.threequarters=750;e.Scedilla=500;e.lcaron=300;e.Kcommaaccent=667;e.Lacute=556;e.trademark=980;e.edotaccent=444;e.Igrave=333;e.Imacron=333;e.Lcaron=611;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=500;e.Uhungarumlaut=722;e.Eacute=611;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=500;e.Scommaaccent=500;e.Ohungarumlaut=722;e.degree=400;e.ograve=500;e.Ccaron=667;e.ugrave=500;e.radical=453;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=667;e.otilde=500;e.Rcommaaccent=611;e.Lcommaaccent=556;e.Atilde=611;e.Aogonek=611;e.Aring=611;e.Otilde=722;e.zdotaccent=389;e.Ecaron=611;e.Iogonek=333;e.kcommaaccent=444;e.minus=675;e.Icircumflex=333;e.ncaron=500;e.tcommaaccent=278;e.logicalnot=675;e.odieresis=500;e.udieresis=500;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=389;e.ncommaaccent=500;e.onesuperior=300;e.imacron=278;e.Euro=500}));e.ZapfDingbats=(0,r.getLookupTableFactory)((function(e){e.space=278;e.a1=974;e.a2=961;e.a202=974;e.a3=980;e.a4=719;e.a5=789;e.a119=790;e.a118=791;e.a117=690;e.a11=960;e.a12=939;e.a13=549;e.a14=855;e.a15=911;e.a16=933;e.a105=911;e.a17=945;e.a18=974;e.a19=755;e.a20=846;e.a21=762;e.a22=761;e.a23=571;e.a24=677;e.a25=763;e.a26=760;e.a27=759;e.a28=754;e.a6=494;e.a7=552;e.a8=537;e.a9=577;e.a10=692;e.a29=786;e.a30=788;e.a31=788;e.a32=790;e.a33=793;e.a34=794;e.a35=816;e.a36=823;e.a37=789;e.a38=841;e.a39=823;e.a40=833;e.a41=816;e.a42=831;e.a43=923;e.a44=744;e.a45=723;e.a46=749;e.a47=790;e.a48=792;e.a49=695;e.a50=776;e.a51=768;e.a52=792;e.a53=759;e.a54=707;e.a55=708;e.a56=682;e.a57=701;e.a58=826;e.a59=815;e.a60=789;e.a61=789;e.a62=707;e.a63=687;e.a64=696;e.a65=689;e.a66=786;e.a67=787;e.a68=713;e.a69=791;e.a70=785;e.a71=791;e.a72=873;e.a73=761;e.a74=762;e.a203=762;e.a75=759;e.a204=759;e.a76=892;e.a77=892;e.a78=788;e.a79=784;e.a81=438;e.a82=138;e.a83=277;e.a84=415;e.a97=392;e.a98=392;e.a99=668;e.a100=668;e.a89=390;e.a90=390;e.a93=317;e.a94=317;e.a91=276;e.a92=276;e.a205=509;e.a85=509;e.a206=410;e.a86=410;e.a87=234;e.a88=234;e.a95=334;e.a96=334;e.a101=732;e.a102=544;e.a103=544;e.a104=910;e.a106=667;e.a107=760;e.a108=760;e.a112=776;e.a111=595;e.a110=694;e.a109=626;e.a120=788;e.a121=788;e.a122=788;e.a123=788;e.a124=788;e.a125=788;e.a126=788;e.a127=788;e.a128=788;e.a129=788;e.a130=788;e.a131=788;e.a132=788;e.a133=788;e.a134=788;e.a135=788;e.a136=788;e.a137=788;e.a138=788;e.a139=788;e.a140=788;e.a141=788;e.a142=788;e.a143=788;e.a144=788;e.a145=788;e.a146=788;e.a147=788;e.a148=788;e.a149=788;e.a150=788;e.a151=788;e.a152=788;e.a153=788;e.a154=788;e.a155=788;e.a156=788;e.a157=788;e.a158=788;e.a159=788;e.a160=894;e.a161=838;e.a163=1016;e.a164=458;e.a196=748;e.a165=924;e.a192=748;e.a166=918;e.a167=927;e.a168=928;e.a169=928;e.a170=834;e.a171=873;e.a172=828;e.a173=924;e.a162=924;e.a174=917;e.a175=930;e.a176=931;e.a177=463;e.a178=883;e.a179=836;e.a193=836;e.a180=867;e.a199=867;e.a181=696;e.a200=696;e.a182=874;e.a201=874;e.a183=760;e.a184=946;e.a197=771;e.a185=865;e.a194=771;e.a198=888;e.a186=967;e.a195=888;e.a187=831;e.a188=873;e.a189=927;e.a190=970;e.a191=918}))}));t.getMetrics=i},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.isPDFFunction=function(e){var t;if("object"!=typeof e)return!1;if((0,i.isDict)(e))t=e;else{if(!(0,i.isStream)(e))return!1;t=e.dict}return t.has("FunctionType")};t.PostScriptCompiler=t.PostScriptEvaluator=t.PDFFunctionFactory=void 0;var r=a(2),i=a(4),n=a(40);t.PDFFunctionFactory=class{constructor({xref:e,isEvalSupported:t=!0}){this.xref=e;this.isEvalSupported=!1!==t}create(e){return o.parse({xref:this.xref,isEvalSupported:this.isEvalSupported,fn:e})}createFromArray(e){return o.parseArray({xref:this.xref,isEvalSupported:this.isEvalSupported,fnObj:e})}};function s(e){if(!Array.isArray(e))return null;const t=e.length;for(let a=0;a<t;a++)if("number"!=typeof e[a]){const a=new Array(t);for(let r=0;r<t;r++)a[r]=+e[r];return a}return e}var o={getSampleArray(e,t,a,r){var i,n,s=1;for(i=0,n=e.length;i<n;i++)s*=e[i];s*=t;var o=new Array(s),c=0,l=0,h=1/(2**a-1),u=r.getBytes((s*a+7)/8),d=0;for(i=0;i<s;i++){for(;c<a;){l<<=8;l|=u[d++];c+=8}c-=a;o[i]=(l>>c)*h;l&=(1<<c)-1}return o},getIR({xref:e,isEvalSupported:t,fn:a}){var i=a.dict;i||(i=a);var n=[this.constructSampled,null,this.constructInterpolated,this.constructStiched,this.constructPostScript][i.get("FunctionType")];if(!n)throw new r.FormatError("Unknown type of function");return n.call(this,{xref:e,isEvalSupported:t,fn:a,dict:i})},fromIR({xref:e,isEvalSupported:t,IR:a}){switch(a[0]){case 0:return this.constructSampledFromIR({xref:e,isEvalSupported:t,IR:a});case 2:return this.constructInterpolatedFromIR({xref:e,isEvalSupported:t,IR:a});case 3:return this.constructStichedFromIR({xref:e,isEvalSupported:t,IR:a});default:return this.constructPostScriptFromIR({xref:e,isEvalSupported:t,IR:a})}},parse({xref:e,isEvalSupported:t,fn:a}){const r=this.getIR({xref:e,isEvalSupported:t,fn:a});return this.fromIR({xref:e,isEvalSupported:t,IR:r})},parseArray({xref:e,isEvalSupported:t,fnObj:a}){if(!Array.isArray(a))return this.parse({xref:e,isEvalSupported:t,fn:a});for(var r=[],i=0,n=a.length;i<n;i++)r.push(this.parse({xref:e,isEvalSupported:t,fn:e.fetchIfRef(a[i])}));return function(e,t,a,i){for(var n=0,s=r.length;n<s;n++)r[n](e,t,a,i+n)}},constructSampled({xref:e,isEvalSupported:t,fn:a,dict:i}){function n(e){for(var t=e.length,a=[],r=0,i=0;i<t;i+=2){a[r]=[e[i],e[i+1]];++r}return a}var o=s(i.getArray("Domain")),c=s(i.getArray("Range"));if(!o||!c)throw new r.FormatError("No domain or range");var l=o.length/2,h=c.length/2;o=n(o);c=n(c);var u=s(i.getArray("Size")),d=i.get("BitsPerSample"),f=i.get("Order")||1;1!==f&&(0,r.info)("No support for cubic spline interpolation: "+f);var g=s(i.getArray("Encode"));if(g)g=n(g);else{g=[];for(var m=0;m<l;++m)g.push([0,u[m]-1])}var p=s(i.getArray("Decode"));return[0,l,o,g,p=p?n(p):c,this.getSampleArray(u,h,d,a),u,h,2**d-1,c]},constructSampledFromIR({xref:e,isEvalSupported:t,IR:a}){function r(e,t,a,r,i){return r+(i-r)/(a-t)*(e-t)}return function(e,t,i,n){var s,o,c=a[1],l=a[2],h=a[3],u=a[4],d=a[5],f=a[6],g=a[7],m=a[9],p=1<<c,b=new Float64Array(p),y=new Uint32Array(p);for(o=0;o<p;o++)b[o]=1;var v=g,w=1;for(s=0;s<c;++s){var k=l[s][0],S=l[s][1],C=r(Math.min(Math.max(e[t+s],k),S),k,S,h[s][0],h[s][1]),x=f[s],A=(C=Math.min(Math.max(C,0),x-1))<x-1?Math.floor(C):C-1,I=A+1-C,F=C-A,T=A*v,E=T+v;for(o=0;o<p;o++)if(o&w){b[o]*=F;y[o]+=E}else{b[o]*=I;y[o]+=T}v*=x;w<<=1}for(o=0;o<g;++o){var O=0;for(s=0;s<p;s++)O+=d[y[s]+o]*b[s];O=r(O,0,1,u[o][0],u[o][1]);i[n+o]=Math.min(Math.max(O,m[o][0]),m[o][1])}}},constructInterpolated({xref:e,isEvalSupported:t,fn:a,dict:r}){for(var i=s(r.getArray("C0"))||[0],n=s(r.getArray("C1"))||[1],o=r.get("N"),c=i.length,l=[],h=0;h<c;++h)l.push(n[h]-i[h]);return[2,i,l,o]},constructInterpolatedFromIR({xref:e,isEvalSupported:t,IR:a}){var r=a[1],i=a[2],n=a[3],s=i.length;return function(e,t,a,o){for(var c=1===n?e[t]:e[t]**n,l=0;l<s;++l)a[o+l]=r[l]+c*i[l]}},constructStiched({xref:e,isEvalSupported:t,fn:a,dict:i}){var n=s(i.getArray("Domain"));if(!n)throw new r.FormatError("No domain");if(1!=n.length/2)throw new r.FormatError("Bad domain for stiched function");for(var o=i.get("Functions"),c=[],l=0,h=o.length;l<h;++l)c.push(this.parse({xref:e,isEvalSupported:t,fn:e.fetchIfRef(o[l])}));return[3,n,s(i.getArray("Bounds")),s(i.getArray("Encode")),c]},constructStichedFromIR({xref:e,isEvalSupported:t,IR:a}){var r=a[1],i=a[2],n=a[3],s=a[4],o=new Float32Array(1);return function(e,t,a,c){for(var l=function(e,t,a){e>a?e=a:e<t&&(e=t);return e}(e[t],r[0],r[1]),h=0,u=i.length;h<u&&!(l<i[h]);++h);var d=r[0];h>0&&(d=i[h-1]);var f=r[1];h<i.length&&(f=i[h]);var g=n[2*h],m=n[2*h+1];o[0]=d===f?g:g+(l-d)*(m-g)/(f-d);s[h](o,0,a,c)}},constructPostScript({xref:e,isEvalSupported:t,fn:a,dict:i}){var o=s(i.getArray("Domain")),c=s(i.getArray("Range"));if(!o)throw new r.FormatError("No domain.");if(!c)throw new r.FormatError("No range.");var l=new n.PostScriptLexer(a);return[4,o,c,new n.PostScriptParser(l).parse()]},constructPostScriptFromIR({xref:e,isEvalSupported:t,IR:a}){var i=a[1],n=a[2],s=a[3];if(t&&r.IsEvalSupportedCached.value){const e=(new h).compile(s,i,n);if(e)return new Function("src","srcOffset","dest","destOffset",e)}(0,r.info)("Unable to compile PS function");var o=n.length>>1,c=i.length>>1,u=new l(s),d=Object.create(null),f=8192,g=new Float32Array(c);return function(e,t,a,r){var i,s,l="",h=g;for(i=0;i<c;i++){s=e[t+i];h[i]=s;l+=s+"_"}var m=d[l];if(void 0===m){var p=new Float32Array(o),b=u.execute(h),y=b.length-o;for(i=0;i<o;i++){s=b[y+i];var v=n[2*i];(s<v||s>(v=n[2*i+1]))&&(s=v);p[i]=s}if(f>0){f--;d[l]=p}a.set(p,r)}else a.set(m,r)}}};var c=function(){function e(e){this.stack=e?Array.prototype.slice.call(e,0):[]}e.prototype={push:function(e){if(this.stack.length>=100)throw new Error("PostScript function stack overflow.");this.stack.push(e)},pop:function(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()},copy:function(e){if(this.stack.length+e>=100)throw new Error("PostScript function stack overflow.");for(var t=this.stack,a=t.length-e,r=e-1;r>=0;r--,a++)t.push(t[a])},index:function(e){this.push(this.stack[this.stack.length-e-1])},roll:function(e,t){var a,r,i,n=this.stack,s=n.length-e,o=n.length-1,c=s+(t-Math.floor(t/e)*e);for(a=s,r=o;a<r;a++,r--){i=n[a];n[a]=n[r];n[r]=i}for(a=s,r=c-1;a<r;a++,r--){i=n[a];n[a]=n[r];n[r]=i}for(a=c,r=o;a<r;a++,r--){i=n[a];n[a]=n[r];n[r]=i}}};return e}(),l=function(){function e(e){this.operators=e}e.prototype={execute:function(e){for(var t,a,i,n=new c(e),s=0,o=this.operators,l=o.length;s<l;)if("number"!=typeof(t=o[s++]))switch(t){case"jz":i=n.pop();(a=n.pop())||(s=i);break;case"j":s=a=n.pop();break;case"abs":a=n.pop();n.push(Math.abs(a));break;case"add":i=n.pop();a=n.pop();n.push(a+i);break;case"and":i=n.pop();a=n.pop();(0,r.isBool)(a)&&(0,r.isBool)(i)?n.push(a&&i):n.push(a&i);break;case"atan":a=n.pop();n.push(Math.atan(a));break;case"bitshift":i=n.pop();(a=n.pop())>0?n.push(a<<i):n.push(a>>i);break;case"ceiling":a=n.pop();n.push(Math.ceil(a));break;case"copy":a=n.pop();n.copy(a);break;case"cos":a=n.pop();n.push(Math.cos(a));break;case"cvi":a=0|n.pop();n.push(a);break;case"cvr":break;case"div":i=n.pop();a=n.pop();n.push(a/i);break;case"dup":n.copy(1);break;case"eq":i=n.pop();a=n.pop();n.push(a===i);break;case"exch":n.roll(2,1);break;case"exp":i=n.pop();a=n.pop();n.push(a**i);break;case"false":n.push(!1);break;case"floor":a=n.pop();n.push(Math.floor(a));break;case"ge":i=n.pop();a=n.pop();n.push(a>=i);break;case"gt":i=n.pop();a=n.pop();n.push(a>i);break;case"idiv":i=n.pop();a=n.pop();n.push(a/i|0);break;case"index":a=n.pop();n.index(a);break;case"le":i=n.pop();a=n.pop();n.push(a<=i);break;case"ln":a=n.pop();n.push(Math.log(a));break;case"log":a=n.pop();n.push(Math.log(a)/Math.LN10);break;case"lt":i=n.pop();a=n.pop();n.push(a<i);break;case"mod":i=n.pop();a=n.pop();n.push(a%i);break;case"mul":i=n.pop();a=n.pop();n.push(a*i);break;case"ne":i=n.pop();a=n.pop();n.push(a!==i);break;case"neg":a=n.pop();n.push(-a);break;case"not":a=n.pop();(0,r.isBool)(a)?n.push(!a):n.push(~a);break;case"or":i=n.pop();a=n.pop();(0,r.isBool)(a)&&(0,r.isBool)(i)?n.push(a||i):n.push(a|i);break;case"pop":n.pop();break;case"roll":i=n.pop();a=n.pop();n.roll(a,i);break;case"round":a=n.pop();n.push(Math.round(a));break;case"sin":a=n.pop();n.push(Math.sin(a));break;case"sqrt":a=n.pop();n.push(Math.sqrt(a));break;case"sub":i=n.pop();a=n.pop();n.push(a-i);break;case"true":n.push(!0);break;case"truncate":a=(a=n.pop())<0?Math.ceil(a):Math.floor(a);n.push(a);break;case"xor":i=n.pop();a=n.pop();(0,r.isBool)(a)&&(0,r.isBool)(i)?n.push(a!==i):n.push(a^i);break;default:throw new r.FormatError(`Unknown operator ${t}`)}else n.push(t);return n.stack}};return e}();t.PostScriptEvaluator=l;var h=function(){function e(e){this.type=e}e.prototype.visit=function(e){(0,r.unreachable)("abstract method")};function t(t,a,r){e.call(this,"args");this.index=t;this.min=a;this.max=r}t.prototype=Object.create(e.prototype);t.prototype.visit=function(e){e.visitArgument(this)};function a(t){e.call(this,"literal");this.number=t;this.min=t;this.max=t}a.prototype=Object.create(e.prototype);a.prototype.visit=function(e){e.visitLiteral(this)};function i(t,a,r,i,n){e.call(this,"binary");this.op=t;this.arg1=a;this.arg2=r;this.min=i;this.max=n}i.prototype=Object.create(e.prototype);i.prototype.visit=function(e){e.visitBinaryOperation(this)};function n(t,a){e.call(this,"max");this.arg=t;this.min=t.min;this.max=a}n.prototype=Object.create(e.prototype);n.prototype.visit=function(e){e.visitMin(this)};function s(t,a,r){e.call(this,"var");this.index=t;this.min=a;this.max=r}s.prototype=Object.create(e.prototype);s.prototype.visit=function(e){e.visitVariable(this)};function o(t,a){e.call(this,"definition");this.variable=t;this.arg=a}o.prototype=Object.create(e.prototype);o.prototype.visit=function(e){e.visitVariableDefinition(this)};function c(){this.parts=[]}c.prototype={visitArgument(e){this.parts.push("Math.max(",e.min,", Math.min(",e.max,", src[srcOffset + ",e.index,"]))")},visitVariable(e){this.parts.push("v",e.index)},visitLiteral(e){this.parts.push(e.number)},visitBinaryOperation(e){this.parts.push("(");e.arg1.visit(this);this.parts.push(" ",e.op," ");e.arg2.visit(this);this.parts.push(")")},visitVariableDefinition(e){this.parts.push("var ");e.variable.visit(this);this.parts.push(" = ");e.arg.visit(this);this.parts.push(";")},visitMin(e){this.parts.push("Math.min(");e.arg.visit(this);this.parts.push(", ",e.max,")")},toString(){return this.parts.join("")}};function l(e,t){return"literal"===t.type&&0===t.number?e:"literal"===e.type&&0===e.number?t:"literal"===t.type&&"literal"===e.type?new a(e.number+t.number):new i("+",e,t,e.min+t.min,e.max+t.max)}function h(e,t){if("literal"===t.type){if(0===t.number)return new a(0);if(1===t.number)return e;if("literal"===e.type)return new a(e.number*t.number)}if("literal"===e.type){if(0===e.number)return new a(0);if(1===e.number)return t}return new i("*",e,t,Math.min(e.min*t.min,e.min*t.max,e.max*t.min,e.max*t.max),Math.max(e.min*t.min,e.min*t.max,e.max*t.min,e.max*t.max))}function u(e,t){if("literal"===t.type){if(0===t.number)return e;if("literal"===e.type)return new a(e.number-t.number)}return"binary"===t.type&&"-"===t.op&&"literal"===e.type&&1===e.number&&"literal"===t.arg1.type&&1===t.arg1.number?t.arg2:new i("-",e,t,e.min-t.max,e.max-t.min)}function d(e,t){return e.min>=t?new a(t):e.max<=t?e:new n(e,t)}function f(){}f.prototype={compile:function(e,r,i){var n,f,g,m,p,b,y,v,w,k,S=[],C=[],x=r.length>>1,A=i.length>>1,I=0;for(n=0;n<x;n++)S.push(new t(n,r[2*n],r[2*n+1]));for(n=0,f=e.length;n<f;n++)if("number"!=typeof(k=e[n]))switch(k){case"add":if(S.length<2)return null;b=S.pop();p=S.pop();S.push(l(p,b));break;case"cvr":if(S.length<1)return null;break;case"mul":if(S.length<2)return null;b=S.pop();p=S.pop();S.push(h(p,b));break;case"sub":if(S.length<2)return null;b=S.pop();p=S.pop();S.push(u(p,b));break;case"exch":if(S.length<2)return null;y=S.pop();v=S.pop();S.push(y,v);break;case"pop":if(S.length<1)return null;S.pop();break;case"index":if(S.length<1)return null;if("literal"!==(p=S.pop()).type)return null;if((g=p.number)<0||!Number.isInteger(g)||S.length<g)return null;if("literal"===(y=S[S.length-g-1]).type||"var"===y.type){S.push(y);break}w=new s(I++,y.min,y.max);S[S.length-g-1]=w;S.push(w);C.push(new o(w,y));break;case"dup":if(S.length<1)return null;if("number"==typeof e[n+1]&&"gt"===e[n+2]&&e[n+3]===n+7&&"jz"===e[n+4]&&"pop"===e[n+5]&&e[n+6]===e[n+1]){p=S.pop();S.push(d(p,e[n+1]));n+=6;break}if("literal"===(y=S[S.length-1]).type||"var"===y.type){S.push(y);break}w=new s(I++,y.min,y.max);S[S.length-1]=w;S.push(w);C.push(new o(w,y));break;case"roll":if(S.length<2)return null;b=S.pop();p=S.pop();if("literal"!==b.type||"literal"!==p.type)return null;m=b.number;if((g=p.number)<=0||!Number.isInteger(g)||!Number.isInteger(m)||S.length<g)return null;if(0===(m=(m%g+g)%g))break;Array.prototype.push.apply(S,S.splice(S.length-g,g-m));break;default:return null}else S.push(new a(k));if(S.length!==A)return null;var F=[];C.forEach((function(e){var t=new c;e.visit(t);F.push(t.toString())}));S.forEach((function(e,t){var a=new c;e.visit(a);var r=i[2*t],n=i[2*t+1],s=[a.toString()];if(r>e.min){s.unshift("Math.max(",r,", ");s.push(")")}if(n<e.max){s.unshift("Math.min(",n,", ");s.push(")")}s.unshift("dest[destOffset + ",t,"] = ");s.push(";");F.push(s.join(""))}));return F.join("\n")}};return f}();t.PostScriptCompiler=h},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.PostScriptParser=t.PostScriptLexer=void 0;var r=a(2),i=a(4),n=a(7);t.PostScriptParser=class{constructor(e){this.lexer=e;this.operators=[];this.token=null;this.prev=null}nextToken(){this.prev=this.token;this.token=this.lexer.getToken()}accept(e){if(this.token.type===e){this.nextToken();return!0}return!1}expect(e){if(this.accept(e))return!0;throw new r.FormatError(`Unexpected symbol: found ${this.token.type} expected ${e}.`)}parse(){this.nextToken();this.expect(s.LBRACE);this.parseBlock();this.expect(s.RBRACE);return this.operators}parseBlock(){for(;;)if(this.accept(s.NUMBER))this.operators.push(this.prev.value);else if(this.accept(s.OPERATOR))this.operators.push(this.prev.value);else{if(!this.accept(s.LBRACE))return;this.parseCondition()}}parseCondition(){const e=this.operators.length;this.operators.push(null,null);this.parseBlock();this.expect(s.RBRACE);if(this.accept(s.IF)){this.operators[e]=this.operators.length;this.operators[e+1]="jz"}else{if(!this.accept(s.LBRACE))throw new r.FormatError("PS Function: error parsing conditional.");{const t=this.operators.length;this.operators.push(null,null);const a=this.operators.length;this.parseBlock();this.expect(s.RBRACE);this.expect(s.IFELSE);this.operators[t]=this.operators.length;this.operators[t+1]="j";this.operators[e]=a;this.operators[e+1]="jz"}}}};const s={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5},o=function(){const e=Object.create(null);class t{constructor(e,t){this.type=e;this.value=t}static getOperator(a){const r=e[a];return r||(e[a]=new t(s.OPERATOR,a))}static get LBRACE(){return(0,r.shadow)(this,"LBRACE",new t(s.LBRACE,"{"))}static get RBRACE(){return(0,r.shadow)(this,"RBRACE",new t(s.RBRACE,"}"))}static get IF(){return(0,r.shadow)(this,"IF",new t(s.IF,"IF"))}static get IFELSE(){return(0,r.shadow)(this,"IFELSE",new t(s.IFELSE,"IFELSE"))}}return t}();t.PostScriptLexer=class{constructor(e){this.stream=e;this.nextChar();this.strBuf=[]}nextChar(){return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(t<0)return i.EOF;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!(0,n.isWhiteSpace)(t))break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new o(s.NUMBER,this.getNumber());case 123:this.nextChar();return o.LBRACE;case 125:this.nextChar();return o.RBRACE}const a=this.strBuf;a.length=0;a[0]=String.fromCharCode(t);for(;(t=this.nextChar())>=0&&(t>=65&&t<=90||t>=97&&t<=122);)a.push(String.fromCharCode(t));const r=a.join("");switch(r.toLowerCase()){case"if":return o.IF;case"ifelse":return o.IFELSE;default:return o.getOperator(r)}}getNumber(){let e=this.currentChar;const t=this.strBuf;t.length=0;t[0]=String.fromCharCode(e);for(;(e=this.nextChar())>=0&&(e>=48&&e<=57||45===e||46===e);)t.push(String.fromCharCode(e));const a=parseFloat(t.join(""));if(isNaN(a))throw new r.FormatError(`Invalid floating point number: ${a}`);return a}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.MurmurHash3_64=void 0;var r=a(2);t.MurmurHash3_64=class{constructor(e){this.h1=e?4294967295&e:3285377520;this.h2=e?4294967295&e:3285377520}update(e){let t,a;if((0,r.isString)(e)){t=new Uint8Array(2*e.length);a=0;for(let r=0,i=e.length;r<i;r++){const i=e.charCodeAt(r);if(i<=255)t[a++]=i;else{t[a++]=i>>>8;t[a++]=255&i}}}else{if(!(0,r.isArrayBuffer)(e))throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");t=e;a=t.byteLength}const i=a>>2,n=a-4*i,s=new Uint32Array(t.buffer,0,i);let o=0,c=0,l=this.h1,h=this.h2;const u=3432918353,d=461845907;for(let e=0;e<i;e++)if(1&e){o=s[e];o=o*u&4294901760|11601*o&65535;o=o<<15|o>>>17;o=o*d&4294901760|13715*o&65535;l^=o;l=l<<13|l>>>19;l=5*l+3864292196}else{c=s[e];c=c*u&4294901760|11601*c&65535;c=c<<15|c>>>17;c=c*d&4294901760|13715*c&65535;h^=c;h=h<<13|h>>>19;h=5*h+3864292196}o=0;switch(n){case 3:o^=t[4*i+2]<<16;case 2:o^=t[4*i+1]<<8;case 1:o^=t[4*i];o=o*u&4294901760|11601*o&65535;o=o<<15|o>>>17;o=o*d&4294901760|13715*o&65535;1&i?l^=o:h^=o}this.h1=l;this.h2=h}hexdigest(){let e=this.h1,t=this.h2;e^=t>>>1;e=3981806797*e&4294901760|36045*e&65535;t=4283543511*t&4294901760|(2950163797*(t<<16|e>>>16)&4294901760)>>>16;e^=t>>>1;e=444984403*e&4294901760|60499*e&65535;t=3301882366*t&4294901760|(3120437893*(t<<16|e>>>16)&4294901760)>>>16;e^=t>>>1;const a=(e>>>0).toString(16),r=(t>>>0).toString(16);return a.padStart(8,"0")+r.padStart(8,"0")}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.NativeImageDecoder=void 0;var r=a(22),i=a(17),n=a(11);class s{constructor({xref:e,resources:t,handler:a,forceDataSchema:r=!1,pdfFunctionFactory:i}){this.xref=e;this.resources=t;this.handler=a;this.forceDataSchema=r;this.pdfFunctionFactory=i}canDecode(e){return e instanceof i.JpegStream&&s.isDecodable(e,this.xref,this.resources,this.pdfFunctionFactory)&&e.maybeValidDimensions}decode(e){const t=e.dict;let a=t.get("ColorSpace","CS");a=r.ColorSpace.parse(a,this.xref,this.resources,this.pdfFunctionFactory);return this.handler.sendWithPromise("JpegDecode",[e.getIR(this.forceDataSchema),a.numComps]).then((function({data:e,width:a,height:r}){return new n.Stream(e,0,e.length,t)}))}static isSupported(e,t,a,i){const n=e.dict;if(n.has("DecodeParms")||n.has("DP"))return!1;const s=r.ColorSpace.parse(n.get("ColorSpace","CS"),t,a,i);return("DeviceGray"===s.name||"DeviceRGB"===s.name)&&s.isDefaultDecode(n.getArray("Decode","D"))}static isDecodable(e,t,a,i){const n=e.dict;if(n.has("DecodeParms")||n.has("DP"))return!1;const s=r.ColorSpace.parse(n.get("ColorSpace","CS"),t,a,i),o=n.get("BitsPerComponent","BPC")||1;return(1===s.numComps||3===s.numComps)&&s.isDefaultDecode(n.getArray("Decode","D"),o)}}t.NativeImageDecoder=s},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.PDFImage=void 0;var r=a(2),i=a(4),n=a(22),s=a(11),o=a(17),c=a(20),l=function(){function e(e,t){return t&&t.canDecode(e)?t.decode(e).catch(t=>{(0,r.warn)("Native image decoding failed -- trying to recover: "+(t&&t.message));return e}):Promise.resolve(e)}function t(e,t,a,r){(e=t+e*a)<0?e=0:e>r&&(e=r);return e}function a(e,t,a,r,i,n){var s=i*n;let o;o=t<=8?new Uint8Array(s):t<=16?new Uint16Array(s):new Uint32Array(s);var c,l,h,u,d=a/i,f=r/n,g=0,m=new Uint16Array(i),p=a;for(c=0;c<i;c++)m[c]=Math.floor(c*d);for(c=0;c<n;c++){h=Math.floor(c*f)*p;for(l=0;l<i;l++){u=h+m[l];o[g++]=e[u]}}return o}function l({xref:e,res:t,image:a,isInline:s=!1,smask:o=null,mask:h=null,isMask:u=!1,pdfFunctionFactory:d}){this.image=a;var f=a.dict;const g=f.get("Filter");if((0,i.isName)(g))switch(g.name){case"JPXDecode":var m=new c.JpxImage;m.parseImageProperties(a.stream);a.stream.reset();a.width=m.width;a.height=m.height;a.bitsPerComponent=m.bitsPerComponent;a.numComps=m.componentsCount;break;case"JBIG2Decode":a.bitsPerComponent=1;a.numComps=1}let p=f.get("Width","W"),b=f.get("Height","H");if(Number.isInteger(a.width)&&a.width>0&&Number.isInteger(a.height)&&a.height>0&&(a.width!==p||a.height!==b)){(0,r.warn)("PDFImage - using the Width/Height of the image data, rather than the image dictionary.");p=a.width;b=a.height}if(p<1||b<1)throw new r.FormatError(`Invalid image width: ${p} or height: ${b}`);this.width=p;this.height=b;this.interpolate=f.get("Interpolate","I")||!1;this.imageMask=f.get("ImageMask","IM")||!1;this.matte=f.get("Matte")||!1;var y=a.bitsPerComponent;if(!y&&!(y=f.get("BitsPerComponent","BPC"))){if(!this.imageMask)throw new r.FormatError(`Bits per component missing in image: ${this.imageMask}`);y=1}this.bpc=y;if(!this.imageMask){var v=f.get("ColorSpace","CS");if(!v){(0,r.info)("JPX images (which do not require color spaces)");switch(a.numComps){case 1:v=i.Name.get("DeviceGray");break;case 3:v=i.Name.get("DeviceRGB");break;case 4:v=i.Name.get("DeviceCMYK");break;default:throw new Error(`JPX images with ${a.numComps} `+"color components not supported.")}}const o=s?t:null;this.colorSpace=n.ColorSpace.parse(v,e,o,d);this.numComps=this.colorSpace.numComps}this.decode=f.getArray("Decode","D");this.needsDecode=!1;if(this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,y)||u&&!n.ColorSpace.isDefaultDecode(this.decode,1))){this.needsDecode=!0;var w=(1<<y)-1;this.decodeCoefficients=[];this.decodeAddends=[];const e=this.colorSpace&&"Indexed"===this.colorSpace.name;for(var k=0,S=0;k<this.decode.length;k+=2,++S){var C=this.decode[k],x=this.decode[k+1];this.decodeCoefficients[S]=e?(x-C)/w:x-C;this.decodeAddends[S]=e?C:w*C}}if(o)this.smask=new l({xref:e,res:t,image:o,isInline:s,pdfFunctionFactory:d});else if(h)if((0,i.isStream)(h)){h.dict.get("ImageMask","IM")?this.mask=new l({xref:e,res:t,image:h,isInline:s,isMask:!0,pdfFunctionFactory:d}):(0,r.warn)("Ignoring /Mask in image without /ImageMask.")}else this.mask=h}l.buildImage=function({handler:t,xref:a,res:n,image:s,isInline:o=!1,nativeDecoder:c=null,pdfFunctionFactory:h}){var u,d,f=e(s,c),g=s.dict.get("SMask"),m=s.dict.get("Mask");if(g){u=e(g,c);d=Promise.resolve(null)}else{u=Promise.resolve(null);if(m)if((0,i.isStream)(m))d=e(m,c);else if(Array.isArray(m))d=Promise.resolve(m);else{(0,r.warn)("Unsupported mask format.");d=Promise.resolve(null)}else d=Promise.resolve(null)}return Promise.all([f,u,d]).then((function([e,t,r]){return new l({xref:a,res:n,image:e,isInline:o,smask:t,mask:r,pdfFunctionFactory:h})}))};l.createMask=function({imgArray:e,width:t,height:a,imageIsFromDecodeStream:r,inverseDecode:i}){var n,s,o=(t+7>>3)*a,c=e.byteLength;if(!r||i&&!(o===c))if(i){(n=new Uint8ClampedArray(o)).set(e);for(s=c;s<o;s++)n[s]=255}else(n=new Uint8ClampedArray(c)).set(e);else n=e;if(i)for(s=0;s<c;s++)n[s]^=255;return{data:n,width:t,height:a}};l.prototype={get drawWidth(){return Math.max(this.width,this.smask&&this.smask.width||0,this.mask&&this.mask.width||0)},get drawHeight(){return Math.max(this.height,this.smask&&this.smask.height||0,this.mask&&this.mask.height||0)},decodeBuffer(e){var a,r,i=this.bpc,n=this.numComps,s=this.decodeAddends,o=this.decodeCoefficients,c=(1<<i)-1;if(1!==i){var l=0;for(a=0,r=this.width*this.height;a<r;a++)for(var h=0;h<n;h++){e[l]=t(e[l],s[h],o[h],c);l++}}else for(a=0,r=e.length;a<r;a++)e[a]=+!e[a]},getComponents(e){var t=this.bpc;if(8===t)return e;var a=this.width,r=this.height,i=this.numComps,n=a*r*i,s=0;let o;o=t<=8?new Uint8Array(n):t<=16?new Uint16Array(n):new Uint32Array(n);var c,l,h=a*i,u=(1<<t)-1,d=0;if(1===t)for(var f,g,m,p=0;p<r;p++){g=d+(-8&h);m=d+h;for(;d<g;){l=e[s++];o[d]=l>>7&1;o[d+1]=l>>6&1;o[d+2]=l>>5&1;o[d+3]=l>>4&1;o[d+4]=l>>3&1;o[d+5]=l>>2&1;o[d+6]=l>>1&1;o[d+7]=1&l;d+=8}if(d<m){l=e[s++];f=128;for(;d<m;){o[d++]=+!!(l&f);f>>=1}}}else{var b=0;l=0;for(d=0,c=n;d<c;++d){if(d%h==0){l=0;b=0}for(;b<t;){l=l<<8|e[s++];b+=8}var y=b-t;let a=l>>y;a<0?a=0:a>u&&(a=u);o[d]=a;l&=(1<<y)-1;b=y}}return o},fillOpacity(e,t,i,n,s){var o,c,h,u,d,f,g=this.smask,m=this.mask;if(g){c=g.width;h=g.height;o=new Uint8ClampedArray(c*h);g.fillGrayBuffer(o);c===t&&h===i||(o=a(o,g.bpc,c,h,t,i))}else if(m)if(m instanceof l){c=m.width;h=m.height;o=new Uint8ClampedArray(c*h);m.numComps=1;m.fillGrayBuffer(o);for(u=0,d=c*h;u<d;++u)o[u]=255-o[u];c===t&&h===i||(o=a(o,m.bpc,c,h,t,i))}else{if(!Array.isArray(m))throw new r.FormatError("Unknown mask format.");o=new Uint8ClampedArray(t*i);var p=this.numComps;for(u=0,d=t*i;u<d;++u){var b=0,y=u*p;for(f=0;f<p;++f){var v=s[y+f],w=2*f;if(v<m[w]||v>m[w+1]){b=255;break}}o[u]=b}}if(o)for(u=0,f=3,d=t*n;u<d;++u,f+=4)e[f]=o[u];else for(u=0,f=3,d=t*n;u<d;++u,f+=4)e[f]=255},undoPreblend(e,t,a){var r=this.smask&&this.smask.matte;if(r)for(var i=this.colorSpace.getRgb(r,0),n=i[0],s=i[1],o=i[2],c=t*a*4,l=0;l<c;l+=4){var h=e[l+3];if(0!==h){var u=255/h;e[l]=(e[l]-n)*u+n;e[l+1]=(e[l+1]-s)*u+s;e[l+2]=(e[l+2]-o)*u+o}else{e[l]=255;e[l+1]=255;e[l+2]=255}}},createImageData(e=!1){var t,a=this.drawWidth,i=this.drawHeight,n={width:a,height:i,kind:0,data:null},c=this.numComps,l=this.width,h=this.height,u=this.bpc,d=l*c*u+7>>3;if(!e){var f;"DeviceGray"===this.colorSpace.name&&1===u?f=r.ImageKind.GRAYSCALE_1BPP:"DeviceRGB"!==this.colorSpace.name||8!==u||this.needsDecode||(f=r.ImageKind.RGB_24BPP);if(f&&!this.smask&&!this.mask&&a===l&&i===h){n.kind=f;t=this.getImageBytes(h*d);if(this.image instanceof s.DecodeStream)n.data=t;else{var g=new Uint8ClampedArray(t.length);g.set(t);n.data=g}if(this.needsDecode){(0,r.assert)(f===r.ImageKind.GRAYSCALE_1BPP,"PDFImage.createImageData: The image must be grayscale.");for(var m=n.data,p=0,b=m.length;p<b;p++)m[p]^=255}return n}if(this.image instanceof o.JpegStream&&!this.smask&&!this.mask){let e=h*d;switch(this.colorSpace.name){case"DeviceGray":e*=3;case"DeviceRGB":case"DeviceCMYK":n.kind=r.ImageKind.RGB_24BPP;n.data=this.getImageBytes(e,a,i,!0);return n}}}var y,v,w=0|(t=this.getImageBytes(h*d)).length/d*i/h,k=this.getComponents(t);if(e||this.smask||this.mask){n.kind=r.ImageKind.RGBA_32BPP;n.data=new Uint8ClampedArray(a*i*4);y=1;v=!0;this.fillOpacity(n.data,a,i,w,k)}else{n.kind=r.ImageKind.RGB_24BPP;n.data=new Uint8ClampedArray(a*i*3);y=0;v=!1}this.needsDecode&&this.decodeBuffer(k);this.colorSpace.fillRgb(n.data,l,h,a,i,w,u,k,y);v&&this.undoPreblend(n.data,a,w);return n},fillGrayBuffer(e){var t=this.numComps;if(1!==t)throw new r.FormatError(`Reading gray scale from a color image: ${t}`);var a,i,n=this.width,s=this.height,o=this.bpc,c=n*t*o+7>>3,l=this.getImageBytes(s*c),h=this.getComponents(l);if(1!==o){this.needsDecode&&this.decodeBuffer(h);i=n*s;var u=255/((1<<o)-1);for(a=0;a<i;++a)e[a]=u*h[a]}else{i=n*s;if(this.needsDecode)for(a=0;a<i;++a)e[a]=h[a]-1&255;else for(a=0;a<i;++a)e[a]=255&-h[a]}},getImageBytes(e,t,a,r=!1){this.image.reset();this.image.drawWidth=t||this.width;this.image.drawHeight=a||this.height;this.image.forceRGB=!!r;return this.image.getBytes(e,!0)}};return l}();t.PDFImage=l},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.isNodeJS=void 0;const r="object"==typeof process&&process+""=="[object process]"&&!process.versions.nw&&!process.versions.electron;t.isNodeJS=r},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.MessageHandler=void 0;var r=a(2);const i=1,n=2,s=1,o=2,c=3,l=4,h=5,u=6,d=7,f=8;function g(e){if("object"!=typeof e||null===e)return e;switch(e.name){case"AbortException":return new r.AbortException(e.message);case"MissingPDFException":return new r.MissingPDFException(e.message);case"UnexpectedResponseException":return new r.UnexpectedResponseException(e.message,e.status);case"UnknownErrorException":return new r.UnknownErrorException(e.message,e.details);default:return new r.UnknownErrorException(e.message,e.toString())}}t.MessageHandler=class{constructor(e,t,a){this.sourceName=e;this.targetName=t;this.comObj=a;this.callbackId=1;this.streamId=1;this.postMessageTransfers=!0;this.streamSinks=Object.create(null);this.streamControllers=Object.create(null);this.callbackCapabilities=Object.create(null);this.actionHandler=Object.create(null);this._onComObjOnMessage=e=>{const t=e.data;if(t.targetName!==this.sourceName)return;if(t.stream){this._processStreamMessage(t);return}if(t.callback){const e=t.callbackId,a=this.callbackCapabilities[e];if(!a)throw new Error(`Cannot resolve callback ${e}`);delete this.callbackCapabilities[e];if(t.callback===i)a.resolve(t.data);else{if(t.callback!==n)throw new Error("Unexpected callback case");a.reject(g(t.reason))}return}const r=this.actionHandler[t.action];if(!r)throw new Error(`Unknown action from worker: ${t.action}`);if(t.callbackId){const e=this.sourceName,s=t.sourceName;new Promise((function(e){e(r(t.data))})).then((function(r){a.postMessage({sourceName:e,targetName:s,callback:i,callbackId:t.callbackId,data:r})}),(function(r){a.postMessage({sourceName:e,targetName:s,callback:n,callbackId:t.callbackId,reason:g(r)})}))}else t.streamId?this._createStreamSink(t):r(t.data)};a.addEventListener("message",this._onComObjOnMessage)}on(e,t){const a=this.actionHandler;if(a[e])throw new Error(`There is already an actionName called "${e}"`);a[e]=t}send(e,t,a){this._postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,data:t},a)}sendWithPromise(e,t,a){const i=this.callbackId++,n=(0,r.createPromiseCapability)();this.callbackCapabilities[i]=n;try{this._postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,callbackId:i,data:t},a)}catch(e){n.reject(e)}return n.promise}sendWithStream(e,t,a,i){const n=this.streamId++,o=this.sourceName,c=this.targetName,l=this.comObj;return new ReadableStream({start:a=>{const s=(0,r.createPromiseCapability)();this.streamControllers[n]={controller:a,startCall:s,pullCall:null,cancelCall:null,isClosed:!1};this._postMessage({sourceName:o,targetName:c,action:e,streamId:n,data:t,desiredSize:a.desiredSize},i);return s.promise},pull:e=>{const t=(0,r.createPromiseCapability)();this.streamControllers[n].pullCall=t;l.postMessage({sourceName:o,targetName:c,stream:u,streamId:n,desiredSize:e.desiredSize});return t.promise},cancel:e=>{(0,r.assert)(e instanceof Error,"cancel must have a valid reason");const t=(0,r.createPromiseCapability)();this.streamControllers[n].cancelCall=t;this.streamControllers[n].isClosed=!0;l.postMessage({sourceName:o,targetName:c,stream:s,streamId:n,reason:g(e)});return t.promise}},a)}_createStreamSink(e){const t=this,a=this.actionHandler[e.action],i=e.streamId,n=this.sourceName,s=e.sourceName,o=this.comObj,u={enqueue(e,a=1,o){if(this.isCancelled)return;const c=this.desiredSize;this.desiredSize-=a;if(c>0&&this.desiredSize<=0){this.sinkCapability=(0,r.createPromiseCapability)();this.ready=this.sinkCapability.promise}t._postMessage({sourceName:n,targetName:s,stream:l,streamId:i,chunk:e},o)},close(){if(!this.isCancelled){this.isCancelled=!0;o.postMessage({sourceName:n,targetName:s,stream:c,streamId:i});delete t.streamSinks[i]}},error(e){(0,r.assert)(e instanceof Error,"error must have a valid reason");if(!this.isCancelled){this.isCancelled=!0;o.postMessage({sourceName:n,targetName:s,stream:h,streamId:i,reason:g(e)})}},sinkCapability:(0,r.createPromiseCapability)(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};u.sinkCapability.resolve();u.ready=u.sinkCapability.promise;this.streamSinks[i]=u;new Promise((function(t){t(a(e.data,u))})).then((function(){o.postMessage({sourceName:n,targetName:s,stream:f,streamId:i,success:!0})}),(function(e){o.postMessage({sourceName:n,targetName:s,stream:f,streamId:i,reason:g(e)})}))}_processStreamMessage(e){const t=e.streamId,a=this.sourceName,i=e.sourceName,n=this.comObj;switch(e.stream){case f:e.success?this.streamControllers[t].startCall.resolve():this.streamControllers[t].startCall.reject(g(e.reason));break;case d:e.success?this.streamControllers[t].pullCall.resolve():this.streamControllers[t].pullCall.reject(g(e.reason));break;case u:if(!this.streamSinks[t]){n.postMessage({sourceName:a,targetName:i,stream:d,streamId:t,success:!0});break}this.streamSinks[t].desiredSize<=0&&e.desiredSize>0&&this.streamSinks[t].sinkCapability.resolve();this.streamSinks[t].desiredSize=e.desiredSize;const{onPull:m}=this.streamSinks[e.streamId];new Promise((function(e){e(m&&m())})).then((function(){n.postMessage({sourceName:a,targetName:i,stream:d,streamId:t,success:!0})}),(function(e){n.postMessage({sourceName:a,targetName:i,stream:d,streamId:t,reason:g(e)})}));break;case l:(0,r.assert)(this.streamControllers[t],"enqueue should have stream controller");if(this.streamControllers[t].isClosed)break;this.streamControllers[t].controller.enqueue(e.chunk);break;case c:(0,r.assert)(this.streamControllers[t],"close should have stream controller");if(this.streamControllers[t].isClosed)break;this.streamControllers[t].isClosed=!0;this.streamControllers[t].controller.close();this._deleteStreamController(t);break;case h:(0,r.assert)(this.streamControllers[t],"error should have stream controller");this.streamControllers[t].controller.error(g(e.reason));this._deleteStreamController(t);break;case o:e.success?this.streamControllers[t].cancelCall.resolve():this.streamControllers[t].cancelCall.reject(g(e.reason));this._deleteStreamController(t);break;case s:if(!this.streamSinks[t])break;const{onCancel:p}=this.streamSinks[e.streamId];new Promise((function(t){t(p&&p(g(e.reason)))})).then((function(){n.postMessage({sourceName:a,targetName:i,stream:o,streamId:t,success:!0})}),(function(e){n.postMessage({sourceName:a,targetName:i,stream:o,streamId:t,reason:g(e)})}));this.streamSinks[t].sinkCapability.reject(g(e.reason));this.streamSinks[t].isCancelled=!0;delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}}async _deleteStreamController(e){await Promise.allSettled([this.streamControllers[e].startCall,this.streamControllers[e].pullCall,this.streamControllers[e].cancelCall].map((function(e){return e&&e.promise})));delete this.streamControllers[e]}_postMessage(e,t){t&&this.postMessageTransfers?this.comObj.postMessage(e,t):this.comObj.postMessage(e)}destroy(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.PDFWorkerStream=void 0;var r=a(2);t.PDFWorkerStream=class{constructor(e){this._msgHandler=e;this._contentLength=null;this._fullRequestReader=null;this._rangeRequestReaders=[]}getFullReader(){(0,r.assert)(!this._fullRequestReader);this._fullRequestReader=new i(this._msgHandler);return this._fullRequestReader}getRangeReader(e,t){const a=new n(e,t,this._msgHandler);this._rangeRequestReaders.push(a);return a}cancelAllRequests(e){this._fullRequestReader&&this._fullRequestReader.cancel(e);this._rangeRequestReaders.slice(0).forEach((function(t){t.cancel(e)}))}};class i{constructor(e){this._msgHandler=e;this.onProgress=null;this._contentLength=null;this._isRangeSupported=!1;this._isStreamingSupported=!1;const t=this._msgHandler.sendWithStream("GetReader");this._reader=t.getReader();this._headersReady=this._msgHandler.sendWithPromise("ReaderHeadersReady").then(e=>{this._isStreamingSupported=e.isStreamingSupported;this._isRangeSupported=e.isRangeSupported;this._contentLength=e.contentLength})}get headersReady(){return this._headersReady}get contentLength(){return this._contentLength}get isStreamingSupported(){return this._isStreamingSupported}get isRangeSupported(){return this._isRangeSupported}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class n{constructor(e,t,a){this._msgHandler=a;this.onProgress=null;const r=this._msgHandler.sendWithStream("GetRangeReader",{begin:e,end:t});this._reader=r.getReader()}get isStreamingSupported(){return!1}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}}])}));
\ No newline at end of file
-- 
cgit v1.2.3-70-g09d2


From c01828308714874589d1f60c33ca59df4c656c0c Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Fri, 30 Aug 2024 22:36:51 -0400
Subject: comparison box cleanup

---
 src/client/views/nodes/ComparisonBox.tsx    | 944 ----------------------------
 src/client/views/nodes/ComparisonBoxNew.tsx | 848 -------------------------
 2 files changed, 1792 deletions(-)
 delete mode 100644 src/client/views/nodes/ComparisonBoxNew.tsx

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 4a0820c95..ffa5acb09 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -847,947 +847,3 @@ Docs.Prototypes.TemplateMap.set(DocumentType.COMPARISON, {
         systemIcon: 'BsLayoutSplit',
     },
 });
-
-// import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-// import { MathJax, MathJaxContext } from 'better-react-mathjax';
-// import { Tooltip } from '@mui/material';
-// import { action, computed, makeObservable, observable, reaction } from 'mobx';
-// import { observer } from 'mobx-react';
-// import * as React from 'react';
-// import { returnFalse, returnNone, returnTrue, setupMoveUpEvents } from '../../../ClientUtils';
-// import { emptyFunction } from '../../../Utils';
-// import { Doc, Opt } from '../../../fields/Doc';
-// import { DocData } from '../../../fields/DocSymbols';
-// import { RichTextField } from '../../../fields/RichTextField';
-// import { DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
-// import { GPTCallType, gptAPICall, gptImageLabel } from '../../apis/gpt/GPT';
-// import '../pdf/GPTPopup/GPTPopup.scss';
-// import { DocUtils } from '../../documents/DocUtils';
-// import { DocumentType } from '../../documents/DocumentTypes';
-// import { Docs } from '../../documents/Documents';
-// import { DragManager } from '../../util/DragManager';
-// import { dropActionType } from '../../util/DropActionTypes';
-// import { undoable } from '../../util/UndoManager';
-// import { ViewBoxAnnotatableComponent } from '../DocComponent';
-// import { PinDocView, PinProps } from '../PinFuncs';
-// import { StyleProp } from '../StyleProp';
-// import './ComparisonBox.scss';
-// import { DocumentView } from './DocumentView';
-// import { FieldView, FieldViewProps } from './FieldView';
-// import { FormattedTextBox } from './formattedText/FormattedTextBox';
-// import ReactLoading from 'react-loading';
-
-// import { ContextMenu } from '../ContextMenu';
-// import { ContextMenuProps } from '../ContextMenuItem';
-// import { tickStep } from 'd3';
-// import { CollectionCarouselView } from '../collections/CollectionCarouselView';
-// import { FollowLinkScript } from '../../documents/DocUtils';
-// import { schema } from '../nodes/formattedText/schema_rts';
-// import { Id } from '../../../fields/FieldSymbols';
-// import axios from 'axios';
-// import ReactMarkdown from 'react-markdown';
-// import { WebField, nullAudio } from '../../../fields/URLField';
-
-// const API_URL = 'https://api.unsplash.com/search/photos';
-// @observer
-// export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
-//     public static LayoutString(fieldKey: string) {
-//         return FieldView.LayoutString(ComparisonBox, fieldKey);
-//     }
-//     private _disposers: (DragManager.DragDropDisposer | undefined)[] = [undefined, undefined];
-//     constructor(props: FieldViewProps) {
-//         super(props);
-//         makeObservable(this);
-//         this.setListening();
-//     }
-
-//     @observable private _inputValue = '';
-//     @observable private _outputValue = '';
-//     @observable private _loading = false;
-//     @observable private _isEmpty = false;
-//     @observable private _audio: Doc = Docs.Create.TextDocument('');
-//     @observable childActive = false;
-//     @observable _yRelativeToTop: boolean = true;
-//     @observable _animating = '';
-//     @observable mathJaxConfig = {
-//         loader: { load: ['input/asciimath'] },
-//     };
-//     private _ref = React.createRef<HTMLDivElement>();
-
-//     get revealOp() {
-//         return this.layoutDoc[`_${this._props.fieldKey}_revealOp`];
-//     }
-//     get clipHeightKey() {
-//         return '_' + this._props.fieldKey + '_clipHeight';
-//     }
-
-//     get clipWidthKey() {
-//         return '_' + this._props.fieldKey + '_clipWidth';
-//     }
-
-//     @computed get clipWidth() {
-//         return NumCast(this.layoutDoc[this.clipWidthKey], 50);
-//     }
-
-//     @computed get clipHeight() {
-//         return NumCast(this.layoutDoc[this.clipHeightKey], 200);
-//     }
-
-//     @computed get overlayAlternateIcon() {
-//         const usepath = this.layoutDoc[`_${this._props.fieldKey}_usePath`];
-//         return (
-//             <Tooltip title={<div className="dash-tooltip">flip</div>}>
-//                 <div
-//                     className="formattedTextBox-alternateButton"
-//                     onPointerDown={e =>
-//                         setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => {
-//                             if (!this.layoutDoc[`_${this._props.fieldKey}_revealOp`] || this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'flip') {
-//                                 this.flipFlashcard();
-//                             }
-//                         })
-//                     }
-//                     style={{
-//                         background: this.revealOp === 'hover' ? 'gray' : usepath === 'alternate' ? 'white' : 'black',
-//                         color: this.revealOp === 'hover' ? 'black' : usepath === 'alternate' ? 'black' : 'white',
-//                         display: 'inline-block',
-//                     }}>
-//                     <div key="alternate" className="formattedTextBox-flip">
-//                         <FontAwesomeIcon icon="turn-up" size="1x" />
-//                     </div>
-//                 </div>
-//             </Tooltip>
-//         );
-//     }
-
-//     @computed get flashcardMenu() {
-//         return (
-//             <div>
-//                 <Tooltip
-//                     title={
-//                         this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? (
-//                             <div className="dash-tooltip">Flip to front side to use GPT</div>
-//                         ) : (
-//                             <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>
-//                         )
-//                     }>
-//                     <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={e => (!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? this.findImageTags() : null)}>
-//                         <FontAwesomeIcon icon="lightbulb" size="xl" />
-//                     </div>
-//                 </Tooltip>
-//                 {DocCast(this.Document.embedContainer).type_collection === 'carousel' ? null : (
-//                     <div>
-//                         <Tooltip title={<div>Create a flashcard pile</div>}>
-//                             <div style={{ position: 'absolute', bottom: '3px', right: '74px', cursor: 'pointer' }} onPointerDown={e => this.createFlashcardPile([this.Document], false)}>
-//                                 <FontAwesomeIcon icon="folder-plus" size="xl" />
-//                             </div>
-//                         </Tooltip>
-//                         <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
-//                             <div style={{ position: 'absolute', bottom: '3px', right: '104px', cursor: 'pointer' }} onClick={e => this.gptFlashcardPile()}>
-//                                 <FontAwesomeIcon icon="layer-group" size="xl" />
-//                             </div>
-//                         </Tooltip>
-//                     </div>
-//                 )}
-//                 <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
-//                     <div style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }} onClick={e => this.handleHover()}>
-//                         <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="hand-point-up" size="xl" />
-//                     </div>
-//                 </Tooltip>
-//             </div>
-//         );
-//     }
-
-//     componentDidMount() {
-//         this._props.setContentViewBox?.(this);
-//         reaction(
-//             () => this._props.isSelected(), // when this reaction should update
-//             selected => !selected && (this.childActive = false) // what it should update to
-//         );
-//     }
-//     protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
-//         this._disposers[disposerId]?.();
-//         // this.childActive = true;
-//         if (ele) {
-//             this._disposers[disposerId] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
-//         }
-//     };
-
-//     private internalDrop = undoable((e: Event, dropEvent: DragManager.DropEvent, fieldKey: string) => {
-//         if (dropEvent.complete.docDragData) {
-//             const { droppedDocuments } = dropEvent.complete.docDragData;
-//             const added = dropEvent.complete.docDragData.moveDocument?.(droppedDocuments, this.Document, (doc: Doc | Doc[]) => this.addDoc(toList(doc).lastElement(), fieldKey));
-//             Doc.SetContainer(droppedDocuments.lastElement(), this.dataDoc);
-//             !added && e.preventDefault();
-//             e.stopPropagation(); // prevent parent Doc from registering new position so that it snaps back into place
-//             // this.childActive = false;
-//             return added;
-//         }
-//         return undefined;
-//     }, 'internal drop');
-
-//     private registerSliding = (e: React.PointerEvent<HTMLDivElement>, targetWidth: number) => {
-//         if (e.button !== 2) {
-//             setupMoveUpEvents(
-//                 this,
-//                 e,
-//                 this.onPointerMove,
-//                 emptyFunction,
-//                 action((moveEv, doubleTap) => {
-//                     if (doubleTap) {
-//                         this.childActive = true;
-//                         if (!this.dataDoc[this.fieldKey + '_1'] && !this.dataDoc[this.fieldKey]) this.dataDoc[this.fieldKey + '_1'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
-//                         if (!this.dataDoc[this.fieldKey + '_2'] && !this.dataDoc[this.fieldKey + '_alternate']) this.dataDoc[this.fieldKey + '_2'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
-//                     }
-//                 }),
-//                 false,
-//                 undefined,
-//                 action(() => {
-//                     if (this.childActive) return;
-//                     this._animating = 'all 200ms';
-//                     // on click, animate slider movement to the targetWidth
-//                     this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
-//                     // this.layoutDoc[this.clipHeightKey] = (targetWidth * 100) / this._props.PanelHeight();
-
-//                     setTimeout(
-//                         action(() => {
-//                             this._animating = '';
-//                         }),
-//                         200
-//                     );
-//                 })
-//             );
-//         }
-//     };
-
-//     @action handleHover = () => {
-//         if (this.revealOp === 'hover') {
-//             this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip';
-//             this.Document.forceActive = false;
-//         } else {
-//             this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover';
-//             this.Document.forceActive = true;
-//         }
-//     };
-
-//     @action handleRenderClick = () => {
-//         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = undefined;
-//     };
-
-//     @action
-//     private onPointerMove = ({ movementX }: PointerEvent) => {
-//         const width = movementX * this.ScreenToLocalBoxXf().Scale + (this.clipWidth / 100) * this._props.PanelWidth();
-//         if (width && width > 5 && width < this._props.PanelWidth()) {
-//             this.layoutDoc[this.clipWidthKey] = (width * 100) / this._props.PanelWidth();
-//         }
-//         return false;
-//     };
-
-//     @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
-//         this._inputValue = e.target.value;
-//         console.log(this._inputValue);
-//     };
-
-//     @action activateContent = () => {
-//         this.childActive = true;
-//     };
-
-//     @action handleRenderGPTClick = async () => {
-//         console.log('Phonetic transcription: ' + DocCast(this.Document.audio).phoneticTranscription);
-//         const phonTrans = DocCast(this.Document.audio).phoneticTranscription;
-//         if (phonTrans) {
-//             this._inputValue = StrCast(phonTrans);
-//             console.log('INPUT:' + this._inputValue);
-//             this.askGPTPhonemes(this._inputValue);
-//         } else if (this._inputValue)
-//             // if (this._inputValue)
-//             this.askGPT(GPTCallType.QUIZ);
-//         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = 'alternate';
-//         this._outputValue = '';
-//     };
-
-//     askGPTPhonemes = async (phonemes: string) => {
-//         const sentence = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
-//         const phon = 'w ʌ ɪ z j ɔː ɹ n e ɪ m ';
-//         const phon2 = 'h ʌ ɛ r j ʌ t ʌ d eɪ';
-//         const phon6 = 'huː ɑɹ juː tədeɪ';
-//         const phon3 = 'ʃ eɪ oʊ s i ʃ oʊ z b aɪ ð ə s iː ʃ oʊ';
-//         const phon4 = 'kamo estas hɔi';
-//         const phon5 = 'la s e n a l';
-//         console.log('REG' + this.recognition.lang);
-//         const promptEng =
-//             'Consider all possible phonetic transcriptions of the intended sentence "' +
-//             sentence +
-//             '" that is standard in American speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
-//             phon6 +
-//             '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart. The goal is to be understood, not sound like a native speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "ceeffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
-//         const promptSpa =
-//             'Consider all possible phonetic transcriptions of the intended sentence "' +
-//             'como estás hoy' +
-//             '" that is standard in Spanish speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
-//             phon4 +
-//             '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in Spanish speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound.  Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart; say good job if it would be understood by a native Spanish speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Identify "ɔi" sounds like "oy". Ignore accents and do not say anything to the user about this.';
-//         const promptAll =
-//             'Consider all possible phonetic transcriptions of the intended sentence "' +
-//             sentence +
-//             '" that is standard in ' +
-//             this.convertAbr() +
-//             ' speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
-//             phonemes +
-//             '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in ' +
-//             this.convertAbr() +
-//             ' speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "cawffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
-
-//         switch (this.recognition.lang) {
-//             case 'en-US':
-//                 console.log('English');
-//                 this._outputValue = await gptAPICall(promptEng, GPTCallType.PRONUNCIATION);
-//                 break;
-//             case 'es-ES':
-//                 console.log('Spanish');
-//                 this._outputValue = await gptAPICall(promptSpa, GPTCallType.PRONUNCIATION);
-//                 break;
-//             default:
-//                 console.log('All');
-//                 this._outputValue = await gptAPICall(promptAll, GPTCallType.PRONUNCIATION);
-//                 break;
-//         }
-//     };
-
-//     /**
-//      * Push audio information to python rest api
-//      */
-//     pushInfo = async () => {
-//         const formData = new FormData();
-
-//         console.log(DocCast(this._audio).dataDoc);
-//         const audio = {
-//             file: this._audio.url,
-//         };
-//         const response = await axios.post('http://localhost:105/recognize/', audio, {
-//             headers: {
-//                 'Content-Type': 'application/json',
-//             },
-//         });
-//         this.Document.phoneticTranscription = response.data['transcription'];
-//         console.log('RESPONSE: ' + response.data['transcription']);
-//     };
-
-//     /**
-//      * Get images from unsplash api to go on flashcard stack
-//      */
-//     fetchImages = async (selection: string) => {
-//         try {
-//             const { data } = await axios.get(`${API_URL}?query=${selection}&page=1&per_page=${1}&client_id=Q4zruu6k6lum2kExiGhLNBJIgXDxD6NNj0SRHH_XXU0`);
-//             console.log(data.results);
-//             const imageSnapshot = Docs.Create.ImageDocument(data.results[0].urls.small, {
-//                 _nativeWidth: Doc.NativeWidth(this.layoutDoc),
-//                 _nativeHeight: Doc.NativeHeight(this.layoutDoc),
-//                 x: NumCast(this.layoutDoc.x),
-//                 y: NumCast(this.layoutDoc.y),
-//                 onClick: FollowLinkScript(),
-//                 _width: 150,
-//                 _height: 150,
-//                 title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
-//             });
-//             imageSnapshot['x'] = this.layoutDoc['x'];
-//             imageSnapshot['y'] = this.layoutDoc['y'];
-//             return imageSnapshot;
-//         } catch (error) {
-//             console.log(error);
-//         }
-//     };
-
-//     getAnchor = (addAsAnnotation: boolean, pinProps?: PinProps) => {
-//         const anchor = Docs.Create.ConfigDocument({
-//             title: 'CompareAnchor:' + this.Document.title,
-//             // set presentation timing properties for restoring view
-//             presentation_transition: 1000,
-//             annotationOn: this.Document,
-//         });
-//         if (anchor) {
-//             if (!addAsAnnotation) anchor.backgroundColor = 'transparent';
-//             /* addAsAnnotation && */ this.addDocument(anchor);
-//             PinDocView(anchor, { pinDocLayout: pinProps?.pinDocLayout, pinData: { ...(pinProps?.pinData ?? {}), clippable: true } }, this.Document);
-//             return anchor;
-//         }
-//         return this.Document;
-//     };
-
-//     clearDoc = undoable((fieldKey: string) => {
-//         this.dataDoc[fieldKey] = undefined;
-//         this._isEmpty = true;
-//     }, 'clear doc');
-
-//     moveDoc = (doc: Doc, addDocument: (document: Doc | Doc[]) => boolean, which: string) => this.remDoc(doc, which) && addDocument(doc);
-//     addDoc = (doc: Doc, which: string) => {
-//         if (this.dataDoc[which] && !this._isEmpty) return false;
-//         this.dataDoc[which] = doc;
-//         return true;
-//     };
-//     remDoc = (doc: Doc, which: string) => {
-//         if (this.dataDoc[which] === doc) {
-//             this._isEmpty = true;
-//             // this.dataDoc[which] = 'empty';
-//             console.log('HEREEEE');
-//             this.dataDoc[which] = undefined;
-//             return true;
-//         }
-//         console.log('FALSE');
-//         return false;
-//     };
-
-//     closeDown = (e: React.PointerEvent, which: string) => {
-//         setupMoveUpEvents(
-//             this,
-//             e,
-//             moveEv => {
-//                 const de = new DragManager.DocumentDragData([DocCast(this.dataDoc[which])], dropActionType.move);
-//                 de.moveDocument = (doc: Doc | Doc[], targetCollection: Doc | undefined, addDocument: (doc: Doc | Doc[]) => boolean): boolean => addDocument(doc);
-//                 de.canEmbed = true;
-//                 DragManager.StartDocumentDrag([this._closeRef.current!], de, moveEv.clientX, moveEv.clientY);
-//                 return true;
-//             },
-//             emptyFunction,
-//             () => this.clearDoc(which)
-//         );
-//     };
-//     docStyleProvider = (doc: Opt<Doc>, props: Opt<FieldViewProps>, property: string): any => {
-//         if (property === StyleProp.PointerEvents) return 'none';
-//         return this._props.styleProvider?.(doc, props, property);
-//     };
-//     moveDoc1 = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: any) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.fieldKey + '_1'), true);
-//     moveDoc2 = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: any) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.fieldKey + '_2'), true);
-//     remDoc1 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_1'), true);
-//     remDoc2 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_2'), true);
-
-//     /**
-//      * Tests for whether a comparison box slot (ie, before or after) has renderable text content.
-//      * If it does, render a FormattedTextBox for that slot that references the comparisonBox's slot field
-//      * @param whichSlot field key for start or end slot
-//      * @returns a JSX layout string if a text field is found, othwerise undefined
-//      */
-//     testForTextFields = (whichSlot: string) => {
-//         const slotData = Doc.Get(this.dataDoc, whichSlot, true);
-//         const slotHasText = slotData instanceof RichTextField || typeof slotData === 'string';
-//         const subjectText = RTFCast(this.Document[this.fieldKey])?.Text.trim();
-//         const altText = RTFCast(this.Document[this.fieldKey + '_alternate'])?.Text.trim();
-//         const layoutTemplateString =
-//             slotHasText ? FormattedTextBox.LayoutString(whichSlot):
-//             whichSlot.endsWith('1') ? (subjectText !== undefined ? FormattedTextBox.LayoutString(this.fieldKey) : undefined) :
-//                                        altText !== undefined     ? FormattedTextBox.LayoutString(this.fieldKey + '_alternate'): undefined; // prettier-ignore
-
-//         // A bit hacky to try out the concept of using GPT to fill in flashcards
-//         //   If the second slot doesn't have anything in it, but the fieldKey slot has text (e.g., this.text is a string)
-//         // and the fieldKey + "_alternate" has text that includes a GPT query (indicated by (( && )) ) that is parameterized (optionally) by the fieldKey text (this) or other metadata (this.<field>).
-//         // eg., this.text_alternate is
-//         //     "((Provide a one sentence definition for (this) that doesn't use any word in (this.excludeWords) ))"
-//         //     where (this) is replaced by the text in the fieldKey slot abd this.excludeWords is repalced by the conetnts of the excludeWords field
-//         // The GPT call will put the "answer"  in the second slot of the comparison (eg., text_2)
-//         if (whichSlot.endsWith('2') && !layoutTemplateString?.includes(whichSlot)) {
-//             const queryText = altText?.replace('(this)', subjectText); // TODO: this should be done in Doc.setField but it doesn't know about the fieldKey ...
-//             if (queryText?.match(/\(\(.*\)\)/)) {
-//                 Doc.SetField(this.Document, whichSlot, ':=' + queryText, false); // make the second slot be a computed field on the data doc that calls ChatGpt
-//             }
-//         }
-//         return layoutTemplateString;
-//     };
-
-//     _closeRef = React.createRef<HTMLDivElement>();
-
-//     createFlashcardPile(collectionArr: Doc[], gpt: boolean) {
-//         const newCol = Docs.Create.CarouselDocument(collectionArr, {
-//             _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250) + 50,
-//             _height: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 200) + 50,
-//             _layout_fitWidth: false,
-//             _layout_autoHeight: true,
-//         });
-//         newCol['x'] = this.layoutDoc['x'];
-//         newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
-//         newCol.type_collection = 'carousel';
-//         // console.log(newCol.data);
-
-//         if (gpt) {
-//             this._props.DocumentView?.()._props.addDocument?.(newCol);
-//             this._props.removeDocument?.(this.Document);
-//         } else {
-//             this._props.addDocument?.(newCol);
-//             this._props.removeDocument?.(this.Document);
-//             this.Document.embedContainer = newCol;
-//         }
-//     }
-
-//     gptFlashcardPile = async () => {
-//         var text = await this.askGPT(GPTCallType.STACK);
-//         console.log(text);
-
-//         var senArr = text?.split('Question: ');
-//         var collectionArr: Doc[] = [];
-//         for (let i = 1; i < senArr?.length!; i++) {
-//             const newDoc = Docs.Create.ComparisonDocument(senArr![i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
-
-//             if (StrCast(senArr![i]).includes('Keyword: ')) {
-//                 const question = StrCast(senArr![i]).split('Keyword: ');
-//                 const img = await this.fetchImages(question[1]);
-//                 // newDoc['image'] = img;
-//                 // const newDoc = Docs.Create.TextDocument(dataSplit[1]);
-//                 const textSide1 = question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0];
-//                 const textDoc1 = Docs.Create.TextDocument(question[0]);
-//                 const rtfiel = new RichTextField(
-//                     JSON.stringify({
-//                         doc: {
-//                             type: 'doc',
-//                             content: [
-//                                 {
-//                                     type: 'paragraph',
-//                                     attrs: { align: null, color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
-//                                     content: [
-//                                         { type: 'text', text: question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0] },
-//                                         { type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: img![Id] } },
-//                                     ],
-//                                 },
-//                             ],
-//                         },
-//                         selection: { type: 'text', anchor: 2, head: 2 },
-//                     }),
-//                     textSide1
-//                 );
-
-//                 textDoc1[DocData].text = rtfiel;
-//                 DocCast(newDoc)[DocData][this.fieldKey + '_1'] = textDoc1;
-
-//                 DocCast(newDoc)[DocData][this.fieldKey + '_0'] = Docs.Create.TextDocument(question[0].includes('Answer: ') ? question[0].split('Answer: ')[1] : question[1]);
-//                 // Doc.AddToMyOverlay(img!);
-//             }
-
-//             collectionArr.push(newDoc);
-//         }
-//         this.createFlashcardPile(collectionArr, true);
-//     };
-
-//     /**
-//      * Flips a flashcard to the alternate side for the user to view.
-//      */
-//     flipFlashcard = () => {
-//         const usePath = this.layoutDoc[`_${this._props.fieldKey}_usePath`];
-//         this.layoutDoc[`_${this._props.fieldKey}_usePath`] = usePath === undefined ? 'alternate' : undefined;
-//     };
-
-//     /**
-//      * Changes the view option to hover for a flashcard.
-//      */
-//     hoverFlip = (side: string | undefined) => {
-//         if (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] === 'hover') this.layoutDoc[`_${this._props.fieldKey}_usePath`] = side;
-//     };
-
-//     animateRes = (resIndex: number, newText: string, callType: GPTCallType) => {
-//         if (resIndex < newText.length) {
-//             // const marks = this._editorView?.state.storedMarks ?? [];
-//             switch (callType) {
-//                 case GPTCallType.CHATCARD:
-//                     DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text += newText[resIndex];
-//                     break;
-//                 case GPTCallType.QUIZ:
-//                     this._outputValue += newText[resIndex];
-//                     break;
-//                 default:
-//                     return;
-//             }
-
-//             // this._editorView?.dispatch(this._editorView?.state.tr.insertText(newText[resIndex]).setStoredMarks(this._outputValue));
-//             setTimeout(() => this.animateRes(resIndex + 1, newText, callType), 20);
-//         }
-//     };
-
-//     /**
-//      * Calls the GPT model to create QuizCards. Evaluates how similar the user's response is to the alternate
-//      * side of the flashcard.
-//      */
-//     askGPT = async (callType: GPTCallType): Promise<string | undefined> => {
-//         const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
-//         const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
-//         const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
-//         this._loading = true;
-//         const doc = DocCast(this.dataDoc[this.props.fieldKey + '_0']);
-//         if (callType == GPTCallType.CHATCARD) {
-//             if (StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '') {
-//                 this._loading = false;
-//                 return;
-//             }
-//             this.flipFlashcard();
-//         }
-//         try {
-//             console.log(queryText);
-//             const res = await gptAPICall(callType == GPTCallType.QUIZ ? queryText : questionText, callType);
-//             if (!res) {
-//                 console.error('GPT call failed');
-//                 return;
-//             }
-//             // this.animateRes(0, res, callType);
-//             if (callType == GPTCallType.CHATCARD) {
-//                 DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
-//                 // this.flipFlashcard();
-//             } else if (callType == GPTCallType.QUIZ) {
-//                 console.log(this._inputValue);
-//                 this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
-//             }
-//             // DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
-//             // this._outputValue = res;
-//             else if (callType === GPTCallType.FLASHCARD) {
-//                 // console.log(res);
-//                 this._loading = false;
-//                 return res;
-//             } else if (callType === GPTCallType.STACK) {
-//             }
-//             this._loading = false;
-//             return res;
-//             // console.log(res);
-//         } catch (err) {
-//             console.error('GPT call failed');
-//         }
-//         this._loading = false;
-//     };
-//     layoutWidth = () => NumCast(this.layoutDoc.width, 200);
-//     layoutHeight = () => NumCast(this.layoutDoc.height, 200);
-
-//     // specificMenu = (): void => {
-//     //     const cm = ContextMenu.Instance;
-//     //     cm.addItem({ description: 'Create an Answer on the Back', event: () => this.askGPT(GPTCallType.CHATCARD), icon: 'pencil' });
-//     // };
-
-//     findImageTags = async () => {
-//         // const d = DocCast(this.dataDoc[this.props.fieldKey + '_0']);
-//         // const copy = Doc.MakeCopy(this.Document, true);
-//         const c = this.DocumentView?.().ContentDiv!.getElementsByTagName('img');
-//         // this.ProseRef?.getElementsByTagName('img');
-//         if (c?.length === 0) await this.askGPT(GPTCallType.CHATCARD);
-//         if (c) {
-//             this._loading = true;
-//             for (let i of c) {
-//                 console.log(i);
-//                 if (i.className !== 'ProseMirror-separator') await this.getImageDesc(i.src);
-//             }
-//             this._loading = false;
-//             // this.flipFlashcard();
-//         }
-//         // console.log('HI' + this.ProseRef?.getElementsByTagName('img'));
-//     };
-
-//     static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
-//         try {
-//             const response = await fetch(imageUrl);
-//             const blob = await response.blob();
-
-//             return new Promise((resolve, reject) => {
-//                 const reader = new FileReader();
-//                 reader.readAsDataURL(blob);
-//                 reader.onloadend = () => resolve(reader.result as string);
-//                 reader.onerror = error => reject(error);
-//             });
-//         } catch (error) {
-//             console.error('Error:', error);
-//             throw error;
-//         }
-//     };
-
-//     getImageDesc = async (u: string) => {
-//         try {
-//             const hrefBase64 = await ComparisonBox.imageUrlToBase64(u);
-//             const response = await gptImageLabel(hrefBase64, 'Answer the following question as a short flashcard response. Do not include a label.' + (this.dataDoc.text as RichTextField)?.Text);
-
-//             DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = response;
-//         } catch (error) {
-//             console.log('Error');
-//         }
-//     };
-
-//     @observable private _listening = false;
-//     @observable transcriptElement = '';
-//     SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
-//     @observable recognition = new this.SpeechRecognition();
-
-//     handleResult = (e: SpeechRecognitionEvent) => {
-//         let interimTranscript = '';
-//         let finalTranscript = '';
-//         for (let i = e.resultIndex; i < e.results.length; i++) {
-//             const transcript = e.results[i][0].transcript;
-//             if (e.results[i].isFinal) {
-//                 finalTranscript += transcript;
-//             } else {
-//                 interimTranscript += transcript;
-//             }
-//         }
-//         console.log(interimTranscript);
-//         this._inputValue += finalTranscript;
-//     };
-
-//     setListening = () => {
-//         const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
-//         if (SpeechRecognition) {
-//             this.recognition.continuous = true;
-//             this.recognition.interimResults = true;
-//             this.recognition.lang = 'en-US';
-//             this.recognition.onresult = this.handleResult.bind(this);
-//         }
-//         ContextMenu.Instance.setLangIndex(0);
-//     };
-
-//     setLanguage = (e: React.MouseEvent, language: string, ind: number) => {
-//         this.recognition.lang = language;
-//         ContextMenu.Instance.setLangIndex(ind);
-//     };
-
-//     startListening = () => {
-//         this.recognition.start();
-//         this._listening = true;
-//     };
-
-//     stopListening = () => {
-//         this.recognition.stop();
-//         this._listening = false;
-//     };
-
-//     convertAbr = () => {
-//         switch (this.recognition.lang) {
-//             case 'en-US':
-//                 return 'English';
-//             case 'es-ES':
-//                 return 'Spanish';
-//             case 'fr-FR':
-//                 return 'French';
-//             case 'it-IT':
-//                 return 'Italian';
-//             case 'zh-CH':
-//                 return 'Mandarin Chinese';
-//             case 'ja':
-//                 return 'Japanese';
-//             default:
-//                 return 'Korean';
-//         }
-//     };
-
-//     openContextMenu = (x: number, y: number, evalu: boolean) => {
-//         ContextMenu.Instance.clearItems();
-//         ContextMenu.Instance.addItem({ description: 'English', event: e => this.setLanguage(e, 'en-US', 0) }); //prettier-ignore
-//         ContextMenu.Instance.addItem({ description: 'Spanish', event: e => this.setLanguage(e, 'es-ES', 1 )}); //prettier-ignore
-//         ContextMenu.Instance.addItem({ description: 'French', event: e => this.setLanguage(e, 'fr-FR', 2) }); //prettier-ignore
-//         ContextMenu.Instance.addItem({ description: 'Italian', event: e => this.setLanguage(e, 'it-IT', 3) }); //prettier-ignore
-//         if (!evalu) ContextMenu.Instance.addItem({ description: 'Mandarin Chinese', event: e => this.setLanguage(e, 'zh-CH', 4) }); //prettier-ignore
-//         ContextMenu.Instance.addItem({ description: 'Japanese', event: e => this.setLanguage(e, 'ja', 5) }); //prettier-ignore
-//         ContextMenu.Instance.addItem({ description: 'Korean', event: e => this.setLanguage(e, 'ko', 6) }); //prettier-ignore
-//         ContextMenu.Instance.displayMenu(x, y);
-//     };
-
-//     evaluatePronunciation = () => {
-//         const newAudio = Docs.Create.AudioDocument(nullAudio, { _width: 200, _height: 100 });
-//         this.Document.audio = newAudio[DocData];
-//         // DocCast(this.Document.embedContainer)()._props.addDocument?.(newAudio);
-//         this._props.DocumentView?.()._props.addDocument?.(newAudio);
-//         // Doc.AddToMyOverlay(newAudio);
-//     };
-
-//     render() {
-//         const clearButton = (which: string) => (
-//             <Tooltip title={<div className="dash-tooltip">remove</div>}>
-//                 <div
-//                     // style={{ position: 'relative', top: '0px', left: '10px' }}
-//                     ref={this._closeRef}
-//                     className={`clear-button ${which}`}
-//                     onPointerDown={e => this.closeDown(e, which)} // prevent triggering slider movement in registerSliding
-//                 >
-//                     <FontAwesomeIcon className={`clear-button ${which}`} icon="times" size="xs" />
-//                 </div>
-//             </Tooltip>
-//         );
-//         const displayDoc = (whichSlot: string) => {
-//             const whichDoc = DocCast(this.dataDoc[whichSlot]);
-//             const targetDoc = DocCast(whichDoc?.annotationOn, whichDoc);
-//             const layoutString = targetDoc ? '' : this.testForTextFields(whichSlot);
-//             // whichDoc['backgroundColor'] = this.layoutDoc['backgroundColor'];
-
-//             return targetDoc || layoutString ? (
-//                 // <MathJaxContext config={this.mathJaxConfig}>
-//                 //     <MathJax>
-//                 <>
-//                     <DocumentView
-//                         // eslint-disable-next-line react/jsx-props-no-spreading
-//                         {...this._props}
-//                         ignoreUsePath={layoutString ? true : undefined}
-//                         renderDepth={this.props.renderDepth + 1}
-//                         LayoutTemplateString={layoutString}
-//                         Document={layoutString ? this.Document : targetDoc}
-//                         containerViewPath={this.DocumentView?.().docViewPath}
-//                         moveDocument={whichSlot.endsWith('1') ? this.moveDoc1 : this.moveDoc2}
-//                         removeDocument={whichSlot.endsWith('1') ? this.remDoc1 : this.remDoc2}
-//                         NativeWidth={this.layoutWidth}
-//                         NativeHeight={this.layoutHeight}
-//                         isContentActive={() => this.childActive}
-//                         isDocumentActive={returnFalse}
-//                         dontSelect={returnTrue}
-//                         whenChildContentsActiveChanged={this.whenChildContentsActiveChanged}
-//                         styleProvider={this.childActive ? this._props.styleProvider : this.docStyleProvider}
-//                         hideLinkButton
-//                         pointerEvents={this.childActive ? undefined : returnNone}
-//                     />
-//                     {/* </MathJax> */}
-//                     {/* <div style={{ position: 'absolute', top: '-5px', left: '2px' }}>{layoutString ? null : clearButton(whichSlot)}</div> */}
-//                     {/* </MathJaxContext> // placeholder image if doc is missingleft: `${NumCast(this.layoutDoc.width, 200) - 33}px` */}
-//                 </>
-//             ) : (
-//                 <div className="placeholder">
-//                     <FontAwesomeIcon className="upload-icon" icon="cloud-upload-alt" size="lg" />
-//                 </div>
-//             );
-//         };
-//         const displayBox = (which: string, index: number, cover: number) => (
-//             <div
-//                 className={`${index === 0 ? 'before' : 'after'}Box-cont`}
-//                 key={which}
-//                 style={{ width: this._props.PanelWidth() }}
-//                 onPointerDown={e => {
-//                     this.registerSliding(e, cover);
-//                     this.activateContent();
-//                 }}
-//                 ref={ele => this.createDropTarget(ele, which, index)}>
-//                 {!this._isEmpty ? displayDoc(which) : null}
-//                 {/* {this.dataDoc[this.fieldKey + '_0'] !== 'empty' ? displayDoc(which) : null} */}
-//             </div>
-//         );
-
-//         if (this.Document._layout_isFlashcard) {
-//             const side = this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 1 : 0;
-
-//             // add text box to each side when comparison box is first created
-//             // (!this.dataDoc[this.fieldKey + '_0'] && this.dataDoc[this._props.fieldKey + '_0'] !== 'empty')
-//             if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
-//                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-//                 const newDoc = Docs.Create.TextDocument(dataSplit[1]);
-//                 this.addDoc(newDoc, this.fieldKey + '_0');
-//             }
-
-//             if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
-//                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-//                 const newDoc = Docs.Create.TextDocument(dataSplit[0]);
-//                 this.addDoc(newDoc, this.fieldKey + '_1');
-//             }
-
-//             if (DocCast(this.Document.embedContainer) && DocCast(this.Document.embedContainer).practiceMode === 'quiz') {
-//                 const text = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
-//                 return (
-//                     <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} style={{ display: 'flex', flexDirection: 'column' }}>
-//                         <p style={{ color: 'white', padding: 10 }}>{text}</p>
-//                         <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
-//                         <div className="input-box">
-//                             <textarea
-//                                 value={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._outputValue : this._inputValue}
-//                                 onChange={this.handleInputChange}
-//                                 onScroll={e => {
-//                                     e.stopPropagation();
-//                                     e.preventDefault();
-//                                 }}
-//                                 placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
-//                                 readOnly={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate'}></textarea>
-
-//                             {this._loading ? (
-//                                 <div className="loading-spinner" style={{ position: 'absolute' }}>
-//                                     <ReactLoading type="spin" height={30} width={30} color={'blue'} />
-//                                 </div>
-//                             ) : null}
-//                         </div>
-//                         <div>
-//                             <div className="submit-button" style={{ overflow: 'hidden', display: 'flex', width: '100%' }}>
-//                                 <div
-//                                     className="submit-buttonschema-header-button"
-//                                     onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, false)}
-//                                     style={{ position: 'absolute', top: '5px', left: '11px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
-//                                     <FontAwesomeIcon color={'white'} icon="caret-down" />
-//                                 </div>
-//                                 <button className="submit-buttonrecord" onClick={this._listening ? this.stopListening : this.startListening} style={{ background: this._listening ? 'lightgray' : '', borderRadius: '2px' }}>
-//                                     {<FontAwesomeIcon icon="microphone" size="lg" />}
-//                                 </button>
-//                                 <div
-//                                     className="submit-buttonschema-header-button"
-//                                     onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, true)}
-//                                     style={{ position: 'absolute', top: '5px', left: '50px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
-//                                     <FontAwesomeIcon color={'white'} icon="caret-down" />
-//                                 </div>
-//                                 <button
-//                                     className="submit-buttonpronunciation"
-//                                     onClick={this.evaluatePronunciation}
-//                                     style={{ display: 'inline-flex', alignItems: 'center', background: this._listening ? 'lightgray' : '', borderRadius: '2px', width: '100%' }}>
-//                                     Evaluate Pronunciation
-//                                 </button>
-
-//                                 {this.layoutDoc[`_${this._props.fieldKey}_usePath`] !== 'alternate' ? (
-//                                     <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
-//                                         Submit
-//                                     </button>
-//                                 ) : (
-//                                     <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderClick} style={{ display: 'inline-flex', alignItems: 'center', borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
-//                                         Redo the Question
-//                                     </button>
-//                                 )}
-//                             </div>
-//                         </div>
-//                     </div>
-//                 );
-//             }
-
-//             // render a normal flashcard when not a QuizCard
-//             return (
-//                 <div
-//                     className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
-//                     style={{ display: 'flex', flexDirection: 'column', overflow: 'hidden' }}
-//                     onMouseEnter={() => {
-//                         this.hoverFlip('alternate');
-//                     }}
-//                     onMouseLeave={() => {
-//                         this.hoverFlip(undefined);
-//                     }}>
-//                     {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
-//                     {this._loading ? (
-//                         <div className="loading-spinner" style={{ position: 'absolute' }}>
-//                             <ReactLoading type="spin" height={30} width={30} color={'blue'} />
-//                         </div>
-//                     ) : null}
-//                     {this._props.isContentActive() ? this.flashcardMenu : null}
-//                     {this.overlayAlternateIcon}
-//                 </div>
-//             );
-//         }
-//         // render a comparison box that compares items side by side
-//         return (
-//             <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}` /* change className to easily disable/enable pointer events in CSS */}>
-//                 {displayBox(`${this.fieldKey}_2`, 1, this._props.PanelWidth() - 3)}
-//                 <div className="clip-div" style={{ width: this.clipWidth + '%', transition: this._animating, background: StrCast(this.layoutDoc._backgroundColor, 'gray') }}>
-//                     {displayBox(`${this.fieldKey}_1`, 0, 0)}
-//                 </div>
-
-//                 <div
-//                     className="slide-bar"
-//                     style={{
-//                         left: `calc(${this.clipWidth + '%'} - 0.5px)`,
-//                         cursor: this.clipWidth < 5 ? 'e-resize' : this.clipWidth / 100 > (this._props.PanelWidth() - 5) / this._props.PanelWidth() ? 'w-resize' : undefined,
-//                     }}
-//                     onPointerDown={e => !this.childActive && this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
-//                 >
-//                     <div className="slide-handle" />
-//                 </div>
-//             </div>
-//         );
-//     }
-// }
-
-// Docs.Prototypes.TemplateMap.set(DocumentType.COMPARISON, {
-//     data: '',
-//     layout: { view: ComparisonBox, dataField: 'data' },
-//     options: {
-//         acl: '',
-//         backgroundColor: 'gray',
-//         dropAction: dropActionType.move,
-//         waitForDoubleClickToClick: 'always',
-//         _layout_reflowHorizontal: true,
-//         _layout_reflowVertical: true,
-//         _layout_nativeDimEditable: true,
-//         systemIcon: 'BsLayoutSplit',
-//     },
-// });
diff --git a/src/client/views/nodes/ComparisonBoxNew.tsx b/src/client/views/nodes/ComparisonBoxNew.tsx
deleted file mode 100644
index 0fcf2d3c7..000000000
--- a/src/client/views/nodes/ComparisonBoxNew.tsx
+++ /dev/null
@@ -1,848 +0,0 @@
-import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { MathJax, MathJaxContext } from 'better-react-mathjax';
-import { Tooltip } from '@mui/material';
-import { action, computed, makeObservable, observable, reaction } from 'mobx';
-import { observer } from 'mobx-react';
-import * as React from 'react';
-import { returnFalse, returnNone, returnTrue, setupMoveUpEvents } from '../../../ClientUtils';
-import { emptyFunction } from '../../../Utils';
-import { Doc, Opt } from '../../../fields/Doc';
-import { DocData } from '../../../fields/DocSymbols';
-import { RichTextField } from '../../../fields/RichTextField';
-import { DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
-import { GPTCallType, gptAPICall, gptImageLabel } from '../../apis/gpt/GPT';
-import '../pdf/GPTPopup/GPTPopup.scss';
-import { DocUtils } from '../../documents/DocUtils';
-import { DocumentType } from '../../documents/DocumentTypes';
-import { Docs } from '../../documents/Documents';
-import { DragManager } from '../../util/DragManager';
-import { dropActionType } from '../../util/DropActionTypes';
-import { undoable } from '../../util/UndoManager';
-import { ViewBoxAnnotatableComponent } from '../DocComponent';
-import { PinDocView, PinProps } from '../PinFuncs';
-import { StyleProp } from '../StyleProp';
-import './ComparisonBox.scss';
-import { DocumentView } from './DocumentView';
-import { FieldView, FieldViewProps } from './FieldView';
-import { FormattedTextBox } from './formattedText/FormattedTextBox';
-import ReactLoading from 'react-loading';
-import { ContextMenu } from '../ContextMenu';
-import { ContextMenuProps } from '../ContextMenuItem';
-import { tickStep } from 'd3';
-import { CollectionCarouselView } from '../collections/CollectionCarouselView';
-import { FollowLinkScript } from '../../documents/DocUtils';
-import { schema } from '../nodes/formattedText/schema_rts';
-import { Id } from '../../../fields/FieldSymbols';
-import axios from 'axios';
-import ReactMarkdown from 'react-markdown';
-import { WebField, nullAudio } from '../../../fields/URLField';
-
-const API_URL = 'https://api.unsplash.com/search/photos';
-
-@observer
-export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
-    public static LayoutString(fieldKey: string) {
-        return FieldView.LayoutString(ComparisonBox, fieldKey);
-    }
-    private _disposers: (DragManager.DragDropDisposer | undefined)[] = [undefined, undefined];
-    constructor(props: FieldViewProps) {
-        super(props);
-        makeObservable(this);
-        this.setListening();
-    }
-
-    @observable private _inputValue = '';
-    @observable private _outputValue = '';
-    @observable private _loading = false;
-    @observable private _isEmpty = false;
-    @observable private _audio: Doc = Docs.Create.TextDocument('');
-    @observable childActive = false;
-    @observable _yRelativeToTop: boolean = true;
-    @observable _animating = '';
-    @observable mathJaxConfig = {
-        loader: { load: ['input/asciimath'] },
-    };
-    @observable private _listening = false;
-    @observable transcriptElement = '';
-    @observable private frontSide = false;
-    SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
-    @observable recognition = new this.SpeechRecognition();
-    _closeRef = React.createRef<HTMLDivElement>();
-
-    get revealOp() {
-        return this.layoutDoc[`_${this._props.fieldKey}_revealOp`];
-    }
-    get clipHeightKey() {
-        return '_' + this._props.fieldKey + '_clipHeight';
-    }
-
-    get clipWidthKey() {
-        return '_' + this._props.fieldKey + '_clipWidth';
-    }
-
-    @computed get clipWidth() {
-        return NumCast(this.layoutDoc[this.clipWidthKey], 50);
-    }
-
-    @computed get clipHeight() {
-        return NumCast(this.layoutDoc[this.clipHeightKey], 200);
-    }
-
-    @computed get overlayAlternateIcon() {
-        return (
-            <Tooltip title={<div className="dash-tooltip">flip</div>}>
-                <div
-                    className="formattedTextBox-alternateButton"
-                    onPointerDown={e =>
-                        setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => {
-                            if (!this.revealOp || this.revealOp === 'flip') {
-                                this.flipFlashcard();
-                            }
-                        })
-                    }
-                    style={{
-                        background: this.revealOp === 'hover' ? 'gray' : this.frontSide ? 'white' : 'black',
-                        color: this.revealOp === 'hover' ? 'black' : this.frontSide ? 'black' : 'white',
-                        display: 'inline-block',
-                    }}>
-                    <div key="alternate" className="formattedTextBox-flip">
-                        <FontAwesomeIcon icon="turn-up" size="1x" />
-                    </div>
-                </div>
-            </Tooltip>
-        );
-    }
-
-    @computed get flashcardMenu() {
-        return (
-            <div>
-                <Tooltip
-                    title={this.frontSide ? <div className="dash-tooltip">Flip to front side to use GPT</div> : <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>}>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={e => (!this.frontSide ? this.findImageTags() : null)}>
-                        <FontAwesomeIcon icon="lightbulb" size="xl" />
-                    </div>
-                </Tooltip>
-                {DocCast(this.Document.embedContainer).type_collection === 'carousel' ? null : (
-                    <div>
-                        <Tooltip title={<div>Create a flashcard pile</div>}>
-                            <div style={{ position: 'absolute', bottom: '3px', right: '74px', cursor: 'pointer' }} onPointerDown={e => this.createFlashcardPile([this.Document], false)}>
-                                <FontAwesomeIcon icon="folder-plus" size="xl" />
-                            </div>
-                        </Tooltip>
-                        <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
-                            <div style={{ position: 'absolute', bottom: '3px', right: '104px', cursor: 'pointer' }} onClick={e => this.gptFlashcardPile()}>
-                                <FontAwesomeIcon icon="layer-group" size="xl" />
-                            </div>
-                        </Tooltip>
-                    </div>
-                )}
-                <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }} onClick={e => this.handleHover()}>
-                        <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="hand-point-up" size="xl" />
-                    </div>
-                </Tooltip>
-            </div>
-        );
-    }
-
-    @action handleHover = () => {
-        if (this.revealOp === 'hover') {
-            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip';
-            this.Document.forceActive = false;
-        } else {
-            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover';
-            this.Document.forceActive = true;
-        }
-    };
-
-    @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
-        this._inputValue = e.target.value;
-        console.log(this._inputValue);
-    };
-
-    @action activateContent = () => {
-        this.childActive = true;
-    };
-
-    @action handleRenderClick = () => {
-        this.frontSide = !this.frontSide;
-    };
-
-    @action handleRenderGPTClick = async () => {
-        console.log('Phonetic transcription: ' + DocCast(this.Document.audio).phoneticTranscription);
-        const phonTrans = DocCast(this.Document.audio).phoneticTranscription;
-        if (phonTrans) {
-            this._inputValue = StrCast(phonTrans);
-            console.log('INPUT:' + this._inputValue);
-            this.askGPTPhonemes(this._inputValue);
-        } else if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
-        this.frontSide = false;
-        this._outputValue = '';
-    };
-
-    @action
-    private onPointerMove = ({ movementX }: PointerEvent) => {
-        const width = movementX * this.ScreenToLocalBoxXf().Scale + (this.clipWidth / 100) * this._props.PanelWidth();
-        if (width && width > 5 && width < this._props.PanelWidth()) {
-            this.layoutDoc[this.clipWidthKey] = (width * 100) / this._props.PanelWidth();
-        }
-        return false;
-    };
-
-    componentDidMount() {
-        this._props.setContentViewBox?.(this);
-        reaction(
-            () => this._props.isSelected(), // when this reaction should update
-            selected => !selected && (this.childActive = false) // what it should update to
-        );
-    }
-
-    protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
-        this._disposers[disposerId]?.();
-        if (ele) {
-            this._disposers[disposerId] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
-        }
-    };
-
-    private internalDrop = undoable((e: Event, dropEvent: DragManager.DropEvent, fieldKey: string) => {
-        if (dropEvent.complete.docDragData) {
-            const { droppedDocuments } = dropEvent.complete.docDragData;
-            const added = dropEvent.complete.docDragData.moveDocument?.(droppedDocuments, this.Document, (doc: Doc | Doc[]) => this.addDoc(toList(doc).lastElement(), fieldKey));
-            Doc.SetContainer(droppedDocuments.lastElement(), this.dataDoc);
-            !added && e.preventDefault();
-            e.stopPropagation(); // prevent parent Doc from registering new position so that it snaps back into place
-            // this.childActive = false;
-            return added;
-        }
-        return undefined;
-    }, 'internal drop');
-
-    getAnchor = (addAsAnnotation: boolean, pinProps?: PinProps) => {
-        const anchor = Docs.Create.ConfigDocument({
-            title: 'CompareAnchor:' + this.Document.title,
-            // set presentation timing properties for restoring view
-            presentation_transition: 1000,
-            annotationOn: this.Document,
-        });
-        if (anchor) {
-            if (!addAsAnnotation) anchor.backgroundColor = 'transparent';
-            /* addAsAnnotation && */ this.addDocument(anchor);
-            PinDocView(anchor, { pinDocLayout: pinProps?.pinDocLayout, pinData: { ...(pinProps?.pinData ?? {}), clippable: true } }, this.Document);
-            return anchor;
-        }
-        return this.Document;
-    };
-
-    clearDoc = undoable((fieldKey: string) => {
-        this.dataDoc[fieldKey] = undefined;
-        this._isEmpty = true;
-    }, 'clear doc');
-
-    moveDoc = (doc: Doc, addDocument: (document: Doc | Doc[]) => boolean, which: string) => this.remDoc(doc, which) && addDocument(doc);
-    addDoc = (doc: Doc, which: string) => {
-        if (this.dataDoc[which] && !this._isEmpty) return false;
-        this.dataDoc[which] = doc;
-        return true;
-    };
-    remDoc = (doc: Doc, which: string) => {
-        if (this.dataDoc[which] === doc) {
-            this._isEmpty = true;
-            // this.dataDoc[which] = 'empty';
-            console.log('HEREEEE');
-            this.dataDoc[which] = undefined;
-            return true;
-        }
-        console.log('FALSE');
-        return false;
-    };
-
-    closeDown = (e: React.PointerEvent, which: string) => {
-        setupMoveUpEvents(
-            this,
-            e,
-            moveEv => {
-                const de = new DragManager.DocumentDragData([DocCast(this.dataDoc[which])], dropActionType.move);
-                de.moveDocument = (doc: Doc | Doc[], targetCollection: Doc | undefined, addDocument: (doc: Doc | Doc[]) => boolean): boolean => addDocument(doc);
-                de.canEmbed = true;
-                DragManager.StartDocumentDrag([this._closeRef.current!], de, moveEv.clientX, moveEv.clientY);
-                return true;
-            },
-            emptyFunction,
-            () => this.clearDoc(which)
-        );
-    };
-    docStyleProvider = (doc: Opt<Doc>, props: Opt<FieldViewProps>, property: string): any => {
-        if (property === StyleProp.PointerEvents) return 'none';
-        return this._props.styleProvider?.(doc, props, property);
-    };
-    moveDoc1 = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: any) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.fieldKey + '_1'), true);
-    moveDoc2 = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: any) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.fieldKey + '_2'), true);
-    remDoc1 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_1'), true);
-    remDoc2 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_2'), true);
-
-    private registerSliding = (e: React.PointerEvent<HTMLDivElement>, targetWidth: number) => {
-        if (e.button !== 2) {
-            setupMoveUpEvents(
-                this,
-                e,
-                this.onPointerMove,
-                emptyFunction,
-                action((moveEv, doubleTap) => {
-                    if (doubleTap) {
-                        this.childActive = true;
-                        if (!this.dataDoc[this.fieldKey + '_1'] && !this.dataDoc[this.fieldKey]) this.dataDoc[this.fieldKey + '_1'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
-                        if (!this.dataDoc[this.fieldKey + '_2'] && !this.dataDoc[this.fieldKey + '_alternate']) this.dataDoc[this.fieldKey + '_2'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
-                    }
-                }),
-                false,
-                undefined,
-                action(() => {
-                    if (this.childActive) return;
-                    this._animating = 'all 200ms';
-                    // on click, animate slider movement to the targetWidth
-                    this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
-                    // this.layoutDoc[this.clipHeightKey] = (targetWidth * 100) / this._props.PanelHeight();
-
-                    setTimeout(
-                        action(() => {
-                            this._animating = '';
-                        }),
-                        200
-                    );
-                })
-            );
-        }
-    };
-
-    setListening = () => {
-        const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
-        if (SpeechRecognition) {
-            this.recognition.continuous = true;
-            this.recognition.interimResults = true;
-            this.recognition.lang = 'en-US';
-            this.recognition.onresult = this.handleResult.bind(this);
-        }
-        ContextMenu.Instance.setLangIndex(0);
-    };
-
-    startListening = () => {
-        this.recognition.start();
-        this._listening = true;
-    };
-
-    stopListening = () => {
-        this.recognition.stop();
-        this._listening = false;
-    };
-
-    setLanguage = (e: React.MouseEvent, language: string, ind: number) => {
-        this.recognition.lang = language;
-        ContextMenu.Instance.setLangIndex(ind);
-    };
-
-    convertAbr = () => {
-        switch (this.recognition.lang) {
-            case 'en-US': return 'English'; //prettier-ignore
-            case 'es-ES': return 'Spanish'; //prettier-ignore
-            case 'fr-FR': return 'French'; //prettier-ignore
-            case 'it-IT': return 'Italian'; //prettier-ignore
-            case 'zh-CH': return 'Mandarin Chinese'; //prettier-ignore
-            case 'ja': return 'Japanese'; //prettier-ignore
-            default: return 'Korean'; //prettier-ignore
-        }
-    };
-
-    openContextMenu = (x: number, y: number, evalu: boolean) => {
-        ContextMenu.Instance.clearItems();
-        ContextMenu.Instance.addItem({ description: 'English', event: e => this.setLanguage(e, 'en-US', 0) }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Spanish', event: e => this.setLanguage(e, 'es-ES', 1 )}); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'French', event: e => this.setLanguage(e, 'fr-FR', 2) }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Italian', event: e => this.setLanguage(e, 'it-IT', 3) }); //prettier-ignore
-        if (!evalu) ContextMenu.Instance.addItem({ description: 'Mandarin Chinese', event: e => this.setLanguage(e, 'zh-CH', 4) }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Japanese', event: e => this.setLanguage(e, 'ja', 5) }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Korean', event: e => this.setLanguage(e, 'ko', 6) }); //prettier-ignore
-        ContextMenu.Instance.displayMenu(x, y);
-    };
-
-    evaluatePronunciation = () => {
-        const newAudio = Docs.Create.AudioDocument(nullAudio, { _width: 200, _height: 100 });
-        this.Document.audio = newAudio[DocData];
-        this._props.DocumentView?.()._props.addDocument?.(newAudio);
-    };
-
-    pushInfo = async () => {
-        const audio = {
-            file: this._audio.url,
-        };
-        const response = await axios.post('http://localhost:105/recognize/', audio, {
-            headers: {
-                'Content-Type': 'application/json',
-            },
-        });
-        this.Document.phoneticTranscription = response.data['transcription'];
-        console.log('RESPONSE: ' + response.data['transcription']);
-    };
-
-    createFlashcardPile(collectionArr: Doc[], gpt: boolean) {
-        const newCol = Docs.Create.CarouselDocument(collectionArr, {
-            _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250) + 50,
-            _height: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 200) + 50,
-            _layout_fitWidth: false,
-            _layout_autoHeight: true,
-        });
-        newCol['x'] = this.layoutDoc['x'];
-        newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
-        newCol.type_collection = 'carousel';
-
-        if (gpt) {
-            this._props.DocumentView?.()._props.addDocument?.(newCol);
-            this._props.removeDocument?.(this.Document);
-        } else {
-            this._props.addDocument?.(newCol);
-            this._props.removeDocument?.(this.Document);
-            this.Document.embedContainer = newCol;
-        }
-    }
-
-    gptFlashcardPile = async () => {
-        var text = await this.askGPT(GPTCallType.STACK);
-        var senArr = text?.split('Question: ');
-        var collectionArr: Doc[] = [];
-        for (let i = 1; i < senArr?.length!; i++) {
-            const newDoc = Docs.Create.ComparisonDocument(senArr![i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
-
-            if (StrCast(senArr![i]).includes('Keyword: ')) {
-                const question = StrCast(senArr![i]).split('Keyword: ');
-                const img = await this.fetchImages(question[1]);
-                const textSide1 = question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0];
-                const textDoc1 = Docs.Create.TextDocument(question[0]);
-                const rtfiel = new RichTextField(
-                    JSON.stringify({
-                        doc: {
-                            type: 'doc',
-                            content: [
-                                {
-                                    type: 'paragraph',
-                                    attrs: { align: null, color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
-                                    content: [
-                                        { type: 'text', text: question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0] },
-                                        { type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: img![Id] } },
-                                    ],
-                                },
-                            ],
-                        },
-                        selection: { type: 'text', anchor: 2, head: 2 },
-                    }),
-                    textSide1
-                );
-
-                textDoc1[DocData].text = rtfiel;
-                DocCast(newDoc)[DocData][this.fieldKey + '_1'] = textDoc1;
-                DocCast(newDoc)[DocData][this.fieldKey + '_0'] = Docs.Create.TextDocument(question[0].includes('Answer: ') ? question[0].split('Answer: ')[1] : question[1]);
-            }
-            collectionArr.push(newDoc);
-        }
-        this.createFlashcardPile(collectionArr, true);
-    };
-
-    askGPT = async (callType: GPTCallType): Promise<string | undefined> => {
-        const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
-        const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
-        const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
-        this._loading = true;
-        const doc = DocCast(this.dataDoc[this.props.fieldKey + '_0']);
-        if (callType == GPTCallType.CHATCARD) {
-            if (StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '') {
-                this._loading = false;
-                return;
-            }
-            this.flipFlashcard();
-        }
-        try {
-            console.log(queryText);
-            const res = await gptAPICall(callType == GPTCallType.QUIZ ? queryText : questionText, callType);
-            if (!res) {
-                console.error('GPT call failed');
-                return;
-            }
-            if (callType == GPTCallType.CHATCARD) {
-                DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
-            } else if (callType == GPTCallType.QUIZ) {
-                console.log(this._inputValue);
-                this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
-            } else if (callType === GPTCallType.FLASHCARD) {
-                this._loading = false;
-                return res;
-            } else if (callType === GPTCallType.STACK) {
-            }
-            this._loading = false;
-            return res;
-        } catch (err) {
-            console.error('GPT call failed');
-        }
-        this._loading = false;
-    };
-    layoutWidth = () => NumCast(this.layoutDoc.width, 200);
-    layoutHeight = () => NumCast(this.layoutDoc.height, 200);
-
-    findImageTags = async () => {
-        const c = this.DocumentView?.().ContentDiv!.getElementsByTagName('img');
-        if (c?.length === 0) await this.askGPT(GPTCallType.CHATCARD);
-        if (c) {
-            this._loading = true;
-            for (let i of c) {
-                console.log(i);
-                if (i.className !== 'ProseMirror-separator') await this.getImageDesc(i.src);
-            }
-            this._loading = false;
-        }
-    };
-
-    askGPTPhonemes = async (phonemes: string) => {
-        const sentence = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
-        const phon = 'w ʌ ɪ z j ɔː ɹ n e ɪ m ';
-        const phon2 = 'h ʌ ɛ r j ʌ t ʌ d eɪ';
-        const phon6 = 'huː ɑɹ juː tədeɪ';
-        const phon3 = 'ʃ eɪ oʊ s i ʃ oʊ z b aɪ ð ə s iː ʃ oʊ';
-        const phon4 = 'kamo estas hɔi';
-        const phon5 = 'la s e n a l';
-        const promptEng =
-            'Consider all possible phonetic transcriptions of the intended sentence "' +
-            sentence +
-            '" that is standard in American speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
-            phon6 +
-            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in American speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart. The goal is to be understood, not sound like a native speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "ceeffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
-        const promptSpa =
-            'Consider all possible phonetic transcriptions of the intended sentence "' +
-            'como estás hoy' +
-            '" that is standard in Spanish speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
-            phon4 +
-            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in Spanish speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound.  Only note the difference if they are not allophones of the same phoneme and if they are far away on the vowel chart; say good job if it would be understood by a native Spanish speaker. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Identify "ɔi" sounds like "oy". Ignore accents and do not say anything to the user about this.';
-        const promptAll =
-            'Consider all possible phonetic transcriptions of the intended sentence "' +
-            sentence +
-            '" that is standard in ' +
-            this.convertAbr() +
-            ' speech without showing the user. Compare each word in the following phonemes with those phonetic transcriptions without displaying anything to the user: "' +
-            phonemes +
-            '". Steps to do this: Align the words with each word in the intended sentence by combining the phonemes to get a pronunciation that resembles the word in order. Do not describe phonetic corrections with the phonetic alphabet - describe it by providing other examples of how it should sound. Note if a word or sound missing, including missing vowels and consonants. If there is an additional word that does not match with the provided sentence, say so. For each word, if any letters mismatch and would sound weird in ' +
-            this.convertAbr() +
-            ' speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "cawffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
-
-        switch (this.recognition.lang) {
-            case 'en-US':
-                this._outputValue = await gptAPICall(promptEng, GPTCallType.PRONUNCIATION);
-                break;
-            case 'es-ES':
-                this._outputValue = await gptAPICall(promptSpa, GPTCallType.PRONUNCIATION);
-                break;
-            default:
-                this._outputValue = await gptAPICall(promptAll, GPTCallType.PRONUNCIATION);
-                break;
-        }
-    };
-
-    handleResult = (e: SpeechRecognitionEvent) => {
-        let interimTranscript = '';
-        let finalTranscript = '';
-        for (let i = e.resultIndex; i < e.results.length; i++) {
-            const transcript = e.results[i][0].transcript;
-            if (e.results[i].isFinal) {
-                finalTranscript += transcript;
-            } else {
-                interimTranscript += transcript;
-            }
-        }
-        this._inputValue += finalTranscript;
-    };
-
-    fetchImages = async (selection: string) => {
-        try {
-            const { data } = await axios.get(`${API_URL}?query=${selection}&page=1&per_page=${1}&client_id=Q4zruu6k6lum2kExiGhLNBJIgXDxD6NNj0SRHH_XXU0`);
-            console.log(data.results);
-            const imageSnapshot = Docs.Create.ImageDocument(data.results[0].urls.small, {
-                _nativeWidth: Doc.NativeWidth(this.layoutDoc),
-                _nativeHeight: Doc.NativeHeight(this.layoutDoc),
-                x: NumCast(this.layoutDoc.x),
-                y: NumCast(this.layoutDoc.y),
-                onClick: FollowLinkScript(),
-                _width: 150,
-                _height: 150,
-                title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
-            });
-            imageSnapshot['x'] = this.layoutDoc['x'];
-            imageSnapshot['y'] = this.layoutDoc['y'];
-            return imageSnapshot;
-        } catch (error) {
-            console.log(error);
-        }
-    };
-
-    static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
-        try {
-            const response = await fetch(imageUrl);
-            const blob = await response.blob();
-
-            return new Promise((resolve, reject) => {
-                const reader = new FileReader();
-                reader.readAsDataURL(blob);
-                reader.onloadend = () => resolve(reader.result as string);
-                reader.onerror = error => reject(error);
-            });
-        } catch (error) {
-            console.error('Error:', error);
-            throw error;
-        }
-    };
-
-    getImageDesc = async (u: string) => {
-        try {
-            const hrefBase64 = await ComparisonBox.imageUrlToBase64(u);
-            const response = await gptImageLabel(hrefBase64, 'Answer the following question as a short flashcard response. Do not include a label.' + (this.dataDoc.text as RichTextField)?.Text);
-
-            DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = response;
-        } catch (error) {
-            console.log('Error');
-        }
-    };
-
-    flipFlashcard = () => {
-        this.frontSide = !this.frontSide;
-    };
-
-    hoverFlip = (side: boolean) => {
-        if (this.revealOp === 'hover') this.layoutDoc[`_${this._props.fieldKey}_usePath`] = side;
-    };
-
-    testForTextFields = (whichSlot: string) => {
-        const slotData = Doc.Get(this.dataDoc, whichSlot, true);
-        const slotHasText = slotData instanceof RichTextField || typeof slotData === 'string';
-        const subjectText = RTFCast(this.Document[this.fieldKey])?.Text.trim();
-        const altText = RTFCast(this.Document[this.fieldKey + '_alternate'])?.Text.trim();
-        const layoutTemplateString =
-            slotHasText ? FormattedTextBox.LayoutString(whichSlot):
-            whichSlot.endsWith('1') ? (subjectText !== undefined ? FormattedTextBox.LayoutString(this.fieldKey) : undefined) :
-                                       altText !== undefined     ? FormattedTextBox.LayoutString(this.fieldKey + '_alternate'): undefined; // prettier-ignore
-
-        // A bit hacky to try out the concept of using GPT to fill in flashcards
-        //   If the second slot doesn't have anything in it, but the fieldKey slot has text (e.g., this.text is a string)
-        // and the fieldKey + "_alternate" has text that includes a GPT query (indicated by (( && )) ) that is parameterized (optionally) by the fieldKey text (this) or other metadata (this.<field>).
-        // eg., this.text_alternate is
-        //     "((Provide a one sentence definition for (this) that doesn't use any word in (this.excludeWords) ))"
-        //     where (this) is replaced by the text in the fieldKey slot abd this.excludeWords is repalced by the conetnts of the excludeWords field
-        // The GPT call will put the "answer"  in the second slot of the comparison (eg., text_2)
-        if (whichSlot.endsWith('2') && !layoutTemplateString?.includes(whichSlot)) {
-            const queryText = altText?.replace('(this)', subjectText); // TODO: this should be done in Doc.setField but it doesn't know about the fieldKey ...
-            if (queryText?.match(/\(\(.*\)\)/)) {
-                Doc.SetField(this.Document, whichSlot, ':=' + queryText, false); // make the second slot be a computed field on the data doc that calls ChatGpt
-            }
-        }
-        return layoutTemplateString;
-    };
-
-    render() {
-        const clearButton = (which: string) => (
-            <Tooltip title={<div className="dash-tooltip">remove</div>}>
-                <div
-                    // style={{ position: 'relative', top: '0px', left: '10px' }}
-                    ref={this._closeRef}
-                    className={`clear-button ${which}`}
-                    onPointerDown={e => this.closeDown(e, which)} // prevent triggering slider movement in registerSliding
-                >
-                    <FontAwesomeIcon className={`clear-button ${which}`} icon="times" size="xs" />
-                </div>
-            </Tooltip>
-        );
-        const displayDoc = (whichSlot: string) => {
-            const whichDoc = DocCast(this.dataDoc[whichSlot]);
-            const targetDoc = DocCast(whichDoc?.annotationOn, whichDoc);
-            const layoutString = targetDoc ? '' : this.testForTextFields(whichSlot);
-            // whichDoc['backgroundColor'] = this.layoutDoc['backgroundColor'];
-
-            return targetDoc || layoutString ? (
-                // <MathJaxContext config={this.mathJaxConfig}>
-                //     <MathJax>
-                <>
-                    <DocumentView
-                        // eslint-disable-next-line react/jsx-props-no-spreading
-                        {...this._props}
-                        ignoreUsePath={layoutString ? true : undefined}
-                        renderDepth={this.props.renderDepth + 1}
-                        LayoutTemplateString={layoutString}
-                        Document={layoutString ? this.Document : targetDoc}
-                        containerViewPath={this.DocumentView?.().docViewPath}
-                        moveDocument={whichSlot.endsWith('1') ? this.moveDoc1 : this.moveDoc2}
-                        removeDocument={whichSlot.endsWith('1') ? this.remDoc1 : this.remDoc2}
-                        NativeWidth={this.layoutWidth}
-                        NativeHeight={this.layoutHeight}
-                        isContentActive={() => this.childActive}
-                        isDocumentActive={returnFalse}
-                        dontSelect={returnTrue}
-                        whenChildContentsActiveChanged={this.whenChildContentsActiveChanged}
-                        styleProvider={this.childActive ? this._props.styleProvider : this.docStyleProvider}
-                        hideLinkButton
-                        pointerEvents={this.childActive ? undefined : returnNone}
-                    />
-                    {/* </MathJax> */}
-                    {/* <div style={{ position: 'absolute', top: '-5px', left: '2px' }}>{layoutString ? null : clearButton(whichSlot)}</div> */}
-                    {/* </MathJaxContext> // placeholder image if doc is missingleft: `${NumCast(this.layoutDoc.width, 200) - 33}px` */}
-                </>
-            ) : (
-                <div className="placeholder">
-                    <FontAwesomeIcon className="upload-icon" icon="cloud-upload-alt" size="lg" />
-                </div>
-            );
-        };
-        const displayBox = (which: string, index: number, cover: number) => (
-            <div
-                className={`${index === 0 ? 'before' : 'after'}Box-cont`}
-                key={which}
-                style={{ width: this._props.PanelWidth() }}
-                onPointerDown={e => {
-                    this.registerSliding(e, cover);
-                    this.activateContent();
-                }}
-                ref={ele => this.createDropTarget(ele, which, index)}>
-                {!this._isEmpty ? displayDoc(which) : null}
-                {/* {this.dataDoc[this.fieldKey + '_0'] !== 'empty' ? displayDoc(which) : null} */}
-            </div>
-        );
-
-        if (this.Document._layout_isFlashcard) {
-            const side = this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 1 : 0;
-
-            // add text box to each side when comparison box is first created
-            // (!this.dataDoc[this.fieldKey + '_0'] && this.dataDoc[this._props.fieldKey + '_0'] !== 'empty')
-            if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
-                const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-                const newDoc = Docs.Create.TextDocument(dataSplit[1]);
-                this.addDoc(newDoc, this.fieldKey + '_0');
-            }
-
-            if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
-                const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-                const newDoc = Docs.Create.TextDocument(dataSplit[0]);
-                this.addDoc(newDoc, this.fieldKey + '_1');
-            }
-
-            if (DocCast(this.Document.embedContainer) && DocCast(this.Document.embedContainer).practiceMode === 'quiz') {
-                const text = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
-                return (
-                    <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} style={{ display: 'flex', flexDirection: 'column' }}>
-                        <p style={{ color: 'white', padding: 10 }}>{text}</p>
-                        <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
-                        <div className="input-box">
-                            <textarea
-                                value={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? this._outputValue : this._inputValue}
-                                onChange={this.handleInputChange}
-                                onScroll={e => {
-                                    e.stopPropagation();
-                                    e.preventDefault();
-                                }}
-                                placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
-                                readOnly={this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate'}></textarea>
-
-                            {this._loading ? (
-                                <div className="loading-spinner" style={{ position: 'absolute' }}>
-                                    <ReactLoading type="spin" height={30} width={30} color={'blue'} />
-                                </div>
-                            ) : null}
-                        </div>
-                        <div>
-                            <div className="submit-button" style={{ overflow: 'hidden', display: 'flex', width: '100%' }}>
-                                <div
-                                    className="submit-buttonschema-header-button"
-                                    onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, false)}
-                                    style={{ position: 'absolute', top: '5px', left: '11px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
-                                    <FontAwesomeIcon color={'white'} icon="caret-down" />
-                                </div>
-                                <button className="submit-buttonrecord" onClick={this._listening ? this.stopListening : this.startListening} style={{ background: this._listening ? 'lightgray' : '', borderRadius: '2px' }}>
-                                    {<FontAwesomeIcon icon="microphone" size="lg" />}
-                                </button>
-                                <div
-                                    className="submit-buttonschema-header-button"
-                                    onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, true)}
-                                    style={{ position: 'absolute', top: '5px', left: '50px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
-                                    <FontAwesomeIcon color={'white'} icon="caret-down" />
-                                </div>
-                                <button
-                                    className="submit-buttonpronunciation"
-                                    onClick={this.evaluatePronunciation}
-                                    style={{ display: 'inline-flex', alignItems: 'center', background: this._listening ? 'lightgray' : '', borderRadius: '2px', width: '100%' }}>
-                                    Evaluate Pronunciation
-                                </button>
-
-                                {this.layoutDoc[`_${this._props.fieldKey}_usePath`] !== 'alternate' ? (
-                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
-                                        Submit
-                                    </button>
-                                ) : (
-                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderClick} style={{ display: 'inline-flex', alignItems: 'center', borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
-                                        Redo the Question
-                                    </button>
-                                )}
-                            </div>
-                        </div>
-                    </div>
-                );
-            }
-
-            // render a normal flashcard when not a QuizCard
-            return (
-                <div
-                    className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
-                    style={{ display: 'flex', flexDirection: 'column', overflow: 'hidden' }}
-                    onMouseEnter={() => {
-                        this.hoverFlip(false);
-                    }}
-                    onMouseLeave={() => {
-                        this.hoverFlip(true);
-                    }}>
-                    {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
-                    {this._loading ? (
-                        <div className="loading-spinner" style={{ position: 'absolute' }}>
-                            <ReactLoading type="spin" height={30} width={30} color={'blue'} />
-                        </div>
-                    ) : null}
-                    {this._props.isContentActive() ? this.flashcardMenu : null}
-                    {this.overlayAlternateIcon}
-                </div>
-            );
-        }
-        // render a comparison box that compares items side by side
-        return (
-            <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}` /* change className to easily disable/enable pointer events in CSS */}>
-                {displayBox(`${this.fieldKey}_2`, 1, this._props.PanelWidth() - 3)}
-                <div className="clip-div" style={{ width: this.clipWidth + '%', transition: this._animating, background: StrCast(this.layoutDoc._backgroundColor, 'gray') }}>
-                    {displayBox(`${this.fieldKey}_1`, 0, 0)}
-                </div>
-
-                <div
-                    className="slide-bar"
-                    style={{
-                        left: `calc(${this.clipWidth + '%'} - 0.5px)`,
-                        cursor: this.clipWidth < 5 ? 'e-resize' : this.clipWidth / 100 > (this._props.PanelWidth() - 5) / this._props.PanelWidth() ? 'w-resize' : undefined,
-                    }}
-                    onPointerDown={e => !this.childActive && this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
-                >
-                    <div className="slide-handle" />
-                </div>
-            </div>
-        );
-    }
-}
-
-Docs.Prototypes.TemplateMap.set(DocumentType.COMPARISON, {
-    data: '',
-    layout: { view: ComparisonBox, dataField: 'data' },
-    options: {
-        acl: '',
-        backgroundColor: 'gray',
-        dropAction: dropActionType.move,
-        waitForDoubleClickToClick: 'always',
-        _layout_reflowHorizontal: true,
-        _layout_reflowVertical: true,
-        _layout_nativeDimEditable: true,
-        systemIcon: 'BsLayoutSplit',
-    },
-});
-- 
cgit v1.2.3-70-g09d2


From 80a9bb161cda4a361d9626047869e7acbe845414 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Mon, 2 Sep 2024 10:59:58 -0400
Subject: fixed containerViewPath for carouse and comparison boxes

---
 src/client/views/collections/CollectionCarouselView.tsx | 3 ++-
 src/client/views/nodes/ComparisonBox.tsx                | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index ba7c944a0..9f59322e8 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -210,7 +210,7 @@ export class CollectionCarouselView extends CollectionSubView() {
 
         return !(curDoc?.layout instanceof Doc) ? null : (
             <>
-                <div className="collectionCarouselView-image" key="image">
+                <div className="collectionCarouselView-image">
                     <DocumentView
                         {...this._props}
                         NativeWidth={returnZero}
@@ -218,6 +218,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                         fitWidth={undefined}
                         setContentViewBox={undefined}
                         childFilters={this.childDocFilters}
+                        containerViewPath={this._props.docViewPath}
                         onDoubleClickScript={this.onContentDoubleClick}
                         onClickScript={this.onContentClick}
                         isDocumentActive={this._props.childDocumentsActive?.() ? this._props.isDocumentActive : this._props.isContentActive}
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 58af3ad52..9e1c1b7be 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -673,7 +673,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         renderDepth={this.props.renderDepth + 1}
                         LayoutTemplateString={layoutString}
                         Document={layoutString ? this.Document : targetDoc}
-                        containerViewPath={this.DocumentView?.().docViewPath}
+                        containerViewPath={this._props.docViewPath}
                         moveDocument={whichSlot.endsWith('1') ? this.moveDoc1 : this.moveDoc2}
                         removeDocument={whichSlot.endsWith('1') ? this.remDoc1 : this.remDoc2}
                         NativeWidth={this.layoutWidth}
-- 
cgit v1.2.3-70-g09d2


From e8547b9618e5f3d43662e728f4b18e2de9084e47 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 3 Sep 2024 13:32:09 -0400
Subject: fix copmarison box slidebar to work.

---
 src/client/util/CurrentUserUtils.ts      |  1 -
 src/client/views/nodes/ComparisonBox.tsx | 28 ++++++++++++----------------
 2 files changed, 12 insertions(+), 17 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/util/CurrentUserUtils.ts b/src/client/util/CurrentUserUtils.ts
index 8a9f20565..14fb65252 100644
--- a/src/client/util/CurrentUserUtils.ts
+++ b/src/client/util/CurrentUserUtils.ts
@@ -260,7 +260,6 @@ export class CurrentUserUtils {
             }
             return plotly;
         }
-        
         const plotlyView = (opts:DocumentOptions) => {
             const rtfield = new RichTextField(JSON.stringify(
                 {doc: {type:"doc",content:[
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 9e1c1b7be..13eb2bf3f 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -56,7 +56,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @observable private _loading = false;
     @observable private _isEmpty = false;
     @observable private _audio: Doc = Docs.Create.TextDocument('');
-    @observable childActive = false;
+    @observable _childActive = false; // whether pointer events pass through comparison box to its contents or not
     @observable _yRelativeToTop: boolean = true;
     @observable _animating = '';
     @observable mathJaxConfig = {
@@ -160,10 +160,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         console.log(this._inputValue);
     };
 
-    @action activateContent = () => {
-        this.childActive = true;
-    };
-
     @action handleRenderClick = () => {
         this.frontSide = !this.frontSide;
     };
@@ -183,8 +179,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @action
     private onPointerMove = ({ movementX }: PointerEvent) => {
         const width = movementX * this.ScreenToLocalBoxXf().Scale + (this.clipWidth / 100) * this._props.PanelWidth();
-        if (width && width > 5 && width < this._props.PanelWidth()) {
-            this.layoutDoc[this.clipWidthKey] = (width * 100) / this._props.PanelWidth();
+        if (width < this._props.PanelWidth()) {
+            this.layoutDoc[this.clipWidthKey] = (Math.max(0, width) * 100) / this._props.PanelWidth();
         }
         return false;
     };
@@ -193,7 +189,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this._props.setContentViewBox?.(this);
         reaction(
             () => this._props.isSelected(), // when this reaction should update
-            selected => !selected && (this.childActive = false) // what it should update to
+            selected => !selected && (this._childActive = false) // what it should update to
         );
     }
 
@@ -291,7 +287,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 emptyFunction,
                 action((moveEv, doubleTap) => {
                     if (doubleTap) {
-                        this.childActive = true;
+                        this._childActive = true;
                         if (!this.dataDoc[this.fieldKey + '_1'] && !this.dataDoc[this.fieldKey]) this.dataDoc[this.fieldKey + '_1'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
                         if (!this.dataDoc[this.fieldKey + '_2'] && !this.dataDoc[this.fieldKey + '_alternate']) this.dataDoc[this.fieldKey + '_2'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
                     }
@@ -299,7 +295,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 false,
                 undefined,
                 action(() => {
-                    if (this.childActive) return;
+                    if (this._childActive) return;
                     this._animating = 'all 200ms';
                     // on click, animate slider movement to the targetWidth
                     this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
@@ -678,13 +674,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         removeDocument={whichSlot.endsWith('1') ? this.remDoc1 : this.remDoc2}
                         NativeWidth={this.layoutWidth}
                         NativeHeight={this.layoutHeight}
-                        isContentActive={() => this.childActive}
+                        isContentActive={() => this._childActive}
                         isDocumentActive={returnFalse}
                         dontSelect={returnTrue}
                         whenChildContentsActiveChanged={this.whenChildContentsActiveChanged}
-                        styleProvider={this.childActive ? this._props.styleProvider : this.docStyleProvider}
+                        styleProvider={this._childActive ? this._props.styleProvider : this.docStyleProvider}
                         hideLinkButton
-                        pointerEvents={this.childActive ? undefined : returnNone}
+                        pointerEvents={this._childActive ? undefined : returnNone}
                     />
                     {/* </MathJax> */}
                     {/* <div style={{ position: 'absolute', top: '-5px', left: '2px' }}>{layoutString ? null : clearButton(whichSlot)}</div> */}
@@ -703,7 +699,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 style={{ width: this._props.PanelWidth() }}
                 onPointerDown={e => {
                     this.registerSliding(e, cover);
-                    this.activateContent();
+                    this._childActive = true;
                 }}
                 ref={ele => this.createDropTarget(ele, which, index)}>
                 {!this._isEmpty ? displayDoc(which) : null}
@@ -823,10 +819,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 <div
                     className="slide-bar"
                     style={{
-                        left: `calc(${this.clipWidth + '%'} - 0.5px)`,
+                        left: `min(100% - 3px, calc(${this.clipWidth + '%'}))`,
                         cursor: this.clipWidth < 5 ? 'e-resize' : this.clipWidth / 100 > (this._props.PanelWidth() - 5) / this._props.PanelWidth() ? 'w-resize' : undefined,
                     }}
-                    onPointerDown={e => !this.childActive && this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
+                    onPointerDown={e => this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
                 >
                     <div className="slide-handle" />
                 </div>
-- 
cgit v1.2.3-70-g09d2


From 67965a6c2e8600dc85553d7ee5880298d798650f Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 3 Sep 2024 14:40:03 -0400
Subject: start of cleaning comparisonBox code.

---
 .../collections/collectionFreeForm/MarqueeView.tsx |   4 +-
 src/client/views/nodes/ComparisonBox.tsx           | 240 +++++++++------------
 2 files changed, 107 insertions(+), 137 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
index 10fdbf5d5..917aaaea8 100644
--- a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
+++ b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
@@ -433,14 +433,14 @@ export class MarqueeView extends ObservableReactComponent<SubCollectionViewProps
      * Classifies images and assigns the labels as document fields.
      */
     @undoBatch
-    classifyImages = action(async (e: React.MouseEvent | undefined) => {
+    classifyImages = async () => {
         const groupButton = DocListCast(Doc.MyLeftSidebarMenu.data).find(d => d.target === Doc.MyImageGrouper);
         if (groupButton) {
             this._selectedDocs = this.marqueeSelect(false, DocumentType.IMG);
             ImageLabelBoxData.Instance.setData(this._selectedDocs);
             MainView.Instance.expandFlyout(groupButton);
         }
-    });
+    };
 
     /**
      * Groups images to most similar labels.
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 13eb2bf3f..cf2cf5e18 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -1,41 +1,34 @@
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { MathJax, MathJaxContext } from 'better-react-mathjax';
 import { Tooltip } from '@mui/material';
-import { action, computed, makeObservable, observable, reaction } from 'mobx';
+import axios from 'axios';
+import { IReactionDisposer, action, computed, makeObservable, observable, reaction } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
+import ReactLoading from 'react-loading';
 import { returnFalse, returnNone, returnTrue, setupMoveUpEvents } from '../../../ClientUtils';
 import { emptyFunction } from '../../../Utils';
 import { Doc, Opt } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
+import { Id } from '../../../fields/FieldSymbols';
 import { RichTextField } from '../../../fields/RichTextField';
 import { DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
+import { nullAudio } from '../../../fields/URLField';
 import { GPTCallType, gptAPICall, gptImageLabel } from '../../apis/gpt/GPT';
-import '../pdf/GPTPopup/GPTPopup.scss';
-import { DocUtils } from '../../documents/DocUtils';
-import { DocumentType } from '../../documents/DocumentTypes';
+import { DocUtils, FollowLinkScript } from '../../documents/DocUtils';
+import { CollectionViewType, DocumentType } from '../../documents/DocumentTypes';
 import { Docs } from '../../documents/Documents';
 import { DragManager } from '../../util/DragManager';
 import { dropActionType } from '../../util/DropActionTypes';
 import { undoable } from '../../util/UndoManager';
+import { ContextMenu } from '../ContextMenu';
 import { ViewBoxAnnotatableComponent } from '../DocComponent';
 import { PinDocView, PinProps } from '../PinFuncs';
 import { StyleProp } from '../StyleProp';
+import '../pdf/GPTPopup/GPTPopup.scss';
 import './ComparisonBox.scss';
 import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FormattedTextBox } from './formattedText/FormattedTextBox';
-import ReactLoading from 'react-loading';
-import { ContextMenu } from '../ContextMenu';
-import { ContextMenuProps } from '../ContextMenuItem';
-import { tickStep } from 'd3';
-import { CollectionCarouselView } from '../collections/CollectionCarouselView';
-import { FollowLinkScript } from '../../documents/DocUtils';
-import { schema } from '../nodes/formattedText/schema_rts';
-import { Id } from '../../../fields/FieldSymbols';
-import axios from 'axios';
-import ReactMarkdown from 'react-markdown';
-import { WebField, nullAudio } from '../../../fields/URLField';
 
 const API_URL = 'https://api.unsplash.com/search/photos';
 
@@ -44,46 +37,47 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     public static LayoutString(fieldKey: string) {
         return FieldView.LayoutString(ComparisonBox, fieldKey);
     }
+    private _reactDisposer: IReactionDisposer | undefined;
     private _disposers: (DragManager.DragDropDisposer | undefined)[] = [undefined, undefined];
+    private _closeRef = React.createRef<HTMLDivElement>();
+
+    SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+
+    protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
+        this._disposers[disposerId]?.();
+        if (ele) {
+            this._disposers[disposerId] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
+        }
+    };
+
     constructor(props: FieldViewProps) {
         super(props);
         makeObservable(this);
         this.setListening();
     }
 
+    @observable private _mathJaxConfig = {  loader: { load: ['input/asciimath'] } }; // prettier-ignore
+    @observable private _transcriptElement = '';
     @observable private _inputValue = '';
     @observable private _outputValue = '';
     @observable private _loading = false;
     @observable private _isEmpty = false;
     @observable private _audio: Doc = Docs.Create.TextDocument('');
-    @observable _childActive = false; // whether pointer events pass through comparison box to its contents or not
-    @observable _yRelativeToTop: boolean = true;
-    @observable _animating = '';
-    @observable mathJaxConfig = {
-        loader: { load: ['input/asciimath'] },
-    };
+    @observable private _childActive = false; // whether pointer events pass through comparison box to its contents or not
+    @observable private _animating = '';
     @observable private _listening = false;
-    @observable transcriptElement = '';
-    @observable private frontSide = false;
-    SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
-    @observable recognition = new this.SpeechRecognition();
-    _closeRef = React.createRef<HTMLDivElement>();
+    @observable private _frontSide = false;
+    @observable private _recognition = new this.SpeechRecognition();
 
-    get revealOp() {
-        return this.layoutDoc[`_${this._props.fieldKey}_revealOp`];
-    }
-    get clipHeightKey() {
-        return '_' + this._props.fieldKey + '_clipHeight';
+    @computed get revealOpKey() {
+        return `_${this.fieldKey}_revealOp`;
     }
-
-    get clipWidthKey() {
-        return '_' + this._props.fieldKey + '_clipWidth';
-    }
-
+    @computed get clipHeightKey() { return '_' + this.fieldKey + '_clipHeight'; } // prettier-ignore
+    @computed get clipWidthKey()  { return '_' + this.fieldKey + '_clipWidth'; } // prettier-ignore
+    @computed get revealOp()      { return this.layoutDoc[`_${this.fieldKey}_revealOp`]; } // prettier-ignore
     @computed get clipWidth() {
         return NumCast(this.layoutDoc[this.clipWidthKey], 50);
     }
-
     @computed get clipHeight() {
         return NumCast(this.layoutDoc[this.clipHeightKey], 200);
     }
@@ -101,8 +95,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         })
                     }
                     style={{
-                        background: this.revealOp === 'hover' ? 'gray' : this.frontSide ? 'white' : 'black',
-                        color: this.revealOp === 'hover' ? 'black' : this.frontSide ? 'black' : 'white',
+                        background: this.revealOp === 'hover' ? 'gray' : this._frontSide ? 'white' : 'black',
+                        color: this.revealOp === 'hover' ? 'black' : this._frontSide ? 'black' : 'white',
                         display: 'inline-block',
                     }}>
                     <div key="alternate" className="formattedTextBox-flip">
@@ -117,8 +111,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return (
             <div>
                 <Tooltip
-                    title={this.frontSide ? <div className="dash-tooltip">Flip to front side to use GPT</div> : <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>}>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={e => (!this.frontSide ? this.findImageTags() : null)}>
+                    title={this._frontSide ? <div className="dash-tooltip">Flip to front side to use GPT</div> : <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>}>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={e => (!this._frontSide ? this.findImageTags() : null)}>
                         <FontAwesomeIcon icon="lightbulb" size="xl" />
                     </div>
                 </Tooltip>
@@ -145,26 +139,37 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         );
     }
 
+    componentDidMount() {
+        this._props.setContentViewBox?.(this);
+        this._reactDisposer = reaction(
+            () => this._props.isSelected(), // when this reaction should update
+            selected => !selected && (this._childActive = false) // what it should update to
+        );
+    }
+    componentWillUnmount() {
+        this._disposers.forEach(d => d?.());
+        this._reactDisposer?.();
+    }
+
     @action handleHover = () => {
         if (this.revealOp === 'hover') {
-            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip';
+            this.layoutDoc[this.revealOpKey] = 'flip';
             this.Document.forceActive = false;
         } else {
-            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover';
+            this.layoutDoc[this.revealOpKey] = 'hover';
             this.Document.forceActive = true;
         }
     };
 
-    @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
+    handleInputChange = action((e: React.ChangeEvent<HTMLTextAreaElement>) => {
         this._inputValue = e.target.value;
-        console.log(this._inputValue);
-    };
+    });
 
-    @action handleRenderClick = () => {
-        this.frontSide = !this.frontSide;
-    };
+    handleRenderClick = action(() => {
+        this._frontSide = !this._frontSide;
+    });
 
-    @action handleRenderGPTClick = async () => {
+    handleRenderGPTClick = action(() => {
         console.log('Phonetic transcription: ' + DocCast(this.Document.audio).phoneticTranscription);
         const phonTrans = DocCast(this.Document.audio).phoneticTranscription;
         if (phonTrans) {
@@ -172,12 +177,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             console.log('INPUT:' + this._inputValue);
             this.askGPTPhonemes(this._inputValue);
         } else if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
-        this.frontSide = false;
+        this._frontSide = false;
         this._outputValue = '';
-    };
+    });
 
-    @action
-    private onPointerMove = ({ movementX }: PointerEvent) => {
+    onPointerMove = ({ movementX }: PointerEvent) => {
         const width = movementX * this.ScreenToLocalBoxXf().Scale + (this.clipWidth / 100) * this._props.PanelWidth();
         if (width < this._props.PanelWidth()) {
             this.layoutDoc[this.clipWidthKey] = (Math.max(0, width) * 100) / this._props.PanelWidth();
@@ -185,22 +189,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return false;
     };
 
-    componentDidMount() {
-        this._props.setContentViewBox?.(this);
-        reaction(
-            () => this._props.isSelected(), // when this reaction should update
-            selected => !selected && (this._childActive = false) // what it should update to
-        );
-    }
-
-    protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
-        this._disposers[disposerId]?.();
-        if (ele) {
-            this._disposers[disposerId] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
-        }
-    };
-
-    private internalDrop = undoable((e: Event, dropEvent: DragManager.DropEvent, fieldKey: string) => {
+    internalDrop = undoable((e: Event, dropEvent: DragManager.DropEvent, fieldKey: string) => {
         if (dropEvent.complete.docDragData) {
             const { droppedDocuments } = dropEvent.complete.docDragData;
             const added = dropEvent.complete.docDragData.moveDocument?.(droppedDocuments, this.Document, (doc: Doc | Doc[]) => this.addDoc(toList(doc).lastElement(), fieldKey));
@@ -244,11 +233,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         if (this.dataDoc[which] === doc) {
             this._isEmpty = true;
             // this.dataDoc[which] = 'empty';
-            console.log('HEREEEE');
             this.dataDoc[which] = undefined;
             return true;
         }
-        console.log('FALSE');
         return false;
     };
 
@@ -295,18 +282,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 false,
                 undefined,
                 action(() => {
-                    if (this._childActive) return;
-                    this._animating = 'all 200ms';
-                    // on click, animate slider movement to the targetWidth
-                    this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
-                    // this.layoutDoc[this.clipHeightKey] = (targetWidth * 100) / this._props.PanelHeight();
-
-                    setTimeout(
-                        action(() => {
-                            this._animating = '';
-                        }),
-                        200
-                    );
+                    if (!this._childActive) {
+                        this._animating = 'all 200ms';
+                        // on click, animate slider movement to the targetWidth
+                        this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
+                        // this.layoutDoc[this.clipHeightKey] = (targetWidth * 100) / this._props.PanelHeight();
+                        setTimeout(action(() => { this._animating = ''; }), 200); // prettier-ignore
+                    }
                 })
             );
         }
@@ -315,31 +297,31 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     setListening = () => {
         const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
         if (SpeechRecognition) {
-            this.recognition.continuous = true;
-            this.recognition.interimResults = true;
-            this.recognition.lang = 'en-US';
-            this.recognition.onresult = this.handleResult.bind(this);
+            this._recognition.continuous = true;
+            this._recognition.interimResults = true;
+            this._recognition.lang = 'en-US';
+            this._recognition.onresult = this.handleResult.bind(this);
         }
         ContextMenu.Instance.setLangIndex(0);
     };
 
     startListening = () => {
-        this.recognition.start();
+        this._recognition.start();
         this._listening = true;
     };
 
     stopListening = () => {
-        this.recognition.stop();
+        this._recognition.stop();
         this._listening = false;
     };
 
     setLanguage = (language: string, ind: number) => {
-        this.recognition.lang = language;
+        this._recognition.lang = language;
         ContextMenu.Instance.setLangIndex(ind);
     };
 
     convertAbr = () => {
-        switch (this.recognition.lang) {
+        switch (this._recognition.lang) {
             case 'en-US': return 'English'; //prettier-ignore
             case 'es-ES': return 'Spanish'; //prettier-ignore
             case 'fr-FR': return 'French'; //prettier-ignore
@@ -378,19 +360,18 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             },
         });
         this.Document.phoneticTranscription = response.data['transcription'];
-        console.log('RESPONSE: ' + response.data['transcription']);
     };
 
     createFlashcardPile(collectionArr: Doc[], gpt: boolean) {
         const newCol = Docs.Create.CarouselDocument(collectionArr, {
-            _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250) + 50,
-            _height: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 200) + 50,
+            _width: NumCast(this.layoutDoc['_' + this.fieldKey + '_width'], 250) + 50,
+            _height: NumCast(this.layoutDoc['_' + this.fieldKey + '_width'], 200) + 50,
             _layout_fitWidth: false,
             _layout_autoHeight: true,
         });
-        newCol['x'] = this.layoutDoc['x'];
-        newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
-        newCol.type_collection = 'carousel';
+        newCol.x = this.layoutDoc.x;
+        newCol.y = NumCast(this.layoutDoc.y) + 50;
+        newCol.type_collection = CollectionViewType.Carousel;
 
         if (gpt) {
             this._props.DocumentView?.()._props.addDocument?.(newCol);
@@ -403,9 +384,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     }
 
     gptFlashcardPile = async () => {
-        var text = await this.askGPT(GPTCallType.STACK);
-        var senArr = text?.split('Question: ');
-        var collectionArr: Doc[] = [];
+        let text = await this.askGPT(GPTCallType.STACK);
+        let senArr = text?.split('Question: ');
+        let collectionArr: Doc[] = [];
         for (let i = 1; i < senArr?.length!; i++) {
             const newDoc = Docs.Create.ComparisonDocument(senArr![i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
 
@@ -480,6 +461,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
         this._loading = false;
     };
+
     layoutWidth = () => NumCast(this.layoutDoc.width, 200);
     layoutHeight = () => NumCast(this.layoutDoc.height, 200);
 
@@ -488,8 +470,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         if (c?.length === 0) await this.askGPT(GPTCallType.CHATCARD);
         if (c) {
             this._loading = true;
-            for (let i of c) {
-                console.log(i);
+            for (const i of c) {
                 if (i.className !== 'ProseMirror-separator') await this.getImageDesc(i.src);
             }
             this._loading = false;
@@ -527,17 +508,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             this.convertAbr() +
             ' speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "cawffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
 
-        switch (this.recognition.lang) {
-            case 'en-US':
-                this._outputValue = await gptAPICall(promptEng, GPTCallType.PRONUNCIATION);
-                break;
-            case 'es-ES':
-                this._outputValue = await gptAPICall(promptSpa, GPTCallType.PRONUNCIATION);
-                break;
-            default:
-                this._outputValue = await gptAPICall(promptAll, GPTCallType.PRONUNCIATION);
-                break;
-        }
+        switch (this._recognition.lang) {
+            case 'en-US': this._outputValue = await gptAPICall(promptEng, GPTCallType.PRONUNCIATION); break;
+            case 'es-ES': this._outputValue = await gptAPICall(promptSpa, GPTCallType.PRONUNCIATION); break;
+            default:      this._outputValue = await gptAPICall(promptAll, GPTCallType.PRONUNCIATION); break;
+        } // prettier-ignore
     };
 
     handleResult = (e: SpeechRecognitionEvent) => {
@@ -568,8 +543,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 _height: 150,
                 title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
             });
-            imageSnapshot['x'] = this.layoutDoc['x'];
-            imageSnapshot['y'] = this.layoutDoc['y'];
+            imageSnapshot.x = this.layoutDoc.x;
+            imageSnapshot.y = this.layoutDoc.y;
             return imageSnapshot;
         } catch (error) {
             console.log(error);
@@ -578,8 +553,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
         try {
-            const response = await fetch(imageUrl);
-            const blob = await response.blob();
+            const blob = await fetch(imageUrl).then(response => response.blob());
 
             return new Promise((resolve, reject) => {
                 const reader = new FileReader();
@@ -600,14 +574,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
             DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = response;
         } catch (error) {
-            console.log('Error');
+            console.log('Error', error);
         }
     };
 
-    @action
-    flipFlashcard = () => {
-        this.frontSide = !this.frontSide;
-    };
+    flipFlashcard = action(() => {
+        this._frontSide = !this._frontSide;
+    });
 
     hoverFlip = (side: boolean) => {
         if (this.revealOp === 'hover') this.layoutDoc[`_${this._props.fieldKey}_usePath`] = side;
@@ -659,7 +632,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             // whichDoc['backgroundColor'] = this.layoutDoc['backgroundColor'];
 
             return targetDoc || layoutString ? (
-                // <MathJaxContext config={this.mathJaxConfig}>
+                // <MathJaxContext config={this._mathJaxConfig}>
                 //     <MathJax>
                 <>
                     <DocumentView
@@ -708,7 +681,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         );
 
         if (this.Document._layout_isFlashcard) {
-            const side = this.frontSide ? 1 : 0;
+            const side = this._frontSide ? 1 : 0;
 
             // add text box to each side when comparison box is first created
             // (!this.dataDoc[this.fieldKey + '_0'] && this.dataDoc[this._props.fieldKey + '_0'] !== 'empty')
@@ -732,14 +705,14 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
                         <div className="input-box">
                             <textarea
-                                value={this.frontSide ? this._outputValue : this._inputValue}
+                                value={this._frontSide ? this._outputValue : this._inputValue}
                                 onChange={this.handleInputChange}
                                 onScroll={e => {
                                     e.stopPropagation();
                                     e.preventDefault();
                                 }}
                                 placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
-                                readOnly={this.frontSide}></textarea>
+                                readOnly={this._frontSide}></textarea>
 
                             {this._loading ? (
                                 <div className="loading-spinner" style={{ position: 'absolute' }}>
@@ -771,7 +744,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                     Evaluate Pronunciation
                                 </button>
 
-                                {this.frontSide ? (
+                                {this._frontSide ? (
                                     <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
                                         Submit
                                     </button>
@@ -791,12 +764,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 <div
                     className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
                     style={{ display: 'flex', flexDirection: 'column', overflow: 'hidden' }}
-                    onMouseEnter={() => {
-                        this.hoverFlip(false);
-                    }}
-                    onMouseLeave={() => {
-                        this.hoverFlip(true);
-                    }}>
+                    onMouseEnter={() => this.hoverFlip(false)}
+                    onMouseLeave={() => this.hoverFlip(true)}>
                     {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
                     {this._loading ? (
                         <div className="loading-spinner" style={{ position: 'absolute' }}>
@@ -820,6 +789,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     className="slide-bar"
                     style={{
                         left: `min(100% - 3px, calc(${this.clipWidth + '%'}))`,
+                        transition: this._animating,
                         cursor: this.clipWidth < 5 ? 'e-resize' : this.clipWidth / 100 > (this._props.PanelWidth() - 5) / this._props.PanelWidth() ? 'w-resize' : undefined,
                     }}
                     onPointerDown={e => this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
-- 
cgit v1.2.3-70-g09d2


From 180e775d4a0bbfa211410727ddd13553f30ecf97 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Wed, 4 Sep 2024 22:40:19 -0400
Subject: fix bug

---
 src/client/apis/youtube/.YoutubeBox.scss.icloud    | Bin 0 -> 165 bytes
 src/client/apis/youtube/.YoutubeBox.tsx.icloud     | Bin 0 -> 162 bytes
 src/client/util/Scripting.ts                       |   2 +-
 .../linking/.LinkRelationshipSearch.tsx.icloud     | Bin 0 -> 176 bytes
 src/client/views/nodes/.FaceRectangles.tsx.icloud  | Bin 0 -> 168 bytes
 src/client/views/nodes/.LinkAnchorBox.tsx.icloud   | Bin 0 -> 167 bytes
 src/client/views/nodes/ComparisonBox.tsx           |   8 +-
 src/client/views/nodes/LabelBigText.js             | 270 +++++++++++++++++++++
 src/typings/index.d.ts                             |   2 +-
 9 files changed, 276 insertions(+), 6 deletions(-)
 create mode 100644 src/client/apis/youtube/.YoutubeBox.scss.icloud
 create mode 100644 src/client/apis/youtube/.YoutubeBox.tsx.icloud
 create mode 100644 src/client/views/linking/.LinkRelationshipSearch.tsx.icloud
 create mode 100644 src/client/views/nodes/.FaceRectangles.tsx.icloud
 create mode 100644 src/client/views/nodes/.LinkAnchorBox.tsx.icloud
 create mode 100644 src/client/views/nodes/LabelBigText.js

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/apis/youtube/.YoutubeBox.scss.icloud b/src/client/apis/youtube/.YoutubeBox.scss.icloud
new file mode 100644
index 000000000..44b9557bd
Binary files /dev/null and b/src/client/apis/youtube/.YoutubeBox.scss.icloud differ
diff --git a/src/client/apis/youtube/.YoutubeBox.tsx.icloud b/src/client/apis/youtube/.YoutubeBox.tsx.icloud
new file mode 100644
index 000000000..bb5d12d7c
Binary files /dev/null and b/src/client/apis/youtube/.YoutubeBox.tsx.icloud differ
diff --git a/src/client/util/Scripting.ts b/src/client/util/Scripting.ts
index c63d3d7cb..47d85a723 100644
--- a/src/client/util/Scripting.ts
+++ b/src/client/util/Scripting.ts
@@ -1,7 +1,7 @@
 // export const ts = (window as any).ts;
 // import * as typescriptlib from '!!raw-loader!../../../node_modules/typescript/lib/lib.d.ts'
 // import * as typescriptes5 from '!!raw-loader!../../../node_modules/typescript/lib/lib.es5.d.ts'
-import typescriptlib from 'type_decls.d';
+// import typescriptlib from 'type_decls.d';
 import * as ts from 'typescript';
 import { Doc, FieldType } from '../../fields/Doc';
 import { RefField } from '../../fields/RefField';
diff --git a/src/client/views/linking/.LinkRelationshipSearch.tsx.icloud b/src/client/views/linking/.LinkRelationshipSearch.tsx.icloud
new file mode 100644
index 000000000..6e73d1bd0
Binary files /dev/null and b/src/client/views/linking/.LinkRelationshipSearch.tsx.icloud differ
diff --git a/src/client/views/nodes/.FaceRectangles.tsx.icloud b/src/client/views/nodes/.FaceRectangles.tsx.icloud
new file mode 100644
index 000000000..14c960022
Binary files /dev/null and b/src/client/views/nodes/.FaceRectangles.tsx.icloud differ
diff --git a/src/client/views/nodes/.LinkAnchorBox.tsx.icloud b/src/client/views/nodes/.LinkAnchorBox.tsx.icloud
new file mode 100644
index 000000000..2b5650f75
Binary files /dev/null and b/src/client/views/nodes/.LinkAnchorBox.tsx.icloud differ
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 9e1c1b7be..2d4bba8d1 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -169,8 +169,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     };
 
     @action handleRenderGPTClick = async () => {
-        console.log('Phonetic transcription: ' + DocCast(this.Document.audio).phoneticTranscription);
-        const phonTrans = DocCast(this.Document.audio).phoneticTranscription;
+        const phonTrans = DocCast(this.Document.audio) ? DocCast(this.Document.audio).phoneticTranscription : undefined;
         if (phonTrans) {
             this._inputValue = StrCast(phonTrans);
             console.log('INPUT:' + this._inputValue);
@@ -471,6 +470,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
             } else if (callType == GPTCallType.QUIZ) {
                 console.log(this._inputValue);
+                this.frontSide = true;
                 this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
             } else if (callType === GPTCallType.FLASHCARD) {
                 this._loading = false;
@@ -614,7 +614,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     };
 
     hoverFlip = (side: boolean) => {
-        if (this.revealOp === 'hover') this.layoutDoc[`_${this._props.fieldKey}_usePath`] = side;
+        if (this.revealOp === 'hover') this.frontSide = side;
     };
 
     testForTextFields = (whichSlot: string) => {
@@ -775,7 +775,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                     Evaluate Pronunciation
                                 </button>
 
-                                {this.frontSide ? (
+                                {!this.frontSide ? (
                                     <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
                                         Submit
                                     </button>
diff --git a/src/client/views/nodes/LabelBigText.js b/src/client/views/nodes/LabelBigText.js
new file mode 100644
index 000000000..290152cd0
--- /dev/null
+++ b/src/client/views/nodes/LabelBigText.js
@@ -0,0 +1,270 @@
+/*
+Brorlandi/big-text.js v1.0.0, 2017
+Adapted from DanielHoffmann/jquery-bigtext, v1.3.0, May 2014
+And from Jetroid/bigtext.js v1.0.0, September 2016
+
+Usage:
+BigText("#myElement",{
+    rotateText: {Number}, (null)
+    fontSizeFactor: {Number}, (0.8)
+    maximumFontSize: {Number}, (null)
+    limitingDimension: {String}, ("both")
+    horizontalAlign: {String}, ("center")
+    verticalAlign: {String}, ("center")
+    textAlign: {String}, ("center")
+    whiteSpace: {String}, ("nowrap")
+});
+
+
+Original Projects: 
+https://github.com/DanielHoffmann/jquery-bigtext
+https://github.com/Jetroid/bigtext.js
+
+Options:
+
+rotateText: Rotates the text inside the element by X degrees.
+
+fontSizeFactor: This option is used to give some vertical spacing for letters that overflow the line-height (like 'g', 'Á' and most other accentuated uppercase letters). This does not affect the font-size if the limiting factor is the width of the parent div. The default is 0.8
+
+maximumFontSize: maximum font size to use.
+
+minimumFontSize: minimum font size to use.  if font is calculated smaller than this, text will be rendered at this size and wrapped
+
+limitingDimension: In which dimension the font size should be limited. Possible values: "width", "height" or "both". Defaults to both. Using this option with values different than "both" overwrites the element parent width or height.
+
+horizontalAlign: Where to align the text horizontally. Possible values: "left", "center", "right". Defaults to "center".
+
+verticalAlign: Where to align the text vertically. Possible values: "top", "center", "bottom". Defaults to "center".
+
+textAlign: Sets the text align of the element. Possible values: "left", "center", "right". Defaults to "center". This option is only useful if there are linebreaks (<br> tags) inside the text.
+
+whiteSpace: Sets whitespace handling. Possible values: "nowrap", "pre". Defaults to "nowrap". (Can also be set to enable wrapping but this doesn't work well.)
+
+Bruno Orlandi - 2017
+
+Copyright (C) 2013 Daniel Hoffmann Bernardes, Ícaro Technologies
+Copyright (C) 2016 Jet Holt
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+function _calculateInnerDimensions(computedStyle) {
+    //Calculate the inner width and height
+    var innerWidth;
+    var innerHeight;
+
+    var width = parseInt(computedStyle.getPropertyValue("width"));
+    var height = parseInt(computedStyle.getPropertyValue("height"));
+    var paddingLeft = parseInt(computedStyle.getPropertyValue("padding-left"));
+    var paddingRight = parseInt(computedStyle.getPropertyValue("padding-right"));
+    var paddingTop = parseInt(computedStyle.getPropertyValue("padding-top"));
+    var paddingBottom = parseInt(computedStyle.getPropertyValue("padding-bottom"));
+    var borderLeft = parseInt(computedStyle.getPropertyValue("border-left-width"));
+    var borderRight = parseInt(computedStyle.getPropertyValue("border-right-width"));
+    var borderTop = parseInt(computedStyle.getPropertyValue("border-top-width"));
+    var borderBottom = parseInt(computedStyle.getPropertyValue("border-bottom-width"));
+
+    //If box-sizing is border-box, we need to subtract padding and border.
+    var parentBoxSizing = computedStyle.getPropertyValue("box-sizing");
+    if (parentBoxSizing == "border-box") {
+        innerWidth = width - (paddingLeft + paddingRight + borderLeft + borderRight);
+        innerHeight = height - (paddingTop + paddingBottom + borderTop + borderBottom);
+    } else {
+        innerWidth = width;
+        innerHeight = height;
+    }
+    var obj = {};
+    obj["width"] = innerWidth;
+    obj["height"] = innerHeight;
+    return obj;
+}
+
+export default function BigText(element, options) {
+
+    if (typeof element === 'string') {
+        element = document.querySelector(element);
+    } else if (element.length) {
+        // Support for array based queries (such as jQuery)
+        element = element[0];
+    }
+
+    var defaultOptions = {
+        rotateText: null,
+        fontSizeFactor: 0.8,
+        maximumFontSize: null,
+        limitingDimension: "both",
+        horizontalAlign: "center",
+        verticalAlign: "center",
+        textAlign: "center",
+        whiteSpace: "nowrap",
+        singleLine: true
+    };
+
+    //Merge provided options and default options
+    options = options || {};
+    for (var opt in defaultOptions)
+        if (defaultOptions.hasOwnProperty(opt) && !options.hasOwnProperty(opt))
+            options[opt] = defaultOptions[opt];
+
+    //Get variables which we will reference frequently
+    var style = element.style;
+    var parent = element.parentNode;
+    var parentStyle = parent.style;
+    var parentComputedStyle = document.defaultView.getComputedStyle(parent);
+
+    //hides the element to prevent "flashing"
+    style.visibility = "hidden";
+    //Set some properties
+    style.display = "inline-block";
+    style.clear = "both";
+    style.float = "left";
+    var fontSize = options.maximumFontSize;
+    if (options.singleLine) {
+        style.fontSize = (fontSize * options.fontSizeFactor) + "px";
+        style.lineHeight = fontSize + "px";
+    } else {
+        for (; fontSize > options.minimumFontSize; fontSize = fontSize - Math.min(fontSize / 2, Math.max(0, fontSize - 48) + 2)) {
+            style.fontSize = (fontSize * options.fontSizeFactor) + "px";
+            style.lineHeight = "1";
+            if (element.offsetHeight <= +parentComputedStyle.height.replace("px", "")) {
+                break;
+            }
+        }
+    }
+    style.whiteSpace = options.whiteSpace;
+    style.textAlign = options.textAlign;
+    style.position = "relative";
+    style.padding = 0;
+    style.margin = 0;
+    style.left = "50%";
+    style.top = "50%";
+    var computedStyle = document.defaultView.getComputedStyle(element);
+
+    //Get properties of parent to allow easier referencing later.
+    var parentPadding = {
+        top: parseInt(parentComputedStyle.getPropertyValue("padding-top")),
+        right: parseInt(parentComputedStyle.getPropertyValue("padding-right")),
+        bottom: parseInt(parentComputedStyle.getPropertyValue("padding-bottom")),
+        left: parseInt(parentComputedStyle.getPropertyValue("padding-left")),
+    };
+    var parentBorder = {
+        top: parseInt(parentComputedStyle.getPropertyValue("border-top")),
+        right: parseInt(parentComputedStyle.getPropertyValue("border-right")),
+        bottom: parseInt(parentComputedStyle.getPropertyValue("border-bottom")),
+        left: parseInt(parentComputedStyle.getPropertyValue("border-left")),
+    };
+
+    //Calculate the parent inner width and height
+    var parentInnerDimensions = _calculateInnerDimensions(parentComputedStyle);
+    var parentInnerWidth = parentInnerDimensions["width"];
+    var parentInnerHeight = parentInnerDimensions["height"];
+
+    var box = {
+        width: element.offsetWidth, //Note: This is slightly larger than the jQuery version
+        height: element.offsetHeight,
+    };
+    if (!box.width || !box.height) return element;
+
+
+    if (options.rotateText !== null) {
+        if (typeof options.rotateText !== "number")
+            throw "bigText error: rotateText value must be a number";
+        var rotate = "rotate(" + options.rotateText + "deg)";
+        style.webkitTransform = rotate;
+        style.msTransform = rotate;
+        style.MozTransform = rotate;
+        style.OTransform = rotate;
+        style.transform = rotate;
+        //calculating bounding box of the rotated element
+        var sine = Math.abs(Math.sin(options.rotateText * Math.PI / 180));
+        var cosine = Math.abs(Math.cos(options.rotateText * Math.PI / 180));
+        box.width = element.offsetWidth * cosine + element.offsetHeight * sine;
+        box.height = element.offsetWidth * sine + element.offsetHeight * cosine;
+    }
+
+    var parentWidth = (parentInnerWidth - parentPadding.left - parentPadding.right);
+    var parentHeight = (parentInnerHeight - parentPadding.top - parentPadding.bottom);
+    var widthFactor = parentWidth / box.width;
+    var heightFactor = parentHeight / box.height;
+    var lineHeight;
+
+    if (options.limitingDimension.toLowerCase() === "width") {
+        lineHeight = Math.floor(widthFactor * fontSize);
+    } else if (options.limitingDimension.toLowerCase() === "height") {
+        lineHeight = Math.floor(heightFactor * fontSize);
+    } else if (widthFactor < heightFactor)
+        lineHeight = Math.floor(widthFactor * fontSize);
+    else if (widthFactor >= heightFactor)
+        lineHeight = Math.floor(heightFactor * fontSize);
+
+    var fontSize = lineHeight * options.fontSizeFactor;
+    if (fontSize < options.minimumFontSize) {
+        parentStyle.display = "flex";
+        parentStyle.alignItems = "center";
+        style.textAlign = "center";
+        style.visibility = "";
+        style.fontSize = options.minimumFontSize + "px";
+        style.lineHeight = "";
+        style.overflow = "hidden";
+        style.textOverflow = "ellipsis";
+        style.top = "";
+        style.left = "";
+        style.margin = "";
+        return element;
+    }
+    if (options.maximumFontSize && fontSize > options.maximumFontSize) {
+        fontSize = options.maximumFontSize;
+        lineHeight = fontSize / options.fontSizeFactor;
+    }
+
+    style.fontSize = Math.floor(fontSize) + "px";
+    style.lineHeight = Math.ceil(lineHeight) + "px";
+    style.marginBottom = "0px";
+    style.marginRight = "0px";
+
+    // if (options.limitingDimension.toLowerCase() === "height") {
+    //     //this option needs the font-size to be set already so computedStyle.getPropertyValue("width") returns the right size
+    //     //this +4 is to compensate the rounding erros that can occur due to the calls to Math.floor in the centering code
+    //     parentStyle.width = (parseInt(computedStyle.getPropertyValue("width")) + 4) + "px";
+    // }
+
+    //Calculate the inner width and height
+    var innerDimensions = _calculateInnerDimensions(computedStyle);
+    var innerWidth = innerDimensions["width"];
+    var innerHeight = innerDimensions["height"];
+
+    switch (options.verticalAlign.toLowerCase()) {
+        case "top":
+            style.top = "0%";
+            break;
+        case "bottom":
+            style.top = "100%";
+            style.marginTop = Math.floor(-innerHeight) + "px";
+            break;
+        default:
+            style.marginTop = Math.ceil((-innerHeight / 2)) + "px";
+            break;
+    }
+
+    switch (options.horizontalAlign.toLowerCase()) {
+        case "left":
+            style.left = "0%";
+            break;
+        case "right":
+            style.left = "100%";
+            style.marginLeft = Math.floor(-innerWidth) + "px";
+            break;
+        default:
+            style.marginLeft = Math.ceil((-innerWidth / 2)) + "px";
+            break;
+    }
+
+    //shows the element after the work is done
+    style.visibility = "visible";
+
+    return element;
+}
diff --git a/src/typings/index.d.ts b/src/typings/index.d.ts
index bee79a38d..fea88cdcb 100644
--- a/src/typings/index.d.ts
+++ b/src/typings/index.d.ts
@@ -12,7 +12,7 @@ declare module 'fit-curve';
 declare module 'iink-js';
 declare module 'pdfjs-dist/web/pdf_viewer';
 declare module 'react-jsx-parser';
-declare module 'type_decls.d';
+// declare module 'type_decls.d';
 
 declare module '@react-pdf/renderer' {
     import * as React from 'react';
-- 
cgit v1.2.3-70-g09d2


From ac7f34fa5ee67900714121b700768ebb18b874d1 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Sat, 21 Sep 2024 23:26:52 -0400
Subject: added flashcard deck creator to foramtted text box.

---
 src/client/views/nodes/ComparisonBox.tsx                  |  6 +++---
 src/client/views/nodes/formattedText/FormattedTextBox.tsx | 13 +++++++++++++
 2 files changed, 16 insertions(+), 3 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 338604302..9d9535abd 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -116,7 +116,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         <FontAwesomeIcon icon="lightbulb" size="xl" />
                     </div>
                 </Tooltip>
-                {DocCast(this.Document.embedContainer).type_collection === 'carousel' ? null : (
+                {DocCast(this.Document.embedContainer)?.type_collection === CollectionViewType.Carousel ? null : (
                     <div>
                         <Tooltip title={<div>Create a flashcard pile</div>}>
                             <div style={{ position: 'absolute', bottom: '3px', right: '74px', cursor: 'pointer' }} onPointerDown={e => this.createFlashcardPile([this.Document], false)}>
@@ -688,13 +688,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             // (!this.dataDoc[this.fieldKey + '_0'] && this.dataDoc[this._props.fieldKey + '_0'] !== 'empty')
             if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-                const newDoc = Docs.Create.TextDocument(dataSplit[1]);
+                const newDoc = Docs.Create.TextDocument(dataSplit[1], { _layout_autoHeight: true });
                 this.addDoc(newDoc, this.fieldKey + '_0');
             }
 
             if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-                const newDoc = Docs.Create.TextDocument(dataSplit[0]);
+                const newDoc = Docs.Create.TextDocument(dataSplit[0], { _layout_autoHeight: true });
                 this.addDoc(newDoc, this.fieldKey + '_1');
             }
 
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index c8e020192..07a4d1093 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -213,9 +213,22 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
         return anchor;
     };
 
+    gptPDFFlashcards = async () => {
+        const queryText = window.getSelection()?.toString() ?? '';
+        try {
+            if (queryText) {
+                const res = await gptAPICall(queryText, GPTCallType.FLASHCARD);
+                AnchorMenu.Instance.transferToFlashcard(res || 'Something went wrong', NumCast(this.layoutDoc.x), NumCast(this.layoutDoc.y));
+            }
+        } catch (err) {
+            console.error(err);
+        }
+    };
+
     @action
     setupAnchorMenu = () => {
         AnchorMenu.Instance.Status = 'marquee';
+        AnchorMenu.Instance.gptFlashcards = this.gptPDFFlashcards;
         AnchorMenu.Instance.OnClick = () => {
             !this.layoutDoc.layout_showSidebar && this.toggleSidebar();
             setTimeout(() => this._sidebarRef.current?.anchorMenuClick(this.makeLinkAnchor(undefined, OpenWhere.addRight, undefined, 'Anchored Selection', true))); // give time for sidebarRef to be created
-- 
cgit v1.2.3-70-g09d2


From ef2a1037a418ad9fa35d6c60feba914d828d5b84 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Sun, 29 Sep 2024 15:54:49 -0400
Subject: clean up

---
 dash-speech-to-text-101b507c5e39.json              | 13 +++++
 .../views/collections/CollectionCarouselView.tsx   | 16 +------
 src/client/views/nodes/AudioBox.tsx                | 19 ++++++++
 src/client/views/nodes/ComparisonBox.tsx           | 55 +++++++++++++++-------
 src/client/views/nodes/ImageBox.tsx                | 49 ++++++-------------
 5 files changed, 86 insertions(+), 66 deletions(-)
 create mode 100644 dash-speech-to-text-101b507c5e39.json

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/dash-speech-to-text-101b507c5e39.json b/dash-speech-to-text-101b507c5e39.json
new file mode 100644
index 000000000..62a7c7eb0
--- /dev/null
+++ b/dash-speech-to-text-101b507c5e39.json
@@ -0,0 +1,13 @@
+{
+  "type": "service_account",
+  "project_id": "dash-speech-to-text",
+  "private_key_id": "101b507c5e394ec62f075d9416890bef0f597f7f",
+  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC1BQ4iu7RNbiVF\nuIk/7+Zby4mMy0fde/WaCc4VxEQELK8ys2UtLU92L0npSLOyLACtLcNexdihoPMs\nHcQV7jxj9KRlk7tx3CPuVj8mn52WNIxX5ds5BszQqrfNQGObfdeFsROFzcA2ysbz\nEyfkqoFSQU5OUYANwEaF9oXc5nEkZaz5Zjjy34g8USAlySbB2sKI4o372Xi0slJo\nuPYWn93k/IA7HAmCOeooc2LTi+gu2KCnkXKevXdJCcK9Lntbm9RjoSUQiR/6R0Ls\nCTXY/g3G2FMJiraqxeI4HeAU2Pyw0sl86nHYTHh3/wNRxQkpLXROAc5qlPbMbTzp\nEu7kLI7PAgMBAAECggEADQyQk00SrKOXCOqfl5NUo3i4XATqE6ZJndFny3E63KOC\npwCq93xqW6usWVEbWxRe9seeFik5pOp0Unwm1CnjV+qdJea7aXQkHEdCsCcWIMDS\n/nccZtpS+MEwahm31Hqthv6tLe/CE8ZpscDHbG16Jb19cUSLcEepuHh9TTTzd7Bu\n9iaQGNC4Kpfvnl4zxr5RlooQFBXI/izSnHqlKW6yz/j3ntpabDFp7U3ZDe7cRpJa\nsDXwOXSULrg7LRcV9sPyC4UwfEVNFdJJg7QxWcmJe4QYdDCNnZ7JnKvMcBgZmvyH\nbJZosZGMB3QW/BdPHugk5dmT2Zm7j/0axwNdIflFwQKBgQDddrnGLQMqZwQU+Ag6\nTFjXdSXaGDKRvK4W+PvsNla8kin1TU3NHd+GUGPnBbR+bOF5Y1m0IYEHOOtgVB6E\ni+RzytKPM6ghMDAkzLTrB1R9a1Aj0b2OWQrdPjDgDw2BHcGVmwHsy3i2v97e+1hn\nduEFHZOawg2LALlXqxXb+TyYrwKBgQDRP7k9wcnju1JOcfMFcUH1gcG6CmKoZwVK\nl7cGcKYaTAZZl4W8cZVuC+l/LPH4xXQYg9FqGQ3R6NQQFQV3g83ym2nQeALluuXJ\n7vlFtViu89uiiBtg9DL1wsbYnbUjOd4CYoW9GWv5Jy99SSHp4XIIcy6MNYwuRZaq\nObx5dViz4QKBgBWqBpRPVO7x8uFGPi/NxicVi6VhFplRFsqigqphymxZ9AbOEB1P\nnc0a0hsIYNa5OflQ8baATInzVHsw32dh8/Ar2BswF3NfrmX7LHuNVQOL2uQWIW/q\nX/iym79fWZfW3FgROMf8Q4vFCz1O4yAD7hE9CnJqJz8AzCC6WMITCI17AoGANMv3\nWXXEEwn4woJN51mkYuXSk7Z7HjKgSynsrFtQDeKQ15o7zEh8g7/NsqEMjNCFcooQ\nFM0th4FPwJ8NOhKvrD86e7dMQ9rckA8UJlqTfdFZ4bCl99il4wy6T327bp/zPHbP\nd98qNzuD6ADD5ddUhn1JiWcZb7NvSJQ40gyhzQECgYB7rMpNCq46NNozGktHRhuo\nGJjHiGgSM6vVPkC7DVJbU4jU2RjI7IUL2wfFEWDKOovkts7Ugp/KEFVcff4neeuz\nMomaVWaaT3xIKENUIAzSpqcqshkqDJ/2kAknD30IJXAvGuaK49rql5Vab/Rh6zVW\nWH5hqTQk5IXR02zFSIXwXg==\n-----END PRIVATE KEY-----\n",
+  "client_email": "af010101@dash-speech-to-text.iam.gserviceaccount.com",
+  "client_id": "110674669436677368261",
+  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
+  "token_uri": "https://oauth2.googleapis.com/token",
+  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
+  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/af010101%40dash-speech-to-text.iam.gserviceaccount.com",
+  "universe_domain": "googleapis.com"
+}
diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index 91a7c6514..04a0320fc 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -254,15 +254,6 @@ export class CollectionCarouselView extends CollectionSubView() {
     addFlashcard() {
         const newDoc = Docs.Create.ComparisonDocument('', { _layout_isFlashcard: true, _width: 300, _height: 300 });
         this.addDocument?.(newDoc);
-        // DocUtils.copyDragFactory(newDoc);
-        // this._props.addDocument?.();
-        // newDoc.layout = this.layoutDoc;
-        // newDoc.data = this.dataDoc;
-        // Doc.AddDocToList()
-        // this._props.parent._props.addDocument();
-        // this.childLayoutPairs.push({ newDoc.layout, newDoc.data});
-        // this._props.addDocument?.(newDoc);
-        // console.log('HERE');
     }
 
     @computed get buttons() {
@@ -275,11 +266,6 @@ export class CollectionCarouselView extends CollectionSubView() {
                             <FontAwesomeIcon icon="star" color={this.carouselItems[this.carouselIndex]?.[this.starField] ? 'yellow' : 'gray'} size="1x" />
                         </div>
                     </Tooltip>
-                    {/* <Tooltip title="add new flashcard to pile">
-                        <div key="add" className="carouselView-add" onClick={this.addFlashcard}>
-                            <FontAwesomeIcon icon="plus" color={this.carouselItems?.[NumCast(this.layoutDoc._carousel_index)].layout[this.starField] ? 'yellow' : 'gray'} size="1x" />
-                        </div>
-                    </Tooltip> */}
                 </div>
                 <div key="back" className="carouselView-back" onClick={this.goback}>
                     <FontAwesomeIcon icon="chevron-left" size="2x" />
@@ -287,7 +273,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                 <div key="fwd" className="carouselView-fwd" onClick={this.advance}>
                     <FontAwesomeIcon icon="chevron-right" size="2x" />
                 </div>
-                {this.practiceMode ? (
+                {this.practiceMode == practiceMode.PRACTICE ? (
                     <div>
                         <Tooltip title="Incorrect. View again later.">
                             <div key="remove" className="carouselView-remove" onClick={e => this.setPracticeVal(e, practiceVal.MISSED)}>
diff --git a/src/client/views/nodes/AudioBox.tsx b/src/client/views/nodes/AudioBox.tsx
index 63a126aec..8056ced1e 100644
--- a/src/client/views/nodes/AudioBox.tsx
+++ b/src/client/views/nodes/AudioBox.tsx
@@ -300,10 +300,29 @@ export class AudioBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         console.log('RESPONSE: ' + response.data['transcription']);
     };
 
+    youtubeUpload = async () => {
+        console.log('Here');
+        const audio = {
+            file: 'Cd2ch4XV84s&t=373s',
+        };
+        const response = await axios.post('http://localhost:105/youtube/', audio, {
+            headers: {
+                'Content-Type': 'application/json',
+            },
+        });
+        console.log('RESPONSE: ' + response.data['transcription']);
+    };
+
     // context menu
     specificContextMenu = (): void => {
         const funcs: ContextMenuProps[] = [];
         // funcs.push({ description: 'Push info', event: this.pushInfo, icon: 'redo-alt' });
+
+        funcs.push({
+            description: 'Youtube',
+            event: this.youtubeUpload, // prettier-ignore
+            icon: 'expand-arrows-alt',
+        });
         funcs.push({
             description: (this.layoutDoc.hideAnchors ? "Don't hide" : 'Hide') + ' anchors',
             event: () => { this.layoutDoc.hideAnchors = !this.layoutDoc.hideAnchors; }, // prettier-ignore
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index a410f4994..df127f0d5 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -246,8 +246,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     remDoc = (doc: Doc, which: string) => {
         if (this.dataDoc[which] === doc) {
             this._isEmpty = true;
-            // this.dataDoc[which] = 'empty';
-            console.log('HEREEEE');
             this.dataDoc[which] = undefined;
             return true;
         }
@@ -302,7 +300,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     this._animating = 'all 200ms';
                     // on click, animate slider movement to the targetWidth
                     this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
-                    // this.layoutDoc[this.clipHeightKey] = (targetWidth * 100) / this._props.PanelHeight();
 
                     setTimeout(
                         action(() => {
@@ -384,6 +381,24 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         console.log('RESPONSE: ' + response.data['transcription']);
     };
 
+    getYouTubeVideoId = (url: string) => {
+        const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/;
+        const match = url.match(regExp);
+        return match && match[2].length === 11 ? match[2] : null;
+    };
+
+    youtubeUpload = async () => {
+        const audio = {
+            file: this.getYouTubeVideoId(StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text)),
+        };
+        const response = await axios.post('http://localhost:105/youtube/', audio, {
+            headers: {
+                'Content-Type': 'application/json',
+            },
+        });
+        return response.data['transcription'];
+    };
+
     createFlashcardPile(collectionArr: Doc[], gpt: boolean) {
         const newCol = Docs.Create.CarouselDocument(collectionArr, {
             _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250) + 50,
@@ -394,6 +409,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         newCol['x'] = this.layoutDoc['x'];
         newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
         newCol.type_collection = 'carousel';
+        for (var i = 0; i < collectionArr.length; i++) {
+            DocCast(collectionArr[i])[DocData].embedContainer = newCol;
+        }
 
         if (gpt) {
             this._props.DocumentView?.()._props.addDocument?.(newCol);
@@ -405,6 +423,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
     }
 
+    /**
+     * Transfers the content of flashcards into a flashcard pile.
+     */
     gptFlashcardPile = async () => {
         var text = await this.askGPT(GPTCallType.STACK);
         var senArr = text?.split('Question: ');
@@ -441,17 +462,28 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 DocCast(newDoc)[DocData][this.fieldKey + '_1'] = textDoc1;
                 DocCast(newDoc)[DocData][this.fieldKey + '_0'] = Docs.Create.TextDocument(question[0].includes('Answer: ') ? question[0].split('Answer: ')[1] : question[1]);
             }
+
             collectionArr.push(newDoc);
         }
         this.createFlashcardPile(collectionArr, true);
     };
 
+    /**
+     * Calls GPT for each flashcard type.
+     */
     askGPT = async (callType: GPTCallType): Promise<string | undefined> => {
-        const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
+        let questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
         const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
         const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
         this._loading = true;
         const doc = DocCast(this.dataDoc[this.props.fieldKey + '_0']);
+
+        // if (true) {
+        //     const s = await this.youtubeUpload();
+
+        //     questionText = 'Question: ' + s;
+        // }
+
         if (callType == GPTCallType.CHATCARD) {
             if (StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '') {
                 this._loading = false;
@@ -461,7 +493,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
         try {
             console.log(queryText);
-            const res = await gptAPICall(callType == GPTCallType.QUIZ ? queryText : questionText, callType);
+            const res = await gptAPICall(questionText, GPTCallType.FLASHCARD);
             if (!res) {
                 console.error('GPT call failed');
                 return;
@@ -647,7 +679,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         const clearButton = (which: string) => (
             <Tooltip title={<div className="dash-tooltip">remove</div>}>
                 <div
-                    // style={{ position: 'relative', top: '0px', left: '10px' }}
                     ref={this._closeRef}
                     className={`clear-button ${which}`}
                     onPointerDown={e => this.closeDown(e, which)} // prevent triggering slider movement in registerSliding
@@ -660,18 +691,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             const whichDoc = DocCast(this.dataDoc[whichSlot]);
             const targetDoc = DocCast(whichDoc?.annotationOn, whichDoc);
             const layoutString = targetDoc ? '' : this.testForTextFields(whichSlot);
-            // whichDoc['backgroundColor'] = this.layoutDoc['backgroundColor'];
 
             return targetDoc || layoutString ? (
-                // <MathJaxContext config={this.mathJaxConfig}>
-                //     <MathJax>
                 <>
                     <DocumentView
                         // eslint-disable-next-line react/jsx-props-no-spreading
                         {...this._props}
                         fitWidth={undefined}
-                        NativeHeight={returnZero}
-                        NativeWidth={returnZero}
                         ignoreUsePath={layoutString ? true : undefined}
                         renderDepth={this.props.renderDepth + 1}
                         LayoutTemplateString={layoutString}
@@ -679,6 +705,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         containerViewPath={this._props.docViewPath}
                         moveDocument={whichSlot.endsWith('1') ? this.moveDoc1 : this.moveDoc2}
                         removeDocument={whichSlot.endsWith('1') ? this.remDoc1 : this.remDoc2}
+                        NativeWidth={this.layoutWidth}
+                        NativeHeight={this.layoutHeight}
                         isContentActive={() => this.childActive}
                         isDocumentActive={returnFalse}
                         dontSelect={returnTrue}
@@ -687,9 +715,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         hideLinkButton
                         pointerEvents={this.childActive ? undefined : returnNone}
                     />
-                    {/* </MathJax> */}
-                    {/* <div style={{ position: 'absolute', top: '-5px', left: '2px' }}>{layoutString ? null : clearButton(whichSlot)}</div> */}
-                    {/* </MathJaxContext> // placeholder image if doc is missingleft: `${NumCast(this.layoutDoc.width, 200) - 33}px` */}
                 </>
             ) : (
                 <div className="placeholder">
@@ -708,7 +733,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 }}
                 ref={ele => this.createDropTarget(ele, which, index)}>
                 {!this._isEmpty ? displayDoc(which) : null}
-                {/* {this.dataDoc[this.fieldKey + '_0'] !== 'empty' ? displayDoc(which) : null} */}
             </div>
         );
 
@@ -716,7 +740,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             const side = this.frontSide ? 1 : 0;
 
             // add text box to each side when comparison box is first created
-            // (!this.dataDoc[this.fieldKey + '_0'] && this.dataDoc[this._props.fieldKey + '_0'] !== 'empty')
             if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
                 const newDoc = Docs.Create.TextDocument(dataSplit[1]);
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index ed79888ae..45301247b 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -168,11 +168,12 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         Object.values(this._disposers).forEach(disposer => disposer?.());
     }
 
+    /**
+     * Find images from the unsplash api to add to flashcards.
+     */
     fetchImages = async () => {
         try {
             const { data } = await axios.get(`${API_URL}?query=${this._searchInput}&page=1&per_page=${1}&client_id=${process.env.VITE_API_KEY}`);
-            console.log('data', data);
-            console.log(data.results);
             const imageSnapshot = Docs.Create.ImageDocument(data.results[0].urls.small, {
                 _nativeWidth: Doc.NativeWidth(this.layoutDoc),
                 _nativeHeight: Doc.NativeHeight(this.layoutDoc),
@@ -326,8 +327,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         if (ctx) {
             this._imageRef && ctx.drawImage(this._imageRef, NumCast(this._marqueeref.current?.left) * scaling, NumCast(this._marqueeref.current?.top) * scaling, w, h, 0, 0, w, h);
         }
-        // canvas.style.zIndex = '2000000';
-        // document.body.appendChild(canvas);
         const blob = await ImageUtility.canvasToBlob(canvas);
         return ImageBox.selectUrlToBase64(blob);
     };
@@ -350,7 +349,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         Doc.SetNativeHeight(imageSnapshot[DocData], Doc.NativeHeight(this.layoutDoc));
         this._props.addDocument?.(imageSnapshot);
         DocUtils.MakeLink(imageSnapshot, this.getAnchor(true), { link_relationship: 'video snapshot' });
-        // link && (DocCast(link.link_anchor_2)[DocData].timecodeToHide = NumCast(DocCast(link.link_anchor_2).timecodeToShow) + 3);  // do we need to set an end time? should default to +0.1
         setTimeout(() => downX !== undefined && downY !== undefined && DocumentView.getFirstDocumentView(imageSnapshot)?.startDragging(downX, downY, dropActionType.move, true));
     };
 
@@ -371,7 +369,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     pushInfo = async (quiz: quizMode, i?: string) => {
         this._quizMode = quiz;
         this._loading = true;
-        console.log('JHSDKFJHKSDJFHKSJDHFKJSDHFKJHSDKF');
 
         const img = {
             file: i ? i : this.paths[0],
@@ -383,10 +380,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                 'Content-Type': 'application/json',
             },
         });
-
-        console.log('RESPONSE:');
-        console.log(response.data['boxes']);
-        console.log(response.data['text']);
         if (response.data['boxes'].length != 0) {
             this.createBoxes(response.data['boxes'], response.data['text']);
         } else {
@@ -394,6 +387,11 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         }
     };
 
+    /**
+     * Creates label boxes over text on the image to be filled in.
+     * @param boxes
+     * @param texts
+     */
     createBoxes = (boxes: [[[number, number]]], texts: [string]) => {
         const nscale = NumCast(this._props.PanelWidth()) * NumCast(this.layoutDoc._freeform_scale, 1);
         const nw = nscale / NumCast(this.dataDoc[this.fieldKey + '_nativeWidth']);
@@ -405,17 +403,13 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
 
             const newCol = Docs.Create.LabelDocument({
                 _width: width,
-                //width * NumCast(this.dataDoc[this.fieldKey + '_nativeWidth']),
                 _height: height,
-                //height * NumCast(this.dataDoc[this.fieldKey + '_nativeHeight']),
                 _layout_fitWidth: true,
                 title: '',
-                // _layout_autoHeight: true,
             });
             const scaling = 1 / (this._props.NativeDimScaling?.() || 1);
             newCol.x = coords[0][0] + NumCast(this._marqueeref.current?.left) * scaling;
             newCol.y = coords[0][1] + NumCast(this._marqueeref.current?.top) * scaling;
-            // newCol[DocData].text_fontSize = height + 'px';
 
             newCol.zIndex = 1000;
             newCol.forceActive = true;
@@ -428,12 +422,14 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         }
     };
 
+    /**
+     * Create flashcards from an image.
+     */
     getImageDesc = async () => {
         this._loading = true;
         try {
             const hrefBase64 = await this.createCanvas();
             const response = await gptImageLabel(hrefBase64, 'Make flashcards out of this image with each question and answer labeled as "question" and "answer". Do not label each flashcard and do not include asterisks: ');
-            console.log(response);
             AnchorMenu.Instance.transferToFlashcard(response, NumCast(this.layoutDoc['x']), NumCast(this.layoutDoc['y']));
         } catch (error) {
             console.log('Error');
@@ -535,15 +531,16 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         }
     };
 
+    /**
+     * Check whether the contents of the label boxes on an image are correct.
+     */
     check = () => {
         this._loading = true;
         this._quizBoxes.forEach(async doc => {
             const input = StrCast(doc[DocData].title);
-            console.log('INP: ' + StrCast(input) + '; DOC: ' + StrCast(doc.quiz));
             if (this._quizMode == quizMode.SMART && input) {
                 const questionText = 'Question: What was labeled in this image?';
                 const rubricText = ' Rubric: ' + StrCast(doc.quiz);
-                // const queryText = 'RealAnswer: ' + StrCast(doc.quiz) + '. UserAnswer: ' + input + '.';
                 const queryText =
                     questionText +
                     ' UserAnswer: ' +
@@ -553,7 +550,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                     '. One sentence and evaluate based on meaning, not wording. Provide a hex color at the beginning with a period after it on a scale of green (minor details missed) to red (big error) for how correct the answer is. Example: "#FFFFFF. Pasta is delicious."';
                 const response = await gptAPICall(queryText, GPTCallType.QUIZ);
                 const hexSent = this.extractHexAndSentences(response);
-                console.log(hexSent.hexNumber);
                 doc.quiz = hexSent.sentences?.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
                 doc.backgroundColor = '#' + hexSent.hexNumber;
             } else {
@@ -561,7 +557,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                 doc.backgroundColor = match ? '#11c249' : '#eb2d2d';
             }
             doc.showQuiz = true;
-            // console.log(this.compareWords(input, StrCast(doc.quiz)) ? 'Match' : 'No Match');
         });
         this._loading = false;
     };
@@ -577,8 +572,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     exitQuizMode = () => {
         this._quizMode = quizMode.NONE;
         this._quizBoxes.forEach(doc => {
-            // this._props.removeDocument?.(DocCast(doc));
-            // this._props.DocumentView?.()._props.removeDocument?.(doc);
             this.removeDocument?.(doc);
         });
         this._quizBoxes = [];
@@ -595,7 +588,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         if (field) {
             const funcs: ContextMenuProps[] = [];
             const quizes: ContextMenuProps[] = [];
-            // funcs.push({ description: 'Create ai flashcards', event: () => this.getImageDesc(), icon: 'id-card' });
             quizes.push({
                 description: 'Smart Check',
                 event: this._quizMode == quizMode.NONE ? () => this.pushInfo(quizMode.SMART) : this.exitQuizMode,
@@ -606,19 +598,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                 event: this._quizMode == quizMode.NONE ? () => this.pushInfo(quizMode.NORMAL) : this.exitQuizMode,
                 icon: 'pencil',
             });
-            // funcs.push({ description: 'Quiz Mode', subitems: optionItems, icon: 'eye' });
-            // funcs.push({
-            //     description: 'Quiz Mode',
-            //     event: !this._quizMode
-            //         ? () => this.pushInfo(false)
-            //         : () => {
-            //               this._quizMode = false;
-            //           },
-            //     icon: 'redo-alt',
-            // });
-            // funcs.push({ description: 'Get Text', event: this.check, icon: 'redo-alt' });
-            // funcs.push({ description: 'Get Labels2', event: this.getImageLabels2, icon: 'redo-alt' });
-            // funcs.push({ description: 'Get Labels', event: this.getImageLabels, icon: 'redo-alt' });
             funcs.push({ description: 'Rotate Clockwise 90', event: this.rotate, icon: 'redo-alt' });
             funcs.push({ description: `Show ${this.layoutDoc._showFullRes ? 'Dynamic Res' : 'Full Res'}`, event: this.resolution, icon: 'expand' });
             funcs.push({ description: 'Set Native Pixel Size', event: this.setNativeSize, icon: 'expand-arrows-alt' });
-- 
cgit v1.2.3-70-g09d2


From 6428e1a6235d609ab28f8f3b6d1029b852d01c99 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Sun, 29 Sep 2024 16:15:50 -0400
Subject: comparison box functionality

---
 src/client/views/nodes/ComparisonBox.tsx | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 8fbcb74cb..f05b672e9 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -234,7 +234,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     clearDoc = undoable((fieldKey: string) => {
         this.dataDoc[fieldKey] = undefined;
-        this._isEmpty = true;
     }, 'clear doc');
 
     moveDoc = (doc: Doc, addDocument: (document: Doc | Doc[]) => boolean, which: string) => this.remDoc(doc, which) && addDocument(doc);
@@ -716,6 +715,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         hideLinkButton
                         pointerEvents={this.childActive ? undefined : returnNone}
                     />
+                    {!this.Document._layout_isFlashcard ? clearButton(whichSlot) : null}
                 </>
             ) : (
                 <div className="placeholder">
@@ -851,7 +851,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         left: `calc(${this.clipWidth + '%'} - 0.5px)`,
                         cursor: this.clipWidth < 5 ? 'e-resize' : this.clipWidth / 100 > (this._props.PanelWidth() - 5) / this._props.PanelWidth() ? 'w-resize' : undefined,
                     }}
-                    onPointerDown={e => !this.childActive && this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
+                    onPointerDown={e => !this._isAnyChildContentActive && this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
                 >
                     <div className="slide-handle" />
                 </div>
-- 
cgit v1.2.3-70-g09d2


From 658fe77c26712a691ad346e187edeb587ec5c139 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Sun, 29 Sep 2024 16:21:57 -0400
Subject: more comments

---
 src/client/views/nodes/ComparisonBox.tsx | 29 ++++++++++++++++++++++-------
 1 file changed, 22 insertions(+), 7 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index f05b672e9..30237ac64 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -367,6 +367,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this._props.DocumentView?.()._props.addDocument?.(newAudio);
     };
 
+    /**
+     * Gets the transcription of an audio recording by sending the
+     * recording to backend.
+     */
     pushInfo = async () => {
         const audio = {
             file: this._audio.url,
@@ -377,7 +381,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             },
         });
         this.Document.phoneticTranscription = response.data['transcription'];
-        console.log('RESPONSE: ' + response.data['transcription']);
     };
 
     getYouTubeVideoId = (url: string) => {
@@ -386,6 +389,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return match && match[2].length === 11 ? match[2] : null;
     };
 
+    /**
+     * Gets the transcript of a youtube video by sending the video url to the backend.
+     * @returns transcription of youtube recording
+     */
     youtubeUpload = async () => {
         const audio = {
             file: this.getYouTubeVideoId(StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text)),
@@ -477,12 +484,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this._loading = true;
         const doc = DocCast(this.dataDoc[this.props.fieldKey + '_0']);
 
-        // if (true) {
-        //     const s = await this.youtubeUpload();
-
-        //     questionText = 'Question: ' + s;
-        // }
-
         if (callType == GPTCallType.CHATCARD) {
             if (StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '') {
                 this._loading = false;
@@ -531,6 +532,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
     };
 
+    /**
+     * Ask GPT for advice on how to improve speech by comparing the phonetic transcription of
+     * a users audio recording with the phonetic transcription of their intended sentence.
+     * @param phonemes
+     */
     askGPTPhonemes = async (phonemes: string) => {
         const sentence = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
         const phon = 'w ʌ ɪ z j ɔː ɹ n e ɪ m ';
@@ -575,6 +581,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
     };
 
+    /**
+     * Display a user's speech to text result.
+     * @param e
+     */
     handleResult = (e: SpeechRecognitionEvent) => {
         let interimTranscript = '';
         let finalTranscript = '';
@@ -589,6 +599,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this._inputValue += finalTranscript;
     };
 
+    /**
+     * Get images from unsplash api and place that will be placed inside generated flashcard.
+     * @param selection
+     * @returns Image Document
+     */
     fetchImages = async (selection: string) => {
         try {
             const { data } = await axios.get(`${API_URL}?query=${selection}&page=1&per_page=${1}&client_id=Q4zruu6k6lum2kExiGhLNBJIgXDxD6NNj0SRHH_XXU0`);
-- 
cgit v1.2.3-70-g09d2


From 0d34ea8ab82be1140916a48df4e46ef15c7b23db Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Sun, 29 Sep 2024 16:54:22 -0400
Subject: comments

---
 src/client/views/nodes/ComparisonBox.tsx | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 30237ac64..9ac8d7c52 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -13,7 +13,7 @@ import { DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Type
 import { GPTCallType, gptAPICall, gptImageLabel } from '../../apis/gpt/GPT';
 import '../pdf/GPTPopup/GPTPopup.scss';
 import { DocUtils } from '../../documents/DocUtils';
-import { DocumentType } from '../../documents/DocumentTypes';
+import { CollectionViewType, DocumentType } from '../../documents/DocumentTypes';
 import { Docs } from '../../documents/Documents';
 import { DragManager } from '../../util/DragManager';
 import { dropActionType } from '../../util/DropActionTypes';
@@ -311,6 +311,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
     };
 
+    /**
+     * Set up speech to text tool.
+     */
     setListening = () => {
         const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
         if (SpeechRecognition) {
-- 
cgit v1.2.3-70-g09d2


From dd95b5030ec2d66d5e02acf2140a2e48fd77f739 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Mon, 30 Sep 2024 14:46:50 -0400
Subject: from last.. fixed eslint

---
 eslint.config.mjs                        |  2 +-
 src/client/views/nodes/ComparisonBox.tsx | 82 ++++++++++++++------------------
 2 files changed, 37 insertions(+), 47 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/eslint.config.mjs b/eslint.config.mjs
index aebdc20d0..f7063caa5 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -48,7 +48,7 @@ export default [
             'no-return-assign': 'error',
             'no-await-in-loop': 'error',
             'no-loop-func': 'error',
-            '@typescript-eslint/no-cond-assign': 'error',
+            'no-cond-assign': 'error',
             'no-use-before-define': 'error',
             '@typescript-eslint/no-explicit-any': 'error',
             'no-restricted-globals': ['error', 'event'],
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 9ac8d7c52..cc20f0c57 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -1,41 +1,34 @@
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { MathJax, MathJaxContext } from 'better-react-mathjax';
 import { Tooltip } from '@mui/material';
+import axios from 'axios';
 import { action, computed, makeObservable, observable, reaction } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
-import { returnFalse, returnNone, returnTrue, returnZero, setupMoveUpEvents } from '../../../ClientUtils';
+import ReactLoading from 'react-loading';
+import { returnFalse, returnNone, returnTrue, setupMoveUpEvents } from '../../../ClientUtils';
 import { emptyFunction } from '../../../Utils';
 import { Doc, Opt } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
+import { Id } from '../../../fields/FieldSymbols';
 import { RichTextField } from '../../../fields/RichTextField';
 import { DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
+import { nullAudio } from '../../../fields/URLField';
 import { GPTCallType, gptAPICall, gptImageLabel } from '../../apis/gpt/GPT';
-import '../pdf/GPTPopup/GPTPopup.scss';
-import { DocUtils } from '../../documents/DocUtils';
+import { DocUtils, FollowLinkScript } from '../../documents/DocUtils';
 import { CollectionViewType, DocumentType } from '../../documents/DocumentTypes';
 import { Docs } from '../../documents/Documents';
 import { DragManager } from '../../util/DragManager';
 import { dropActionType } from '../../util/DropActionTypes';
 import { undoable } from '../../util/UndoManager';
+import { ContextMenu } from '../ContextMenu';
 import { ViewBoxAnnotatableComponent } from '../DocComponent';
 import { PinDocView, PinProps } from '../PinFuncs';
 import { StyleProp } from '../StyleProp';
+import '../pdf/GPTPopup/GPTPopup.scss';
 import './ComparisonBox.scss';
 import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FormattedTextBox } from './formattedText/FormattedTextBox';
-import ReactLoading from 'react-loading';
-import { ContextMenu } from '../ContextMenu';
-import { ContextMenuProps } from '../ContextMenuItem';
-import { tickStep } from 'd3';
-import { CollectionCarouselView } from '../collections/CollectionCarouselView';
-import { FollowLinkScript } from '../../documents/DocUtils';
-import { schema } from '../nodes/formattedText/schema_rts';
-import { Id } from '../../../fields/FieldSymbols';
-import axios from 'axios';
-import ReactMarkdown from 'react-markdown';
-import { WebField, nullAudio } from '../../../fields/URLField';
 
 const API_URL = 'https://api.unsplash.com/search/photos';
 
@@ -118,26 +111,26 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             <div>
                 <Tooltip
                     title={this.frontSide ? <div className="dash-tooltip">Flip to front side to use GPT</div> : <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>}>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={e => (!this.frontSide ? this.findImageTags() : null)}>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={() => (!this.frontSide ? this.findImageTags() : null)}>
                         <FontAwesomeIcon icon="lightbulb" size="xl" />
                     </div>
                 </Tooltip>
                 {DocCast(this.Document.embedContainer)?.type_collection === CollectionViewType.Carousel ? null : (
                     <div>
                         <Tooltip title={<div>Create a flashcard pile</div>}>
-                            <div style={{ position: 'absolute', bottom: '3px', right: '74px', cursor: 'pointer' }} onPointerDown={e => this.createFlashcardPile([this.Document], false)}>
+                            <div style={{ position: 'absolute', bottom: '3px', right: '74px', cursor: 'pointer' }} onPointerDown={() => this.createFlashcardPile([this.Document], false)}>
                                 <FontAwesomeIcon icon="folder-plus" size="xl" />
                             </div>
                         </Tooltip>
                         <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
-                            <div style={{ position: 'absolute', bottom: '3px', right: '104px', cursor: 'pointer' }} onClick={e => this.gptFlashcardPile()}>
+                            <div style={{ position: 'absolute', bottom: '3px', right: '104px', cursor: 'pointer' }} onClick={() => this.gptFlashcardPile()}>
                                 <FontAwesomeIcon icon="layer-group" size="xl" />
                             </div>
                         </Tooltip>
                     </div>
                 )}
                 <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }} onClick={e => this.handleHover()}>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }} onClick={() => this.handleHover()}>
                         <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="hand-point-up" size="xl" />
                     </div>
                 </Tooltip>
@@ -354,13 +347,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     openContextMenu = (x: number, y: number, evalu: boolean) => {
         ContextMenu.Instance.clearItems();
-        ContextMenu.Instance.addItem({ description: 'English', event: e => this.setLanguage('en-US', 0), icon: 'question' }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Spanish', event: e => this.setLanguage('es-ES', 1 ), icon: 'question'}); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'French', event: e => this.setLanguage('fr-FR', 2), icon: 'question' }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Italian', event: e => this.setLanguage('it-IT', 3), icon: 'question' }); //prettier-ignore
-        if (!evalu) ContextMenu.Instance.addItem({ description: 'Mandarin Chinese', event: e => this.setLanguage('zh-CH', 4), icon: 'question' }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Japanese', event: e => this.setLanguage('ja', 5), icon: 'question' }); //prettier-ignore
-        ContextMenu.Instance.addItem({ description: 'Korean', event: e => this.setLanguage('ko', 6), icon: 'question' }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'English', event: () => this.setLanguage('en-US', 0), icon: 'question' }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Spanish', event: () => this.setLanguage('es-ES', 1 ), icon: 'question'}); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'French', event: () => this.setLanguage('fr-FR', 2), icon: 'question' }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Italian', event: () => this.setLanguage('it-IT', 3), icon: 'question' }); //prettier-ignore
+        if (!evalu) ContextMenu.Instance.addItem({ description: 'Mandarin Chinese', event: () => this.setLanguage('zh-CH', 4), icon: 'question' }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Japanese', event: () => this.setLanguage('ja', 5), icon: 'question' }); //prettier-ignore
+        ContextMenu.Instance.addItem({ description: 'Korean', event: () => this.setLanguage('ko', 6), icon: 'question' }); //prettier-ignore
         ContextMenu.Instance.displayMenu(x, y);
     };
 
@@ -387,7 +380,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     };
 
     getYouTubeVideoId = (url: string) => {
-        const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/;
+        const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=|\?v=)([^#&?]*).*/;
         const match = url.match(regExp);
         return match && match[2].length === 11 ? match[2] : null;
     };
@@ -418,7 +411,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         newCol['x'] = this.layoutDoc['x'];
         newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
         newCol.type_collection = 'carousel';
-        for (var i = 0; i < collectionArr.length; i++) {
+        for (let i = 0; i < collectionArr.length; i++) {
             DocCast(collectionArr[i])[DocData].embedContainer = newCol;
         }
 
@@ -436,10 +429,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * Transfers the content of flashcards into a flashcard pile.
      */
     gptFlashcardPile = async () => {
-        var text = await this.askGPT(GPTCallType.STACK);
-        var senArr = text?.split('Question: ');
-        var collectionArr: Doc[] = [];
-        for (let i = 1; i < senArr?.length!; i++) {
+        const text = await this.askGPT(GPTCallType.STACK);
+        const senArr = text?.split('Question: ') ?? [];
+        const collectionArr: Doc[] = [];
+        for (let i = 1; i < senArr.length; i++) {
             const newDoc = Docs.Create.ComparisonDocument(senArr![i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
 
             if (StrCast(senArr![i]).includes('Keyword: ')) {
@@ -481,11 +474,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * Calls GPT for each flashcard type.
      */
     askGPT = async (callType: GPTCallType): Promise<string | undefined> => {
-        let questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
+        const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
         const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
         const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
         this._loading = true;
-        const doc = DocCast(this.dataDoc[this.props.fieldKey + '_0']);
 
         if (callType == GPTCallType.CHATCARD) {
             if (StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '') {
@@ -511,11 +503,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 this._loading = false;
                 return res;
             } else if (callType === GPTCallType.STACK) {
+                /* empty */
             }
             this._loading = false;
             return res;
         } catch (err) {
-            console.error('GPT call failed');
+            console.error('GPT call failed', err);
         }
         this._loading = false;
     };
@@ -527,7 +520,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         if (c?.length === 0) await this.askGPT(GPTCallType.CHATCARD);
         if (c) {
             this._loading = true;
-            for (let i of c) {
+            for (const i of c) {
                 console.log(i);
                 if (i.className !== 'ProseMirror-separator') await this.getImageDesc(i.src);
             }
@@ -653,7 +646,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
             DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = response;
         } catch (error) {
-            console.log('Error');
+            console.log('Error', error);
         }
     };
 
@@ -692,6 +685,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return layoutTemplateString;
     };
 
+    childActiveFunc = () => this.childActive;
+
     render() {
         const clearButton = (which: string) => (
             <Tooltip title={<div className="dash-tooltip">remove</div>}>
@@ -712,7 +707,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             return targetDoc || layoutString ? (
                 <>
                     <DocumentView
-                        // eslint-disable-next-line react/jsx-props-no-spreading
                         {...this._props}
                         showTags={undefined}
                         fitWidth={undefined}
@@ -725,7 +719,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         removeDocument={whichSlot.endsWith('1') ? this.remDoc1 : this.remDoc2}
                         NativeWidth={this.layoutWidth}
                         NativeHeight={this.layoutHeight}
-                        isContentActive={() => this.childActive}
+                        isContentActive={this.childActiveFunc}
                         isDocumentActive={returnFalse}
                         dontSelect={returnTrue}
                         whenChildContentsActiveChanged={this.whenChildContentsActiveChanged}
@@ -837,13 +831,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             return (
                 <div
                     className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
-                    style={{ display: 'flex', flexDirection: 'column', overflow: 'hidden' }}
-                    onMouseEnter={() => {
-                        this.hoverFlip(false);
-                    }}
-                    onMouseLeave={() => {
-                        this.hoverFlip(true);
-                    }}>
+                    style={{ display: 'flex', flexDirection: 'column' }}
+                    onMouseEnter={() => this.hoverFlip(true)}
+                    onMouseLeave={() => this.hoverFlip(false)}>
                     {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
                     {this._loading ? (
                         <div className="loading-spinner" style={{ position: 'absolute' }}>
-- 
cgit v1.2.3-70-g09d2


From 92d13a93ec871f3f3048b7344528e618845ad76f Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Mon, 30 Sep 2024 16:20:43 -0400
Subject: a bunch of comparisonBox cleanup and restoring of original click to
 animate between before/after.

---
 src/client/views/nodes/ComparisonBox.tsx | 157 ++++++++++---------------------
 src/client/views/nodes/ImageBox.tsx      |   7 +-
 2 files changed, 54 insertions(+), 110 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index cc20f0c57..d2a032d79 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -1,11 +1,11 @@
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { Tooltip } from '@mui/material';
 import axios from 'axios';
-import { action, computed, makeObservable, observable, reaction } from 'mobx';
+import { IReactionDisposer, action, computed, makeObservable, observable, reaction } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import ReactLoading from 'react-loading';
-import { returnFalse, returnNone, returnTrue, setupMoveUpEvents } from '../../../ClientUtils';
+import { returnFalse, returnNone, returnTrue, returnZero, setupMoveUpEvents } from '../../../ClientUtils';
 import { emptyFunction } from '../../../Utils';
 import { Doc, Opt } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
@@ -37,7 +37,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     public static LayoutString(fieldKey: string) {
         return FieldView.LayoutString(ComparisonBox, fieldKey);
     }
+    private SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+    private _closeRef = React.createRef<HTMLDivElement>();
     private _disposers: (DragManager.DragDropDisposer | undefined)[] = [undefined, undefined];
+    private _reactDisposer: IReactionDisposer | undefined;
     constructor(props: FieldViewProps) {
         super(props);
         makeObservable(this);
@@ -48,38 +51,19 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @observable private _outputValue = '';
     @observable private _loading = false;
     @observable private _isEmpty = false;
-    @observable private _audio: Doc = Docs.Create.TextDocument('');
-    @observable childActive = false;
-    @observable _yRelativeToTop: boolean = true;
-    @observable _animating = '';
-    @observable mathJaxConfig = {
-        loader: { load: ['input/asciimath'] },
-    };
+    @observable private _childActive = false;
+    @observable private _animating = '';
     @observable private _listening = false;
-    @observable transcriptElement = '';
-    @observable private frontSide = false;
-    SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+    @observable private _frontSide = false;
     @observable recognition = new this.SpeechRecognition();
-    _closeRef = React.createRef<HTMLDivElement>();
-
-    get revealOp() {
-        return this.layoutDoc[`_${this._props.fieldKey}_revealOp`];
-    }
-    get clipHeightKey() {
-        return '_' + this._props.fieldKey + '_clipHeight';
-    }
-
-    get clipWidthKey() {
-        return '_' + this._props.fieldKey + '_clipWidth';
-    }
-
-    @computed get clipWidth() {
-        return NumCast(this.layoutDoc[this.clipWidthKey], 50);
-    }
 
-    @computed get clipHeight() {
-        return NumCast(this.layoutDoc[this.clipHeightKey], 200);
-    }
+    @computed get revealOpKey()   { return `_${this._props.fieldKey}_revealOp`; } // prettier-ignore
+    @computed get clipHeightKey() { return `_${this._props.fieldKey}_clipHeight`; } // prettier-ignore
+    @computed get clipWidthKey()  { return `_${this._props.fieldKey}_clipWidth`;  } // prettier-ignore
+    @computed get clipWidth()     { return NumCast(this.layoutDoc[this.clipWidthKey], 50); } // prettier-ignore
+    @computed get clipHeight()    { return NumCast(this.layoutDoc[this.clipHeightKey], 200);  } // prettier-ignore
+    @computed get revealOp()      { return StrCast(this.layoutDoc[this.revealOpKey]); } // prettier-ignore
+    set revealOp(value:string)    { this.layoutDoc[this.revealOpKey] = value; } // prettier-ignore
 
     @computed get overlayAlternateIcon() {
         return (
@@ -94,8 +78,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         })
                     }
                     style={{
-                        background: this.revealOp === 'hover' ? 'gray' : this.frontSide ? 'white' : 'black',
-                        color: this.revealOp === 'hover' ? 'black' : this.frontSide ? 'black' : 'white',
+                        background: this.revealOp === 'hover' ? 'gray' : this._frontSide ? 'white' : 'black',
+                        color: this.revealOp === 'hover' ? 'black' : this._frontSide ? 'black' : 'white',
                         display: 'inline-block',
                     }}>
                     <div key="alternate" className="formattedTextBox-flip">
@@ -110,8 +94,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return (
             <div>
                 <Tooltip
-                    title={this.frontSide ? <div className="dash-tooltip">Flip to front side to use GPT</div> : <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>}>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={() => (!this.frontSide ? this.findImageTags() : null)}>
+                    title={this._frontSide ? <div className="dash-tooltip">Flip to front side to use GPT</div> : <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>}>
+                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={() => (!this._frontSide ? this.findImageTags() : null)}>
                         <FontAwesomeIcon icon="lightbulb" size="xl" />
                     </div>
                 </Tooltip>
@@ -140,40 +124,37 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     @action handleHover = () => {
         if (this.revealOp === 'hover') {
-            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip';
+            this.revealOp = 'flip';
             this.Document.forceActive = false;
         } else {
-            this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover';
+            this.revealOp = 'hover';
             this.Document.forceActive = true;
         }
     };
 
     @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
         this._inputValue = e.target.value;
-        console.log(this._inputValue);
     };
 
     @action activateContent = () => {
-        this.childActive = true;
+        this._childActive = true;
     };
 
     @action handleRenderClick = () => {
-        this.frontSide = !this.frontSide;
+        this._frontSide = !this._frontSide;
     };
 
     @action handleRenderGPTClick = async () => {
         const phonTrans = DocCast(this.Document.audio) ? DocCast(this.Document.audio).phoneticTranscription : undefined;
         if (phonTrans) {
             this._inputValue = StrCast(phonTrans);
-            console.log('INPUT:' + this._inputValue);
             this.askGPTPhonemes(this._inputValue);
         } else if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
-        this.frontSide = false;
+        this._frontSide = false;
         this._outputValue = '';
     };
 
-    @action
-    private onPointerMove = ({ movementX }: PointerEvent) => {
+    onPointerMove = ({ movementX }: PointerEvent) => {
         const width = movementX * this.ScreenToLocalBoxXf().Scale + (this.clipWidth / 100) * this._props.PanelWidth();
         if (width && width > 5 && width < this._props.PanelWidth()) {
             this.layoutDoc[this.clipWidthKey] = (width * 100) / this._props.PanelWidth();
@@ -183,12 +164,16 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     componentDidMount() {
         this._props.setContentViewBox?.(this);
-        reaction(
+        this._reactDisposer = reaction(
             () => this._props.isSelected(), // when this reaction should update
-            selected => !selected && (this.childActive = false) // what it should update to
+            selected => !selected && (this._childActive = false) // what it should update to
         );
     }
 
+    componentWillUnmount() {
+        this._reactDisposer?.();
+    }
+
     protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
         this._disposers[disposerId]?.();
         if (ele) {
@@ -241,7 +226,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             this.dataDoc[which] = undefined;
             return true;
         }
-        console.log('FALSE');
         return false;
     };
 
@@ -271,7 +255,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     remDoc1 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_1'), true);
     remDoc2 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_2'), true);
 
-    private registerSliding = (e: React.PointerEvent<HTMLDivElement>, targetWidth: number) => {
+    registerSliding = (e: React.PointerEvent<HTMLDivElement>, targetWidth: number) => {
         if (e.button !== 2) {
             setupMoveUpEvents(
                 this,
@@ -280,7 +264,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 emptyFunction,
                 action((moveEv, doubleTap) => {
                     if (doubleTap) {
-                        this.childActive = true;
+                        this._childActive = true;
                         if (!this.dataDoc[this.fieldKey + '_1'] && !this.dataDoc[this.fieldKey]) this.dataDoc[this.fieldKey + '_1'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
                         if (!this.dataDoc[this.fieldKey + '_2'] && !this.dataDoc[this.fieldKey + '_alternate']) this.dataDoc[this.fieldKey + '_2'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
                     }
@@ -288,7 +272,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 false,
                 undefined,
                 action(() => {
-                    if (this.childActive) return;
+                    if (this._childActive) return;
                     this._animating = 'all 200ms';
                     // on click, animate slider movement to the targetWidth
                     this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
@@ -308,8 +292,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * Set up speech to text tool.
      */
     setListening = () => {
-        const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
-        if (SpeechRecognition) {
+        if (this.SpeechRecognition) {
             this.recognition.continuous = true;
             this.recognition.interimResults = true;
             this.recognition.lang = 'en-US';
@@ -340,8 +323,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             case 'fr-FR': return 'French'; //prettier-ignore
             case 'it-IT': return 'Italian'; //prettier-ignore
             case 'zh-CH': return 'Mandarin Chinese'; //prettier-ignore
-            case 'ja': return 'Japanese'; //prettier-ignore
-            default: return 'Korean'; //prettier-ignore
+            case 'ja':    return 'Japanese'; //prettier-ignore
+            default:      return 'Korean'; //prettier-ignore
         }
     };
 
@@ -363,44 +346,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this._props.DocumentView?.()._props.addDocument?.(newAudio);
     };
 
-    /**
-     * Gets the transcription of an audio recording by sending the
-     * recording to backend.
-     */
-    pushInfo = async () => {
-        const audio = {
-            file: this._audio.url,
-        };
-        const response = await axios.post('http://localhost:105/recognize/', audio, {
-            headers: {
-                'Content-Type': 'application/json',
-            },
-        });
-        this.Document.phoneticTranscription = response.data['transcription'];
-    };
-
-    getYouTubeVideoId = (url: string) => {
-        const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=|\?v=)([^#&?]*).*/;
-        const match = url.match(regExp);
-        return match && match[2].length === 11 ? match[2] : null;
-    };
-
-    /**
-     * Gets the transcript of a youtube video by sending the video url to the backend.
-     * @returns transcription of youtube recording
-     */
-    youtubeUpload = async () => {
-        const audio = {
-            file: this.getYouTubeVideoId(StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text)),
-        };
-        const response = await axios.post('http://localhost:105/youtube/', audio, {
-            headers: {
-                'Content-Type': 'application/json',
-            },
-        });
-        return response.data['transcription'];
-    };
-
     createFlashcardPile(collectionArr: Doc[], gpt: boolean) {
         const newCol = Docs.Create.CarouselDocument(collectionArr, {
             _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250) + 50,
@@ -497,7 +442,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
             } else if (callType == GPTCallType.QUIZ) {
                 console.log(this._inputValue);
-                this.frontSide = true;
+                this._frontSide = true;
                 this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
             } else if (callType === GPTCallType.FLASHCARD) {
                 this._loading = false;
@@ -652,11 +597,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     @action
     flipFlashcard = () => {
-        this.frontSide = !this.frontSide;
+        this._frontSide = !this._frontSide;
     };
 
     hoverFlip = (side: boolean) => {
-        if (this.revealOp === 'hover') this.frontSide = side;
+        if (this.revealOp === 'hover') this._frontSide = side;
     };
 
     testForTextFields = (whichSlot: string) => {
@@ -685,7 +630,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return layoutTemplateString;
     };
 
-    childActiveFunc = () => this.childActive;
+    childActiveFunc = () => this._childActive;
 
     render() {
         const clearButton = (which: string) => (
@@ -709,7 +654,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     <DocumentView
                         {...this._props}
                         showTags={undefined}
-                        fitWidth={undefined}
+                        fitWidth={undefined} // set to returnTrue to make images fill the comparisonBox-- should be a user option
                         ignoreUsePath={layoutString ? true : undefined}
                         renderDepth={this.props.renderDepth + 1}
                         LayoutTemplateString={layoutString}
@@ -717,15 +662,15 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         containerViewPath={this._props.docViewPath}
                         moveDocument={whichSlot.endsWith('1') ? this.moveDoc1 : this.moveDoc2}
                         removeDocument={whichSlot.endsWith('1') ? this.remDoc1 : this.remDoc2}
-                        NativeWidth={this.layoutWidth}
-                        NativeHeight={this.layoutHeight}
+                        NativeWidth={returnZero}
+                        NativeHeight={returnZero}
                         isContentActive={this.childActiveFunc}
                         isDocumentActive={returnFalse}
                         dontSelect={returnTrue}
                         whenChildContentsActiveChanged={this.whenChildContentsActiveChanged}
-                        styleProvider={this.childActive ? this._props.styleProvider : this.docStyleProvider}
+                        styleProvider={this._childActive ? this._props.styleProvider : this.docStyleProvider}
                         hideLinkButton
-                        pointerEvents={this.childActive ? undefined : returnNone}
+                        pointerEvents={this._childActive ? undefined : returnNone}
                     />
                     {!this.Document._layout_isFlashcard ? clearButton(whichSlot) : null}
                 </>
@@ -742,7 +687,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 style={{ width: this._props.PanelWidth() }}
                 onPointerDown={e => {
                     this.registerSliding(e, cover);
-                    this.activateContent();
+                    this.Document._layout_isFlashcard && this.activateContent();
                 }}
                 ref={ele => this.createDropTarget(ele, which, index)}>
                 {!this._isEmpty ? displayDoc(which) : null}
@@ -750,7 +695,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         );
 
         if (this.Document._layout_isFlashcard) {
-            const side = this.frontSide ? 1 : 0;
+            const side = this._frontSide ? 1 : 0;
 
             // add text box to each side when comparison box is first created
             if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
@@ -773,14 +718,14 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
                         <div className="input-box">
                             <textarea
-                                value={this.frontSide ? this._outputValue : this._inputValue}
+                                value={this._frontSide ? this._outputValue : this._inputValue}
                                 onChange={this.handleInputChange}
                                 onScroll={e => {
                                     e.stopPropagation();
                                     e.preventDefault();
                                 }}
                                 placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
-                                readOnly={this.frontSide}></textarea>
+                                readOnly={this._frontSide}></textarea>
 
                             {this._loading ? (
                                 <div className="loading-spinner" style={{ position: 'absolute' }}>
@@ -812,7 +757,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                     Evaluate Pronunciation
                                 </button>
 
-                                {!this.frontSide ? (
+                                {!this._frontSide ? (
                                     <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
                                         Submit
                                     </button>
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index ae9e70e8d..509a0c8d7 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -25,7 +25,7 @@ import { Networking } from '../../Network';
 import { DragManager } from '../../util/DragManager';
 import { dropActionType } from '../../util/DropActionTypes';
 import { SnappingManager } from '../../util/SnappingManager';
-import { undoBatch } from '../../util/UndoManager';
+import { undoable, undoBatch } from '../../util/UndoManager';
 import { CollectionFreeFormView } from '../collections/collectionFreeForm/CollectionFreeFormView';
 import { ContextMenu } from '../ContextMenu';
 import { ContextMenuProps } from '../ContextMenuItem';
@@ -195,8 +195,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         const images = await this.fetchImages();
     };
 
-    @undoBatch
-    drop = (e: Event, de: DragManager.DropEvent) => {
+    drop = undoable((e: Event, de: DragManager.DropEvent) => {
         if (de.complete.docDragData) {
             let added: boolean | undefined;
             const targetIsBullseye = (ele: HTMLElement): boolean => {
@@ -225,7 +224,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
             return added;
         }
         return false;
-    };
+    }, 'image drop');
 
     @undoBatch
     resolution = () => {
-- 
cgit v1.2.3-70-g09d2


From fa54fdf2bf9bf8523da393a81ec1ac1cd4fa0f4c Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Sun, 6 Oct 2024 15:11:20 -0400
Subject: comments

---
 src/client/views/nodes/AudioBox.tsx       |  3 --
 src/client/views/nodes/ComparisonBox.scss | 44 ------------------------
 src/client/views/nodes/ComparisonBox.tsx  | 13 ++++++-
 src/client/views/nodes/ImageBox.tsx       | 57 +++++++++++++++++++++++++++++--
 src/client/views/nodes/LabelBox.tsx       |  8 +----
 src/client/views/nodes/PDFBox.tsx         |  5 +--
 src/client/views/pdf/PDFViewer.tsx        | 43 -----------------------
 7 files changed, 69 insertions(+), 104 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/AudioBox.tsx b/src/client/views/nodes/AudioBox.tsx
index 8056ced1e..6a918664c 100644
--- a/src/client/views/nodes/AudioBox.tsx
+++ b/src/client/views/nodes/AudioBox.tsx
@@ -297,7 +297,6 @@ export class AudioBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
             },
         });
         this.Document[DocData].phoneticTranscription = response.data['transcription'];
-        console.log('RESPONSE: ' + response.data['transcription']);
     };
 
     youtubeUpload = async () => {
@@ -310,13 +309,11 @@ export class AudioBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                 'Content-Type': 'application/json',
             },
         });
-        console.log('RESPONSE: ' + response.data['transcription']);
     };
 
     // context menu
     specificContextMenu = (): void => {
         const funcs: ContextMenuProps[] = [];
-        // funcs.push({ description: 'Push info', event: this.pushInfo, icon: 'redo-alt' });
 
         funcs.push({
             description: 'Youtube',
diff --git a/src/client/views/nodes/ComparisonBox.scss b/src/client/views/nodes/ComparisonBox.scss
index da1d352f2..b7307f3a3 100644
--- a/src/client/views/nodes/ComparisonBox.scss
+++ b/src/client/views/nodes/ComparisonBox.scss
@@ -30,12 +30,10 @@
         padding-top: 5px;
         padding-left: 5px;
         padding-right: 5px;
-        // width: 80%;
         border-radius: 2px;
         height: 17%;
         display: inline-block;
         bottom: 0;
-        // right: 0;
 
         &.schema-header-button {
             color: gray;
@@ -57,28 +55,11 @@
         }
         &.submit {
             width: 40%;
-            // float: right;
-
-            // position: absolute;
-            // position: 10px;
-            // padding-left: 35%;
-            // padding-right: 80%;
-            // // width: 80px;
-            // // right: 0;
-            // right: 0;
-            // bottom: 0;
         }
         &.record {
             width: 20%;
             float: left;
             border-radius: 2px;
-            // right: 0;
-            // height: 30%;
-        }
-
-        button {
-            // flex: 1;
-            // position: relative;
         }
     }
 
@@ -128,7 +109,6 @@
     textarea {
         flex: 1;
         padding: 10px;
-        // position: relative;
         resize: none;
         position: 'absolute';
         width: '91%';
@@ -235,7 +215,6 @@
     top: 10px;
     left: 10px;
     z-index: 200;
-    // padding: 5px;
     background: #dfdfdf;
     pointer-events: none;
 }
@@ -249,29 +228,8 @@
             display: flex;
         }
     }
-
-    // .input-box {
-    //     position: absolute;
-    //     padding: 10px;
-    // }
-    // input[type='text'] {
-    //     flex: 1;
-    //     position: relative;
-    //     margin-right: 10px;
-    //     width: 100px;
-    // }
 }
 
-// .quiz-card {
-//     position: relative;
-
-//     input[type='text'] {
-//         flex: 1;
-//         position: relative;
-//         margin-right: 10px;
-//         width: 100px;
-//     }
-// }
 .QuizCard {
     width: 100%;
     height: 100%;
@@ -288,8 +246,6 @@
         align-items: center;
         justify-content: center;
         .QuizCardBox {
-            /* existing code */
-
             .DIYNodeBox-iframe {
                 height: 100%;
                 width: 100%;
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 9ac8d7c52..461a65c27 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -340,6 +340,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         ContextMenu.Instance.setLangIndex(ind);
     };
 
+    /**
+     * Determine which language the speech to text tool is in.
+     * @returns
+     */
     convertAbr = () => {
         switch (this.recognition.lang) {
             case 'en-US': return 'English'; //prettier-ignore
@@ -364,6 +368,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         ContextMenu.Instance.displayMenu(x, y);
     };
 
+    /**
+     * Creates an AudioBox to record a user's audio.
+     */
     evaluatePronunciation = () => {
         const newAudio = Docs.Create.AudioDocument(nullAudio, { _width: 200, _height: 100 });
         this.Document.audio = newAudio[DocData];
@@ -386,6 +393,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this.Document.phoneticTranscription = response.data['transcription'];
     };
 
+    /**
+     * Extracts the id of the youtube video url.
+     * @param url
+     * @returns
+     */
     getYouTubeVideoId = (url: string) => {
         const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/;
         const match = url.match(regExp);
@@ -510,7 +522,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             } else if (callType === GPTCallType.FLASHCARD) {
                 this._loading = false;
                 return res;
-            } else if (callType === GPTCallType.STACK) {
             }
             this._loading = false;
             return res;
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index 91e51d24e..32d1e471e 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -316,6 +316,14 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         return cropping;
     };
 
+    /**
+     * Draw image to a canvas so it can be converted to base64 and be passed into
+     * GPT to be analyzed.
+     * @param downX
+     * @param downY
+     * @param cb
+     * @returns
+     */
     createCanvas = async (downX?: number, downY?: number, cb?: (filename: string, x: number | undefined, y: number | undefined) => void) => {
         const canvas = document.createElement('canvas');
         const scaling = 1 / (this._props.NativeDimScaling?.() || 1);
@@ -366,6 +374,12 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         }
     };
 
+    /**
+     * Calls backend to find any text on an image. Gets the text and the
+     * coordinates of the text and creates label boxes at those locations.
+     * @param quiz
+     * @param i
+     */
     pushInfo = async (quiz: quizMode, i?: string) => {
         this._quizMode = quiz;
         this._loading = true;
@@ -437,6 +451,11 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         this._loading = false;
     };
 
+    /**
+     * Calls the createCanvas and pushInfo methods to convert the
+     * image to a form that can be passed to GPT and find the locations
+     * of the text.
+     */
     makeLabels = async () => {
         try {
             const hrefBase64 = await this.createCanvas();
@@ -446,6 +465,13 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         }
     };
 
+    /**
+     * Determines whether two words should be considered
+     * the same, allowing minor typos.
+     * @param str1
+     * @param str2
+     * @returns
+     */
     levenshteinDistance = (str1: string, str2: string) => {
         const len1 = str1.length;
         const len2 = str2.length;
@@ -471,6 +497,12 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         return dp[len1][len2];
     };
 
+    /**
+     * Different algorithm for determining string similarity.
+     * @param str1
+     * @param str2
+     * @returns
+     */
     jaccardSimilarity = (str1: string, str2: string) => {
         const set1 = new Set(str1.split(' '));
         const set2 = new Set(str2.split(' '));
@@ -481,6 +513,14 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         return intersection.size / union.size;
     };
 
+    /**
+     * Averages the jaccardSimilarity and levenshteinDistance scores
+     * to determine string similarity for the labelboxes answers and
+     * the users response.
+     * @param str1
+     * @param str2
+     * @returns
+     */
     stringSimilarity(str1: string, str2: string) {
         const levenshteinDist = this.levenshteinDistance(str1, str2);
         const levenshteinScore = 1 - levenshteinDist / Math.max(str1.length, str2.length);
@@ -511,12 +551,23 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         );
     }
 
+    /**
+     * Returns whether two strings are similar
+     * @param input
+     * @param target
+     * @returns
+     */
     compareWords = (input: string, target: string) => {
         const distance = this.stringSimilarity(input.toLowerCase(), target.toLowerCase());
-        // const threshold = Math.max(input.length, target.length) * 0.2; // Allow up to 20% of the length as difference
         return distance >= 0.7;
     };
 
+    /**
+     * GPT returns a hex color for what color the label box should be based on
+     * the correctness of the users answer.
+     * @param inputString
+     * @returns
+     */
     extractHexAndSentences = (inputString: string) => {
         // Regular expression to match a hexadecimal number at the beginning followed by a period and sentences
         const regex = /^#([0-9A-Fa-f]+)\.\s*(.+)$/s;
@@ -569,13 +620,15 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         });
     };
 
+    /**
+     * Get rid of all the label boxes on the images.
+     */
     exitQuizMode = () => {
         this._quizMode = quizMode.NONE;
         this._quizBoxes.forEach(doc => {
             this.removeDocument?.(doc);
         });
         this._quizBoxes = [];
-        console.log('remove');
     };
 
     @action
diff --git a/src/client/views/nodes/LabelBox.tsx b/src/client/views/nodes/LabelBox.tsx
index bcf55fbe8..79366f76f 100644
--- a/src/client/views/nodes/LabelBox.tsx
+++ b/src/client/views/nodes/LabelBox.tsx
@@ -169,11 +169,7 @@ export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
                         width: this._props.PanelWidth(),
                         height: this._props.PanelHeight(),
                         whiteSpace: 'multiLine' in boxParams && boxParams.multiLine ? 'pre-wrap' : 'pre',
-                    }}
-                    // onMouseLeave={() => {
-                    //     this.hoverFlip(undefined);
-                    // }}
-                >
+                    }}>
                     <div
                         style={{
                             width: this._props.PanelWidth() - 2 * NumCast(this.layoutDoc._xPadding),
@@ -185,10 +181,8 @@ export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
                         })}
                         onKeyUp={action(e => {
                             e.stopPropagation();
-                            // if (e.key === 'Enter') {
                             this.dataDoc[this.fieldKey] = this._divRef?.innerText ?? '';
                             setTimeout(() => this._props.select(false));
-                            // }
                         })}
                         onBlur={() => {
                             this.dataDoc[this.fieldKey] = this._divRef?.innerText ?? '';
diff --git a/src/client/views/nodes/PDFBox.tsx b/src/client/views/nodes/PDFBox.tsx
index cb0b0d71f..e7470c74c 100644
--- a/src/client/views/nodes/PDFBox.tsx
+++ b/src/client/views/nodes/PDFBox.tsx
@@ -120,11 +120,9 @@ export class PDFBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         this.replaceCanvases(docViewContent, newDiv);
         const htmlString = this._pdfViewer?._mainCont.current && new XMLSerializer().serializeToString(newDiv);
 
-        // const anchx = NumCast(cropping.x);
-        // const anchy = NumCast(cropping.y);
         const anchw = NumCast(cropping._width) * (this._props.NativeDimScaling?.() || 1);
         const anchh = NumCast(cropping._height) * (this._props.NativeDimScaling?.() || 1);
-        // const viewScale = 1;
+
         cropping.title = 'crop: ' + this.Document.title;
         cropping.x = NumCast(this.Document.x) + NumCast(this.layoutDoc._width);
         cropping.y = NumCast(this.Document.y);
@@ -473,7 +471,6 @@ export class PDFBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
 
         !Doc.noviceMode && optionItems.push({ description: 'Toggle Sidebar Type', event: this.toggleSidebarType, icon: 'expand-arrows-alt' });
         !Doc.noviceMode && optionItems.push({ description: 'update icon', event: () => this.pdfUrl && this.updateIcon(), icon: 'expand-arrows-alt' });
-        // optionItems.push({ description: "Toggle Sidebar ", event: () => this.toggleSidebar(), icon: "expand-arrows-alt" });
         !options && ContextMenu.Instance.addItem({ description: 'Options...', subitems: optionItems, icon: 'asterisk' });
         const help = cm.findByDescription('Help...');
         const helpItems = help?.subitems ?? [];
diff --git a/src/client/views/pdf/PDFViewer.tsx b/src/client/views/pdf/PDFViewer.tsx
index 02d310f7d..1d7f269fb 100644
--- a/src/client/views/pdf/PDFViewer.tsx
+++ b/src/client/views/pdf/PDFViewer.tsx
@@ -30,12 +30,6 @@ import { GPTPopup } from './GPTPopup/GPTPopup';
 import './PDFViewer.scss';
 import { GPTCallType, gptAPICall } from '../../apis/gpt/GPT';
 import ReactLoading from 'react-loading';
-// import html2canvas from 'html2canvas';
-// import SpeechRecognition, { useSpeechRecognition } from 'react-speech-recognition';
-
-// pdfjsLib.GlobalWorkerOptions.workerSrc = `/assets/pdf.worker.js`;
-// The workerSrc property shall be specified.
-// Pdfjs.GlobalWorkerOptions.workerSrc = 'https://unpkg.com/pdfjs-dist@4.4.168/build/pdf.worker.mjs';
 
 interface IViewerProps extends FieldViewProps {
     pdfBox: PDFBox;
@@ -64,43 +58,6 @@ export class PDFViewer extends ObservableReactComponent<IViewerProps> {
         super(props);
         makeObservable(this);
     }
-    // @observable transcriptRef = React.createRef();
-    // @observable startBtnRef = React.createRef();
-    // @observable stopBtnRef = React.createRef();
-    // @observable transcriptElement = '';
-
-    // handleResult = (e: SpeechRecognitionEvent) => {
-    //     let interimTranscript = '';
-    //     let finalTranscript = '';
-    //     console.log('H');
-    //     for (let i = e.resultIndex; i < e.results.length; i++) {
-    //         const transcript = e.results[i][0].transcript;
-    //         if (e.results[i].isFinal) {
-    //             finalTranscript += transcript;
-    //         } else {
-    //             interimTranscript += transcript;
-    //         }
-    //     }
-    //     console.log(interimTranscript);
-    //     this.transcriptElement = finalTranscript || interimTranscript;
-    // };
-
-    // startListening = () => {
-    //     const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
-    //     if (SpeechRecognition) {
-    //         console.log('here');
-    //         const recognition = new SpeechRecognition();
-    //         recognition.continuous = true; // Continue listening even if the user pauses
-    //         recognition.interimResults = true; // Show interim results
-    //         recognition.lang = 'en-US'; // Set language (optional)
-    //         recognition.onresult = this.handleResult.bind(this);
-    //         // recognition.onend = this.handleEnd.bind(this);
-
-    //         recognition.start();
-    //         // this.handleResult;
-    //         // recognition.stop();
-    //     }
-    // };
 
     @observable _pageSizes: { width: number; height: number }[] = [];
     @observable _savedAnnotations = new ObservableMap<number, (HTMLDivElement & { marqueeing?: boolean })[]>();
-- 
cgit v1.2.3-70-g09d2


From 11244a698bce594982ee5dca55b9695bb774451c Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Mon, 7 Oct 2024 18:13:38 -0400
Subject: moved all quiz code out of LabelBox and ImageBox and into
 StyleProviderQuiz.  changed quizBoxes and quizMode to be stored as Doc
 metadata. Extended styles to cover contextMenuItems.   remove
 this.setListening() from comparisonBox until contextMenu selectedVal is
 fixed.

---
 src/client/views/StyleProp.ts            |   2 +
 src/client/views/StyleProvider.tsx       |  10 +-
 src/client/views/StyleProviderQuiz.scss  |  40 ++++
 src/client/views/StyleProviderQuiz.tsx   | 391 +++++++++++++++++++++++++++++++
 src/client/views/nodes/ComparisonBox.tsx |   1 -
 src/client/views/nodes/DocumentView.tsx  |   3 +
 src/client/views/nodes/FieldView.tsx     |   2 +
 src/client/views/nodes/ImageBox.scss     |  41 ----
 src/client/views/nodes/ImageBox.tsx      | 365 ++---------------------------
 src/client/views/nodes/LabelBox.tsx      |  52 +---
 10 files changed, 466 insertions(+), 441 deletions(-)
 create mode 100644 src/client/views/StyleProviderQuiz.scss
 create mode 100644 src/client/views/StyleProviderQuiz.tsx

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/StyleProp.ts b/src/client/views/StyleProp.ts
index dd5b98cfe..44d3bf757 100644
--- a/src/client/views/StyleProp.ts
+++ b/src/client/views/StyleProp.ts
@@ -21,4 +21,6 @@ export enum StyleProp {
     FontFamily = 'fontFamily', // font family of text
     FontWeight = 'fontWeight', // font weight of text
     Highlighting = 'highlighting', // border highlighting
+    ContextMenuItems = 'contextMenuItems', // menu items to add to context menu
+    AnchorMenuItems = 'anchorMenuItems',
 }
diff --git a/src/client/views/StyleProvider.tsx b/src/client/views/StyleProvider.tsx
index 16f6aa40b..44bea57eb 100644
--- a/src/client/views/StyleProvider.tsx
+++ b/src/client/views/StyleProvider.tsx
@@ -21,6 +21,7 @@ import { TreeSort } from './collections/TreeSort';
 import { Colors } from './global/globalEnums';
 import { DocumentView, DocumentViewProps } from './nodes/DocumentView';
 import { FieldViewProps } from './nodes/FieldView';
+import { styleProviderQuiz } from './StyleProviderQuiz';
 import { StyleProp } from './StyleProp';
 import './StyleProvider.scss';
 import { TagsView } from './TagsView';
@@ -89,6 +90,7 @@ export function DefaultStyleProvider(doc: Opt<Doc>, props: Opt<FieldViewProps &
         containerViewPath,
         childFilters,
         hideCaptions,
+        hideFilterStatus,
         showTitle,
         childFiltersByRanges,
         renderDepth,
@@ -110,6 +112,12 @@ export function DefaultStyleProvider(doc: Opt<Doc>, props: Opt<FieldViewProps &
     const color = () => styleProvider?.(doc, props, StyleProp.Color) as string;
     const opacity = () => styleProvider?.(doc, props, StyleProp.Opacity);
     const layoutShowTitle = () => styleProvider?.(doc, props, StyleProp.ShowTitle) as string;
+
+    // bcz: For now, this is how to add custom-stylings (like a Quiz styling) for app-specific purposes.  The quiz styling will short-circuit
+    //      the regular stylings for items that it controls (eg., things with a quiz field, or images)
+    const quizProp = styleProviderQuiz.quizStyleProvider(doc, props, property);
+    if (quizProp !== undefined) return quizProp;
+
     // prettier-ignore
     switch (property.split(':')[0]) {
         case StyleProp.TreeViewIcon: {
@@ -318,7 +326,7 @@ export function DefaultStyleProvider(doc: Opt<Doc>, props: Opt<FieldViewProps &
                         : childFilters?.().filter(f => ClientUtils.IsRecursiveFilter(f) && f !== ClientUtils.noDragDocsFilter).length || childFiltersByRanges?.().length
                         ? 'orange' // 'inheritsFilter'
                         : undefined;
-                return !showFilterIcon || props?.hideFilterStatus ? null : (
+                return !showFilterIcon || hideFilterStatus ? null : (
                     <div className="styleProvider-filter">
                         <Dropdown
                             type={Type.TERT}
diff --git a/src/client/views/StyleProviderQuiz.scss b/src/client/views/StyleProviderQuiz.scss
new file mode 100644
index 000000000..2f52c8dec
--- /dev/null
+++ b/src/client/views/StyleProviderQuiz.scss
@@ -0,0 +1,40 @@
+.loading-spinner {
+    position: absolute;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    height: 100%;
+    width: 100%;
+    // left: 50%;
+    // top: 50%;
+    z-index: 200;
+    font-size: 20px;
+    font-weight: bold;
+    color: #17175e;
+}
+
+.check-icon {
+    position: absolute;
+    right: 40;
+    bottom: 10;
+    color: green;
+    display: inline-block;
+    font-size: 20px;
+    overflow: hidden;
+}
+
+.redo-icon {
+    position: absolute;
+    right: 10;
+    bottom: 10;
+    color: black;
+    display: inline-block;
+    font-size: 20px;
+    overflow: hidden;
+}
+
+@keyframes spin {
+    to {
+        transform: rotate(360deg);
+    }
+}
diff --git a/src/client/views/StyleProviderQuiz.tsx b/src/client/views/StyleProviderQuiz.tsx
new file mode 100644
index 000000000..8973ada95
--- /dev/null
+++ b/src/client/views/StyleProviderQuiz.tsx
@@ -0,0 +1,391 @@
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { Tooltip } from '@mui/material';
+import axios from 'axios';
+import * as React from 'react';
+import { returnFalse, setupMoveUpEvents } from '../../ClientUtils';
+import { emptyFunction } from '../../Utils';
+import { Doc, DocListCast, Opt } from '../../fields/Doc';
+import { DocData } from '../../fields/DocSymbols';
+import { List } from '../../fields/List';
+import { NumCast, StrCast } from '../../fields/Types';
+import { GPTCallType, gptAPICall, gptImageLabel } from '../apis/gpt/GPT';
+import { Docs } from '../documents/Documents';
+import { ContextMenu } from './ContextMenu';
+import { ContextMenuProps } from './ContextMenuItem';
+import { StyleProp } from './StyleProp';
+import { AnchorMenu } from './pdf/AnchorMenu';
+import { DocumentViewProps } from './nodes/DocumentView';
+import { FieldViewProps } from './nodes/FieldView';
+import { ImageBox } from './nodes/ImageBox';
+import { ImageUtility } from './nodes/generativeFill/generativeFillUtils/ImageHandler';
+import './StyleProviderQuiz.scss';
+
+export namespace styleProviderQuiz {
+    enum quizMode {
+        SMART = 'smart',
+        NORMAL = 'normal',
+        NONE = 'none',
+    }
+
+    async function selectUrlToBase64(blob: Blob): Promise<string> {
+        try {
+            return new Promise((resolve, reject) => {
+                const reader = new FileReader();
+                reader.readAsDataURL(blob);
+                reader.onloadend = () => resolve(reader.result as string);
+                reader.onerror = error => reject(error);
+            });
+        } catch (error) {
+            console.error('Error:', error);
+            throw error;
+        }
+    }
+    /**
+     * Creates label boxes over text on the image to be filled in.
+     * @param boxes
+     * @param texts
+     */
+    async function createBoxes(img: ImageBox, boxes: [[[number, number]]], texts: [string]) {
+        img.Document._quizBoxes = new List<Doc>([]);
+        for (let i = 0; i < boxes.length; i++) {
+            const coords = boxes[i] ? boxes[i] : [];
+            const width = coords[1][0] - coords[0][0];
+            const height = coords[2][1] - coords[0][1];
+            const text = texts[i];
+
+            const newCol = Docs.Create.LabelDocument({
+                _width: width,
+                _height: height,
+                _layout_fitWidth: true,
+                title: '',
+            });
+            const scaling = 1 / (img._props.NativeDimScaling?.() || 1);
+            newCol.x = coords[0][0] + NumCast(img.marqueeref.current?.left) * scaling;
+            newCol.y = coords[0][1] + NumCast(img.marqueeref.current?.top) * scaling;
+
+            newCol.zIndex = 1000;
+            newCol.forceActive = true;
+            newCol.quiz = text;
+            newCol[DocData].textTransform = 'none';
+            Doc.AddDocToList(img.Document, '_quizBoxes', newCol);
+            img.addDocument(newCol);
+            //   img._loading = false;
+        }
+    }
+
+    /**
+     * Calls backend to find any text on an image. Gets the text and the
+     * coordinates of the text and creates label boxes at those locations.
+     * @param quiz
+     * @param i
+     */
+    async function pushInfo(imgBox: ImageBox, quiz: quizMode, i?: string) {
+        imgBox.Document._quizMode = quiz;
+        const quizBoxes = DocListCast(imgBox.Document.quizBoxes);
+        if (!quizBoxes.length) {
+            //    this._loading = true;
+
+            const img = {
+                file: i ? i : imgBox.paths[0],
+                drag: i ? 'drag' : 'full',
+                smart: quiz,
+            };
+            const response = await axios.post('http://localhost:105/labels/', img, {
+                headers: {
+                    'Content-Type': 'application/json',
+                },
+            });
+            if (response.data['boxes'].length != 0) {
+                createBoxes(imgBox, response.data['boxes'], response.data['text']);
+            } else {
+                // this._loading = false;
+            }
+        } else quizBoxes.forEach(box => (box.hidden = false));
+    }
+
+    async function createCanvas(img: ImageBox) {
+        const canvas = document.createElement('canvas');
+        const scaling = 1 / (img._props.NativeDimScaling?.() || 1);
+        const w = AnchorMenu.Instance.marqueeWidth * scaling;
+        const h = AnchorMenu.Instance.marqueeHeight * scaling;
+        canvas.width = w;
+        canvas.height = h;
+        const ctx = canvas.getContext('2d'); // draw image to canvas. scale to target dimensions
+        if (ctx) {
+            img.imageRef && ctx.drawImage(img.imageRef, NumCast(img.marqueeref.current?.left) * scaling, NumCast(img.marqueeref.current?.top) * scaling, w, h, 0, 0, w, h);
+        }
+        const blob = await ImageUtility.canvasToBlob(canvas);
+        return selectUrlToBase64(blob);
+    }
+    /**
+     * Create flashcards from an image.
+     */
+    async function getImageDesc(img: ImageBox) {
+        // this._loading = true;
+        try {
+            const hrefBase64 = await createCanvas(img);
+            const response = await gptImageLabel(hrefBase64, 'Make flashcards out of this image with each question and answer labeled as "question" and "answer". Do not label each flashcard and do not include asterisks: ');
+            AnchorMenu.Instance.transferToFlashcard(response, NumCast(img.layoutDoc['x']), NumCast(img.layoutDoc['y']));
+        } catch (error) {
+            console.log('Error', error);
+        }
+        // this._loading = false;
+    }
+
+    /**
+     * Calls the createCanvas and pushInfo methods to convert the
+     * image to a form that can be passed to GPT and find the locations
+     * of the text.
+     */
+    async function makeLabels(img: ImageBox) {
+        try {
+            const hrefBase64 = await createCanvas(img);
+            pushInfo(img, quizMode.NORMAL, hrefBase64);
+        } catch (error) {
+            console.log('Error', error);
+        }
+    }
+
+    /**
+     * Determines whether two words should be considered
+     * the same, allowing minor typos.
+     * @param str1
+     * @param str2
+     * @returns
+     */
+    function levenshteinDistance(str1: string, str2: string) {
+        const len1 = str1.length;
+        const len2 = str2.length;
+        const dp = Array.from(Array(len1 + 1), () => Array(len2 + 1).fill(0));
+
+        if (len1 === 0) return len2;
+        if (len2 === 0) return len1;
+
+        for (let i = 0; i <= len1; i++) dp[i][0] = i;
+        for (let j = 0; j <= len2; j++) dp[0][j] = j;
+
+        for (let i = 1; i <= len1; i++) {
+            for (let j = 1; j <= len2; j++) {
+                const cost = str1[i - 1] === str2[j - 1] ? 0 : 1;
+                dp[i][j] = Math.min(
+                    dp[i - 1][j] + 1, // deletion
+                    dp[i][j - 1] + 1, // insertion
+                    dp[i - 1][j - 1] + cost // substitution
+                );
+            }
+        }
+
+        return dp[len1][len2];
+    }
+
+    /**
+     * Different algorithm for determining string similarity.
+     * @param str1
+     * @param str2
+     * @returns
+     */
+    function jaccardSimilarity(str1: string, str2: string) {
+        const set1 = new Set(str1.split(' '));
+        const set2 = new Set(str2.split(' '));
+
+        const intersection = new Set([...set1].filter(x => set2.has(x)));
+        const union = new Set([...set1, ...set2]);
+
+        return intersection.size / union.size;
+    }
+
+    /**
+     * Averages the jaccardSimilarity and levenshteinDistance scores
+     * to determine string similarity for the labelboxes answers and
+     * the users response.
+     * @param str1
+     * @param str2
+     * @returns
+     */
+    function stringSimilarity(str1: string, str2: string) {
+        const levenshteinDist = levenshteinDistance(str1, str2);
+        const levenshteinScore = 1 - levenshteinDist / Math.max(str1.length, str2.length);
+
+        const jaccardScore = jaccardSimilarity(str1, str2);
+
+        // Combine the scores with a higher weight on Jaccard similarity
+        return 0.5 * levenshteinScore + 0.5 * jaccardScore;
+    }
+    /**
+     * Returns whether two strings are similar
+     * @param input
+     * @param target
+     * @returns
+     */
+    function compareWords(input: string, target: string) {
+        const distance = stringSimilarity(input.toLowerCase(), target.toLowerCase());
+        return distance >= 0.7;
+    }
+
+    /**
+     * GPT returns a hex color for what color the label box should be based on
+     * the correctness of the users answer.
+     * @param inputString
+     * @returns
+     */
+    function extractHexAndSentences(inputString: string) {
+        // Regular expression to match a hexadecimal number at the beginning followed by a period and sentences
+        const regex = /^#([0-9A-Fa-f]+)\.\s*(.+)$/s;
+        const match = inputString.match(regex);
+
+        if (match) {
+            const hexNumber = match[1];
+            const sentences = match[2].trim();
+            return { hexNumber, sentences };
+        } else {
+            return { error: 'The input string does not match the expected format.' };
+        }
+    }
+    /**
+     * Check whether the contents of the label boxes on an image are correct.
+     */
+    function check(img: ImageBox) {
+        //this._loading = true;
+        img.quizBoxes.forEach(async doc => {
+            const input = StrCast(doc[DocData].title);
+            if (img.quizMode == quizMode.SMART && input) {
+                const questionText = 'Question: What was labeled in this image?';
+                const rubricText = ' Rubric: ' + StrCast(doc.quiz);
+                const queryText =
+                    questionText +
+                    ' UserAnswer: ' +
+                    input +
+                    '. ' +
+                    rubricText +
+                    '. One sentence and evaluate based on meaning, not wording. Provide a hex color at the beginning with a period after it on a scale of green (minor details missed) to red (big error) for how correct the answer is. Example: "#FFFFFF. Pasta is delicious."';
+                const response = await gptAPICall(queryText, GPTCallType.QUIZ);
+                const hexSent = extractHexAndSentences(response);
+                doc.quiz = hexSent.sentences?.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
+                doc.backgroundColor = '#' + hexSent.hexNumber;
+            } else {
+                const match = compareWords(input, StrCast(doc.quiz).trim());
+                doc.backgroundColor = match ? '#11c249' : '#eb2d2d';
+            }
+        });
+        //this._loading = false;
+    }
+
+    function redo(img: ImageBox) {
+        img.quizBoxes.forEach(doc => {
+            doc[DocData].title = '';
+            doc.backgroundColor = '#e4e4e4';
+        });
+    }
+
+    /**
+     * Get rid of all the label boxes on the images.
+     */
+    function exitQuizMode(img: ImageBox) {
+        img.Document._quizMode = quizMode.NONE;
+        DocListCast(img.Document._quizBoxes).forEach(box => {
+            box.hidden = true;
+        });
+    }
+
+    export function quizStyleProvider(doc: Opt<Doc>, props: Opt<FieldViewProps & DocumentViewProps>, property: string) {
+        const editLabelAnswer = (qdoc: Doc) => {
+            // when click the pencil, set the text to the quiz content. when click off, set the quiz text to that and set textbox to nothing.
+            if (!qdoc._editLabel) {
+                qdoc.title = StrCast(qdoc.quiz);
+            } else {
+                qdoc.quiz = StrCast(qdoc.title);
+                qdoc.title = '';
+            }
+            qdoc._editLabel = !qdoc._editLabel;
+        };
+        const editAnswer = (qdoc: Opt<Doc>) => {
+            return (
+                <Tooltip
+                    title={
+                        <div className="answer-tooltip" style={{ minWidth: '150px' }}>
+                            {qdoc?._editLabel ? 'save' : 'edit correct answer'}
+                        </div>
+                    }>
+                    <div className="answer-tool-tip" onPointerDown={e => setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => qdoc && editLabelAnswer(qdoc))}>
+                        <FontAwesomeIcon className="edit-icon" color={qdoc?._editLabel ? 'white' : 'black'} icon="pencil" size="sm" />
+                    </div>
+                </Tooltip>
+            );
+        };
+        const answerIcon = (qdoc: Opt<Doc>) => {
+            return (
+                <Tooltip
+                    title={
+                        <div className="answer-tooltip" style={{ minWidth: '150px' }}>
+                            {StrCast(qdoc?.quiz ?? '')}
+                        </div>
+                    }>
+                    <div className="answer-tool-tip">
+                        <FontAwesomeIcon className="q-icon" icon="circle" color="white" />
+                        <FontAwesomeIcon className="answer-icon" icon="question" />
+                    </div>
+                </Tooltip>
+            );
+        };
+        const checkIcon = (img: ImageBox) => (
+            <Tooltip title={<div className="dash-tooltip">Check</div>}>
+                <div className="check-icon" onPointerDown={() => check(img)}>
+                    <FontAwesomeIcon icon="circle-check" size="lg" />
+                </div>
+            </Tooltip>
+        );
+        const redoIcon = (img: ImageBox) => (
+            <Tooltip title={<div className="dash-tooltip">Redo</div>}>
+                <div className="redo-icon" onPointerDown={() => redo(img)}>
+                    <FontAwesomeIcon icon="redo-alt" size="lg" />
+                </div>
+            </Tooltip>
+        );
+
+        const imgBox = props?.DocumentView?.().ComponentView as ImageBox;
+        switch (property) {
+            case StyleProp.Decorations:
+                {
+                    if (doc?.quiz) {
+                        // this should only be set on Labels that are part of an image quiz
+                        return (
+                            <>
+                                {editAnswer(doc?.[DocData])}
+                                {answerIcon(doc)}
+                            </>
+                        );
+                    } else if (imgBox?.Document._quizMode && imgBox.Document._quizMode !== quizMode.NONE) {
+                        return (
+                            <>
+                                {checkIcon(imgBox)}
+                                {redoIcon(imgBox)}
+                            </>
+                        );
+                    }
+                }
+                break;
+            case StyleProp.ContextMenuItems:
+                if (imgBox) {
+                    const quizes: ContextMenuProps[] = [];
+                    quizes.push({
+                        description: 'Smart Check',
+                        event: doc?.quizMode == quizMode.NONE ? () => pushInfo(imgBox, quizMode.SMART) : () => exitQuizMode(imgBox),
+                        icon: 'pen-to-square',
+                    });
+                    quizes.push({
+                        description: 'Normal',
+                        event: doc?.quizMode == quizMode.NONE ? () => pushInfo(imgBox, quizMode.NORMAL) : () => exitQuizMode(imgBox),
+                        icon: 'pencil',
+                    });
+                    ContextMenu.Instance?.addItem({ description: 'Quiz Mode', subitems: quizes, icon: 'file-pen' });
+                }
+                break;
+            case StyleProp.AnchorMenuItems:
+                if (imgBox) {
+                    AnchorMenu.Instance.gptFlashcards = () => getImageDesc(imgBox);
+                    AnchorMenu.Instance.makeLabels = () => makeLabels(props?.DocumentView?.().ComponentView as ImageBox);
+                }
+        }
+        return undefined;
+    }
+}
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 9fb8bc4d6..c32bbc803 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -44,7 +44,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     constructor(props: FieldViewProps) {
         super(props);
         makeObservable(this);
-        this.setListening();
     }
 
     @observable private _inputValue = '';
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index 5054432a9..04a31fd83 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -545,6 +545,9 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
             return;
         }
 
+        const items = this._props.styleProvider?.(this.Document, this._props, StyleProp.ContextMenuItems) as ContextMenuProps[];
+        items?.forEach(item => ContextMenu.Instance.addItem(item));
+
         const customScripts = Cast(this.Document.contextMenuScripts, listSpec(ScriptField), []);
         StrListCast(this.Document.contextMenuLabels).forEach((label, i) =>
             cm.addItem({ description: label, event: () => customScripts[i]?.script.run({ documentView: this, this: this.Document, scriptContext: this._props.scriptContext }), icon: 'sticky-note' })
diff --git a/src/client/views/nodes/FieldView.tsx b/src/client/views/nodes/FieldView.tsx
index ca783d034..170966471 100644
--- a/src/client/views/nodes/FieldView.tsx
+++ b/src/client/views/nodes/FieldView.tsx
@@ -14,6 +14,7 @@ import { DocumentView } from './DocumentView';
 import { FocusViewOptions } from './FocusViewOptions';
 import { OpenWhere } from './OpenWhere';
 import { WebField } from '../../../fields/URLField';
+import { ContextMenuProps } from '../ContextMenuItem';
 
 export type FocusFuncType = (doc: Doc, options: FocusViewOptions) => Opt<number>;
 export type StyleProviderFuncType = (
@@ -23,6 +24,7 @@ export type StyleProviderFuncType = (
     property: string
 ) =>
     | Opt<FieldType>
+    | ContextMenuProps[]
     | { clipPath: string; jsx: JSX.Element }
     | JSX.Element
     | JSX.IntrinsicElements
diff --git a/src/client/views/nodes/ImageBox.scss b/src/client/views/nodes/ImageBox.scss
index 4d199b360..3ffda5a35 100644
--- a/src/client/views/nodes/ImageBox.scss
+++ b/src/client/views/nodes/ImageBox.scss
@@ -139,44 +139,3 @@
 .imageBox-fadeBlocker-hover {
     opacity: 0;
 }
-
-.loading-spinner {
-    position: absolute;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    height: 100%;
-    width: 100%;
-    // left: 50%;
-    // top: 50%;
-    z-index: 200;
-    font-size: 20px;
-    font-weight: bold;
-    color: #17175e;
-}
-
-.check-icon {
-    position: absolute;
-    right: 40;
-    bottom: 10;
-    color: green;
-    display: inline-block;
-    font-size: 20px;
-    overflow: hidden;
-}
-
-.redo-icon {
-    position: absolute;
-    right: 10;
-    bottom: 10;
-    color: black;
-    display: inline-block;
-    font-size: 20px;
-    overflow: hidden;
-}
-
-@keyframes spin {
-    to {
-        transform: rotate(360deg);
-    }
-}
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index 31f6df2ea..0b474076b 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -17,13 +17,11 @@ import { Cast, ImageCast, NumCast, RTFCast, StrCast } from '../../../fields/Type
 import { ImageField } from '../../../fields/URLField';
 import { TraceMobx } from '../../../fields/util';
 import { emptyFunction } from '../../../Utils';
-import { gptAPICall, GPTCallType, gptImageLabel } from '../../apis/gpt/GPT';
 import { Docs } from '../../documents/Documents';
 import { DocumentType } from '../../documents/DocumentTypes';
 import { DocUtils, FollowLinkScript } from '../../documents/DocUtils';
 import { Networking } from '../../Network';
 import { DragManager } from '../../util/DragManager';
-import { dropActionType } from '../../util/DropActionTypes';
 import { SnappingManager } from '../../util/SnappingManager';
 import { undoable, undoBatch } from '../../util/UndoManager';
 import { CollectionFreeFormView } from '../collections/collectionFreeForm/CollectionFreeFormView';
@@ -38,16 +36,8 @@ import { StyleProp } from '../StyleProp';
 import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FocusViewOptions } from './FocusViewOptions';
-import { ImageUtility } from './generativeFill/generativeFillUtils/ImageHandler';
 import './ImageBox.scss';
 import { OpenWhere } from './OpenWhere';
-// import stringSimilarity from 'string-similarity';
-
-enum quizMode {
-    SMART = 'smart',
-    NORMAL = 'normal',
-    NONE = 'none',
-}
 
 export class ImageEditorData {
     // eslint-disable-next-line no-use-before-define
@@ -79,25 +69,24 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     public static LayoutString(fieldKey: string) {
         return FieldView.LayoutString(ImageBox, fieldKey);
     }
+    _ffref = React.createRef<CollectionFreeFormView>();
     private _ignoreScroll = false;
     private _forcedScroll = false;
     private _dropDisposer?: DragManager.DragDropDisposer;
     private _disposers: { [name: string]: IReactionDisposer } = {};
     private _getAnchor: (savedAnnotations: Opt<ObservableMap<number, HTMLDivElement[]>>, addAsAnnotation: boolean) => Opt<Doc> = () => undefined;
     private _overlayIconRef = React.createRef<HTMLDivElement>();
-    private _marqueeref = React.createRef<MarqueeAnnotator>();
     private _mainCont: React.RefObject<HTMLDivElement> = React.createRef();
     private _annotationLayer: React.RefObject<HTMLDivElement> = React.createRef();
-    private _imageRef: HTMLImageElement | null = null; // <video> ref
-    @observable private _quizBoxes: Doc[] = [];
+    imageRef: HTMLImageElement | null = null; // <video> ref
+    marqueeref = React.createRef<MarqueeAnnotator>();
+
     @observable private _searchInput = '';
-    @observable private _quizMode = quizMode.NONE;
     @observable private _savedAnnotations = new ObservableMap<number, (HTMLDivElement & { marqueeing?: boolean })[]>();
     @observable private _curSuffix = '';
     @observable private _error = '';
     @observable private _loading = false;
     @observable private _isHovering = false; // flag to switch between primary and alternate images on hover
-    _ffref = React.createRef<CollectionFreeFormView>();
 
     constructor(props: FieldViewProps) {
         super(props);
@@ -110,6 +99,13 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         ele && (this._dropDisposer = DragManager.MakeDropTarget(ele, this.drop.bind(this), this.Document));
     };
 
+    @computed get quizBoxes() {
+        return DocListCast(this.Document.quizBoxes);
+    }
+    @computed get quizMode() {
+        return StrCast(this.Document._quizMode);
+    }
+
     getAnchor = (addAsAnnotation: boolean, pinProps?: PinProps) => {
         const visibleAnchor = this._getAnchor?.(this._savedAnnotations, true); // use marquee anchor, otherwise, save zoom/pan as anchor
         const anchor =
@@ -315,331 +311,10 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         return cropping;
     };
 
-    createCanvas = async () => {
-        const canvas = document.createElement('canvas');
-        const scaling = 1 / (this._props.NativeDimScaling?.() || 1);
-        const w = AnchorMenu.Instance.marqueeWidth * scaling;
-        const h = AnchorMenu.Instance.marqueeHeight * scaling;
-        canvas.width = w;
-        canvas.height = h;
-        const ctx = canvas.getContext('2d'); // draw image to canvas. scale to target dimensions
-        if (ctx) {
-            this._imageRef && ctx.drawImage(this._imageRef, NumCast(this._marqueeref.current?.left) * scaling, NumCast(this._marqueeref.current?.top) * scaling, w, h, 0, 0, w, h);
-        }
-        const blob = await ImageUtility.canvasToBlob(canvas);
-        return ImageBox.selectUrlToBase64(blob);
-    };
-
-    createSnapshotLink = (imagePath: string, downX?: number, downY?: number) => {
-        const url = !imagePath.startsWith('/') ? ClientUtils.CorsProxy(imagePath) : imagePath;
-        const width = NumCast(this.layoutDoc._width) || 1;
-        const height = NumCast(this.layoutDoc._height);
-        const imageSnapshot = Docs.Create.ImageDocument(url, {
-            _nativeWidth: Doc.NativeWidth(this.layoutDoc),
-            _nativeHeight: Doc.NativeHeight(this.layoutDoc),
-            x: NumCast(this.layoutDoc.x) + width,
-            y: NumCast(this.layoutDoc.y),
-            onClick: FollowLinkScript(),
-            _width: 150,
-            _height: (height / width) * 150,
-            title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
-        });
-        Doc.SetNativeWidth(imageSnapshot[DocData], Doc.NativeWidth(this.layoutDoc));
-        Doc.SetNativeHeight(imageSnapshot[DocData], Doc.NativeHeight(this.layoutDoc));
-        this._props.addDocument?.(imageSnapshot);
-        DocUtils.MakeLink(imageSnapshot, this.getAnchor(true), { link_relationship: 'video snapshot' });
-        setTimeout(() => downX !== undefined && downY !== undefined && DocumentView.getFirstDocumentView(imageSnapshot)?.startDragging(downX, downY, dropActionType.move, true));
-    };
-
-    static selectUrlToBase64 = async (blob: Blob): Promise<string> => {
-        try {
-            return new Promise((resolve, reject) => {
-                const reader = new FileReader();
-                reader.readAsDataURL(blob);
-                reader.onloadend = () => resolve(reader.result as string);
-                reader.onerror = error => reject(error);
-            });
-        } catch (error) {
-            console.error('Error:', error);
-            throw error;
-        }
-    };
-
-    /**
-     * Calls backend to find any text on an image. Gets the text and the
-     * coordinates of the text and creates label boxes at those locations.
-     * @param quiz
-     * @param i
-     */
-    pushInfo = async (quiz: quizMode, i?: string) => {
-        this._quizMode = quiz;
-        this._loading = true;
-
-        const img = {
-            file: i ? i : this.paths[0],
-            drag: i ? 'drag' : 'full',
-            smart: quiz,
-        };
-        const response = await axios.post('http://localhost:105/labels/', img, {
-            headers: {
-                'Content-Type': 'application/json',
-            },
-        });
-        if (response.data['boxes'].length != 0) {
-            this.createBoxes(response.data['boxes'], response.data['text']);
-        } else {
-            this._loading = false;
-        }
-    };
-
-    /**
-     * Creates label boxes over text on the image to be filled in.
-     * @param boxes
-     * @param texts
-     */
-    createBoxes = (boxes: [[[number, number]]], texts: [string]) => {
-        for (let i = 0; i < boxes.length; i++) {
-            const coords = boxes[i] ? boxes[i] : [];
-            const width = coords[1][0] - coords[0][0];
-            const height = coords[2][1] - coords[0][1];
-            const text = texts[i];
-
-            const newCol = Docs.Create.LabelDocument({
-                _width: width,
-                _height: height,
-                _layout_fitWidth: true,
-                title: '',
-            });
-            const scaling = 1 / (this._props.NativeDimScaling?.() || 1);
-            newCol.x = coords[0][0] + NumCast(this._marqueeref.current?.left) * scaling;
-            newCol.y = coords[0][1] + NumCast(this._marqueeref.current?.top) * scaling;
-
-            newCol.zIndex = 1000;
-            newCol.forceActive = true;
-            newCol.quiz = text;
-            newCol.showQuiz = false;
-            newCol[DocData].textTransform = 'none';
-            this._quizBoxes.push(newCol);
-            this.addDocument(newCol);
-            this._loading = false;
-        }
-    };
-
-    /**
-     * Create flashcards from an image.
-     */
-    getImageDesc = async () => {
-        this._loading = true;
-        try {
-            const hrefBase64 = await this.createCanvas();
-            const response = await gptImageLabel(hrefBase64, 'Make flashcards out of this image with each question and answer labeled as "question" and "answer". Do not label each flashcard and do not include asterisks: ');
-            AnchorMenu.Instance.transferToFlashcard(response, NumCast(this.layoutDoc['x']), NumCast(this.layoutDoc['y']));
-        } catch (error) {
-            console.log('Error', error);
-        }
-        this._loading = false;
-    };
-
-    /**
-     * Calls the createCanvas and pushInfo methods to convert the
-     * image to a form that can be passed to GPT and find the locations
-     * of the text.
-     */
-    makeLabels = async () => {
-        try {
-            const hrefBase64 = await this.createCanvas();
-            this.pushInfo(quizMode.NORMAL, hrefBase64);
-        } catch (error) {
-            console.log('Error', error);
-        }
-    };
-
-    /**
-     * Determines whether two words should be considered
-     * the same, allowing minor typos.
-     * @param str1
-     * @param str2
-     * @returns
-     */
-    levenshteinDistance = (str1: string, str2: string) => {
-        const len1 = str1.length;
-        const len2 = str2.length;
-        const dp = Array.from(Array(len1 + 1), () => Array(len2 + 1).fill(0));
-
-        if (len1 === 0) return len2;
-        if (len2 === 0) return len1;
-
-        for (let i = 0; i <= len1; i++) dp[i][0] = i;
-        for (let j = 0; j <= len2; j++) dp[0][j] = j;
-
-        for (let i = 1; i <= len1; i++) {
-            for (let j = 1; j <= len2; j++) {
-                const cost = str1[i - 1] === str2[j - 1] ? 0 : 1;
-                dp[i][j] = Math.min(
-                    dp[i - 1][j] + 1, // deletion
-                    dp[i][j - 1] + 1, // insertion
-                    dp[i - 1][j - 1] + cost // substitution
-                );
-            }
-        }
-
-        return dp[len1][len2];
-    };
-
-    /**
-     * Different algorithm for determining string similarity.
-     * @param str1
-     * @param str2
-     * @returns
-     */
-    jaccardSimilarity = (str1: string, str2: string) => {
-        const set1 = new Set(str1.split(' '));
-        const set2 = new Set(str2.split(' '));
-
-        const intersection = new Set([...set1].filter(x => set2.has(x)));
-        const union = new Set([...set1, ...set2]);
-
-        return intersection.size / union.size;
-    };
-
-    /**
-     * Averages the jaccardSimilarity and levenshteinDistance scores
-     * to determine string similarity for the labelboxes answers and
-     * the users response.
-     * @param str1
-     * @param str2
-     * @returns
-     */
-    stringSimilarity(str1: string, str2: string) {
-        const levenshteinDist = this.levenshteinDistance(str1, str2);
-        const levenshteinScore = 1 - levenshteinDist / Math.max(str1.length, str2.length);
-
-        const jaccardScore = this.jaccardSimilarity(str1, str2);
-
-        // Combine the scores with a higher weight on Jaccard similarity
-        return 0.5 * levenshteinScore + 0.5 * jaccardScore;
-    }
-
-    @computed get checkIcon() {
-        return (
-            <Tooltip title={<div className="dash-tooltip">Check</div>}>
-                <div className="check-icon" onPointerDown={this.check}>
-                    <FontAwesomeIcon icon="circle-check" size="lg" />
-                </div>
-            </Tooltip>
-        );
-    }
-
-    @computed get redoIcon() {
-        return (
-            <Tooltip title={<div className="dash-tooltip">Redo</div>}>
-                <div className="redo-icon" onPointerDown={this.redo}>
-                    <FontAwesomeIcon icon="redo-alt" size="lg" />
-                </div>
-            </Tooltip>
-        );
-    }
-
-    /**
-     * Returns whether two strings are similar
-     * @param input
-     * @param target
-     * @returns
-     */
-    compareWords = (input: string, target: string) => {
-        const distance = this.stringSimilarity(input.toLowerCase(), target.toLowerCase());
-        return distance >= 0.7;
-    };
-
-    /**
-     * GPT returns a hex color for what color the label box should be based on
-     * the correctness of the users answer.
-     * @param inputString
-     * @returns
-     */
-    extractHexAndSentences = (inputString: string) => {
-        // Regular expression to match a hexadecimal number at the beginning followed by a period and sentences
-        const regex = /^#([0-9A-Fa-f]+)\.\s*(.+)$/s;
-        const match = inputString.match(regex);
-
-        if (match) {
-            const hexNumber = match[1];
-            const sentences = match[2].trim();
-            return { hexNumber, sentences };
-        } else {
-            return { error: 'The input string does not match the expected format.' };
-        }
-    };
-
-    /**
-     * Check whether the contents of the label boxes on an image are correct.
-     */
-    check = () => {
-        this._loading = true;
-        this._quizBoxes.forEach(async doc => {
-            const input = StrCast(doc[DocData].title);
-            if (this._quizMode == quizMode.SMART && input) {
-                const questionText = 'Question: What was labeled in this image?';
-                const rubricText = ' Rubric: ' + StrCast(doc.quiz);
-                const queryText =
-                    questionText +
-                    ' UserAnswer: ' +
-                    input +
-                    '. ' +
-                    rubricText +
-                    '. One sentence and evaluate based on meaning, not wording. Provide a hex color at the beginning with a period after it on a scale of green (minor details missed) to red (big error) for how correct the answer is. Example: "#FFFFFF. Pasta is delicious."';
-                const response = await gptAPICall(queryText, GPTCallType.QUIZ);
-                const hexSent = this.extractHexAndSentences(response);
-                doc.quiz = hexSent.sentences?.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
-                doc.backgroundColor = '#' + hexSent.hexNumber;
-            } else {
-                const match = this.compareWords(input, StrCast(doc.quiz));
-                doc.backgroundColor = match ? '#11c249' : '#eb2d2d';
-            }
-            doc.showQuiz = true;
-        });
-        this._loading = false;
-    };
-
-    redo = () => {
-        this._quizBoxes.forEach(doc => {
-            doc[DocData].title = '';
-            doc.backgroundColor = '#e4e4e4';
-            doc.showQuiz = false;
-        });
-    };
-
-    /**
-     * Get rid of all the label boxes on the images.
-     */
-    exitQuizMode = () => {
-        this._quizMode = quizMode.NONE;
-        this._quizBoxes.forEach(doc => {
-            this.removeDocument?.(doc);
-        });
-        this._quizBoxes = [];
-    };
-
-    @action
-    setRef = (iref: HTMLImageElement | null) => {
-        this._imageRef = iref;
-    };
-
     specificContextMenu = (): void => {
         const field = Cast(this.dataDoc[this.fieldKey], ImageField);
         if (field) {
             const funcs: ContextMenuProps[] = [];
-            const quizes: ContextMenuProps[] = [];
-            quizes.push({
-                description: 'Smart Check',
-                event: this._quizMode == quizMode.NONE ? () => this.pushInfo(quizMode.SMART) : this.exitQuizMode,
-                icon: 'pen-to-square',
-            });
-            quizes.push({
-                description: 'Normal',
-                event: this._quizMode == quizMode.NONE ? () => this.pushInfo(quizMode.NORMAL) : this.exitQuizMode,
-                icon: 'pencil',
-            });
             funcs.push({ description: 'Rotate Clockwise 90', event: this.rotate, icon: 'redo-alt' });
             funcs.push({ description: `Show ${this.layoutDoc._showFullRes ? 'Dynamic Res' : 'Full Res'}`, event: this.resolution, icon: 'expand' });
             funcs.push({ description: 'Set Native Pixel Size', event: this.setNativeSize, icon: 'expand-arrows-alt' });
@@ -654,7 +329,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                 }),
                 icon: 'pencil-alt',
             });
-            ContextMenu.Instance?.addItem({ description: 'Quiz Mode', subitems: quizes, icon: 'file-pen' });
             ContextMenu.Instance?.addItem({ description: 'Options...', subitems: funcs, icon: 'asterisk' });
         }
     };
@@ -770,7 +444,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                 <div className="imageBox-fader" style={{ opacity: backAlpha }}>
                     <img
                         alt=""
-                        ref={this.setRef}
+                        ref={action((r: HTMLImageElement | null) => (this.imageRef = r))}
                         key="paths"
                         src={srcpath}
                         style={{ transform, transformOrigin }}
@@ -811,7 +485,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                 e,
                 action(moveEv => {
                     MarqueeAnnotator.clearAnnotations(this._savedAnnotations);
-                    this._marqueeref.current?.onInitiateSelection([moveEv.clientX, moveEv.clientY]);
+                    this.marqueeref.current?.onInitiateSelection([moveEv.clientX, moveEv.clientY]);
                     return true;
                 }),
                 returnFalse,
@@ -823,12 +497,11 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     @action
     finishMarquee = () => {
         this._getAnchor = AnchorMenu.Instance?.GetAnchor;
-        AnchorMenu.Instance.gptFlashcards = this.getImageDesc;
+        this._props.styleProvider?.(this.Document, this._props, StyleProp.AnchorMenuItems);
         AnchorMenu.Instance.addToCollection = this._props.DocumentView?.()._props.addDocument;
-        AnchorMenu.Instance.makeLabels = this.makeLabels;
-        AnchorMenu.Instance.marqueeWidth = this._marqueeref.current?.Width ?? 0;
-        AnchorMenu.Instance.marqueeHeight = this._marqueeref.current?.Height ?? 0;
-        this._marqueeref.current?.onTerminateSelection();
+        AnchorMenu.Instance.marqueeWidth = this.marqueeref.current?.Width ?? 0;
+        AnchorMenu.Instance.marqueeHeight = this.marqueeref.current?.Height ?? 0;
+        this.marqueeref.current?.onTerminateSelection();
         this._props.select(false);
     };
     focus = (anchor: Doc, options: FocusViewOptions) => (anchor.type === DocumentType.CONFIG ? undefined : this._ffref.current?.focus(anchor, options));
@@ -898,7 +571,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                 {!this._mainCont.current || !this.DocumentView || !this._annotationLayer.current ? null : (
                     <MarqueeAnnotator
                         Document={this.Document}
-                        ref={this._marqueeref}
+                        ref={this.marqueeref}
                         scrollTop={0}
                         annotationLayerScrollTop={0}
                         scaling={returnOne}
@@ -915,8 +588,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                         // anchorMenuFlashcard={() => this.getImageDesc()}
                     />
                 )}
-                {this._quizMode != quizMode.NONE ? this.checkIcon : null}
-                {this._quizMode != quizMode.NONE ? this.redoIcon : null}
             </div>
         );
     }
diff --git a/src/client/views/nodes/LabelBox.tsx b/src/client/views/nodes/LabelBox.tsx
index 058932457..07c0a114a 100644
--- a/src/client/views/nodes/LabelBox.tsx
+++ b/src/client/views/nodes/LabelBox.tsx
@@ -1,12 +1,8 @@
-import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { Tooltip } from '@mui/material';
 import { Property } from 'csstype';
 import { action, computed, makeObservable, observable } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import * as textfit from 'textfit';
-import { returnFalse, setupMoveUpEvents } from '../../../ClientUtils';
-import { emptyFunction } from '../../../Utils';
 import { Field, FieldType } from '../../../fields/Doc';
 import { BoolCast, NumCast, StrCast } from '../../../fields/Types';
 import { TraceMobx } from '../../../fields/util';
@@ -49,48 +45,6 @@ export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
         return this._props.styleProvider?.(this.Document, this._props, StyleProp.BackgroundColor) as string;
     }
 
-    @computed get answerIcon() {
-        return (
-            <Tooltip
-                title={
-                    <div className="answer-tooltip" style={{ minWidth: '150px' }}>
-                        {StrCast(this.Document.quiz)}
-                    </div>
-                }>
-                <div className="answer-tool-tip">
-                    <FontAwesomeIcon className="q-icon" icon="circle" color="white" />
-                    <FontAwesomeIcon className="answer-icon" icon="question" />
-                </div>
-            </Tooltip>
-        );
-    }
-
-    @computed get editAnswer() {
-        return (
-            <Tooltip
-                title={
-                    <div className="answer-tooltip" style={{ minWidth: '150px' }}>
-                        {this._editLabel ? 'save' : 'edit correct answer'}
-                    </div>
-                }>
-                <div className="answer-tool-tip" onPointerDown={e => setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => this.editLabelAnswer())}>
-                    <FontAwesomeIcon className="edit-icon" color={this._editLabel ? 'white' : 'black'} icon="pencil" size="sm" />
-                </div>
-            </Tooltip>
-        );
-    }
-
-    editLabelAnswer = () => {
-        // when click the pencil, set the text to the quiz content. when click off, set the quiz text to that and set textbox to nothing.
-        if (!this._editLabel) {
-            this.dataDoc.title = StrCast(this.Document.quiz);
-        } else {
-            this.Document.quiz = this.Title;
-            this.dataDoc.title = '';
-        }
-        this._editLabel = !this._editLabel;
-    };
-
     componentDidMount() {
         this._props.setContentViewBox?.(this);
     }
@@ -98,8 +52,6 @@ export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
         this._timeout && clearTimeout(this._timeout);
     }
 
-    specificContextMenu = (): void => {};
-
     drop = (/* e: Event, de: DragManager.DropEvent */) => {
         return false;
     };
@@ -152,7 +104,7 @@ export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
         const boxParams = this.fitTextToBox(undefined); // this causes mobx to trigger re-render when data changes
         const label = this.Title.startsWith('#') ? null : this.Title;
         return (
-            <div key={label?.length} className="labelBox-outerDiv" ref={this.createDropTarget} onContextMenu={this.specificContextMenu} style={{ boxShadow: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.BoxShadow) as string }}>
+            <div key={label?.length} className="labelBox-outerDiv" ref={this.createDropTarget} style={{ boxShadow: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.BoxShadow) as string }}>
                 <div
                     className="labelBox-mainButton"
                     style={{
@@ -203,8 +155,6 @@ export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
                         {label}
                     </div>
                 </div>
-                {this.Document.showQuiz ? this.answerIcon : null}
-                {this.Document.showQuiz ? this.editAnswer : null}
             </div>
         );
     }
-- 
cgit v1.2.3-70-g09d2


From efaa2991ac2670c73a81ab07f61c1626a4300507 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Mon, 7 Oct 2024 22:03:54 -0400
Subject: refactored imageUrlToBase64 into clientUtils.  lint fixes.

---
 src/ClientUtils.ts                                 | 21 ++++++++++++
 src/client/views/InkTranscription.tsx              | 36 +++++----------------
 .../views/collections/CollectionCardDeckView.tsx   | 23 ++------------
 .../collectionFreeForm/ImageLabelBox.tsx           | 22 +++++++------
 src/client/views/nodes/ComparisonBox.tsx           | 37 ++++++----------------
 src/client/views/nodes/LabelBox.tsx                |  3 +-
 .../views/nodes/formattedText/FormattedTextBox.tsx | 21 ++----------
 src/client/views/smartdraw/SmartDrawHandler.tsx    |  4 +--
 8 files changed, 59 insertions(+), 108 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/ClientUtils.ts b/src/ClientUtils.ts
index 972910071..e8165d5ab 100644
--- a/src/ClientUtils.ts
+++ b/src/ClientUtils.ts
@@ -655,6 +655,27 @@ export function dateRangeStrToDates(dateStr: string) {
     return { start: new Date(dateRangeParts[0]), end: new Date(dateRangeParts[1]) };
 }
 
+/**
+ * converts the image to base url formate
+ * @param imageUrl imageurl taken from the collection icon
+ */
+export async function imageUrlToBase64(imageUrl: string): Promise<string> {
+    try {
+        const response = await fetch(imageUrl);
+        const blob = await response.blob();
+
+        return new Promise((resolve, reject) => {
+            const reader = new FileReader();
+            reader.readAsDataURL(blob);
+            reader.onloadend = () => resolve(reader.result as string);
+            reader.onerror = error => reject(error);
+        });
+    } catch (error) {
+        console.error('Error:', error);
+        throw error;
+    }
+}
+
 function replaceCanvases(oldDiv: HTMLElement, newDiv: HTMLElement) {
     if (oldDiv.childNodes && newDiv) {
         for (let i = 0; i < oldDiv.childNodes.length; i++) {
diff --git a/src/client/views/InkTranscription.tsx b/src/client/views/InkTranscription.tsx
index 24d53a8c8..c5a9d3ba4 100644
--- a/src/client/views/InkTranscription.tsx
+++ b/src/client/views/InkTranscription.tsx
@@ -1,19 +1,19 @@
 import * as iink from 'iink-ts';
 import { action, observable } from 'mobx';
 import * as React from 'react';
+import { imageUrlToBase64 } from '../../ClientUtils';
+import { aggregateBounds } from '../../Utils';
 import { Doc, DocListCast } from '../../fields/Doc';
 import { InkData, InkField, InkTool } from '../../fields/InkField';
 import { Cast, DateCast, ImageCast, NumCast } from '../../fields/Types';
-import { aggregateBounds } from '../../Utils';
+import { ImageField, URLField } from '../../fields/URLField';
+import { gptHandwriting } from '../apis/gpt/GPT';
 import { DocumentType } from '../documents/DocumentTypes';
-import { CollectionFreeFormView, MarqueeView } from './collections/collectionFreeForm';
-import { InkingStroke } from './InkingStroke';
-import './InkTranscription.scss';
 import { Docs } from '../documents/Documents';
+import './InkTranscription.scss';
+import { InkingStroke } from './InkingStroke';
+import { CollectionFreeFormView, MarqueeView } from './collections/collectionFreeForm';
 import { DocumentView } from './nodes/DocumentView';
-import { ImageField } from '../../fields/URLField';
-import { gptHandwriting } from '../apis/gpt/GPT';
-import { URLField } from '../../fields/URLField';
 /**
  * Class component that handles inking in writing mode
  */
@@ -260,7 +260,7 @@ export class InkTranscription extends React.Component {
                     const hrefComplete = `${hrefParts[0]}_o.${hrefParts[1]}`;
                     let response;
                     try {
-                        const hrefBase64 = await this.imageUrlToBase64(hrefComplete);
+                        const hrefBase64 = await imageUrlToBase64(hrefComplete);
                         response = await gptHandwriting(hrefBase64);
                     } catch {
                         console.error('Error getting image');
@@ -291,26 +291,6 @@ export class InkTranscription extends React.Component {
         }
         return undefined;
     }
-    /**
-     * converts the image to base url formate
-     * @param imageUrl imageurl taken from the collection icon
-     */
-    imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
-        try {
-            const response = await fetch(imageUrl);
-            const blob = await response.blob();
-
-            return new Promise((resolve, reject) => {
-                const reader = new FileReader();
-                reader.readAsDataURL(blob);
-                reader.onloadend = () => resolve(reader.result as string);
-                reader.onerror = error => reject(error);
-            });
-        } catch (error) {
-            console.error('Error:', error);
-            throw error;
-        }
-    };
 
     /**
      * Creates the ink grouping once the user leaves the writing mode.
diff --git a/src/client/views/collections/CollectionCardDeckView.tsx b/src/client/views/collections/CollectionCardDeckView.tsx
index 842724e39..c61b0b4dd 100644
--- a/src/client/views/collections/CollectionCardDeckView.tsx
+++ b/src/client/views/collections/CollectionCardDeckView.tsx
@@ -1,7 +1,8 @@
 import { IReactionDisposer, ObservableMap, action, computed, makeObservable, observable, reaction } from 'mobx';
 import { observer } from 'mobx-react';
+import { computedFn } from 'mobx-utils';
 import * as React from 'react';
-import { ClientUtils, DashColor, returnFalse, returnZero } from '../../../ClientUtils';
+import { ClientUtils, DashColor, imageUrlToBase64, returnFalse, returnZero } from '../../../ClientUtils';
 import { Doc } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
 import { Id } from '../../../fields/FieldSymbols';
@@ -21,7 +22,6 @@ import { DocumentView } from '../nodes/DocumentView';
 import { GPTPopup, GPTPopupMode } from '../pdf/GPTPopup/GPTPopup';
 import './CollectionCardDeckView.scss';
 import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
-import { computedFn } from 'mobx-utils';
 
 enum cardSortings {
     Time = 'time',
@@ -52,23 +52,6 @@ export class CollectionCardView extends CollectionSubView() {
     @observable _maxRowCount = 10;
     @observable _docDraggedIndex: number = -1;
 
-    static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
-        try {
-            const response = await fetch(imageUrl);
-            const blob = await response.blob();
-
-            return new Promise((resolve, reject) => {
-                const reader = new FileReader();
-                reader.readAsDataURL(blob);
-                reader.onloadend = () => resolve(reader.result as string);
-                reader.onerror = error => reject(error);
-            });
-        } catch (error) {
-            console.error('Error:', error);
-            throw error;
-        }
-    };
-
     constructor(props: SubCollectionViewProps) {
         super(props);
         makeObservable(this);
@@ -462,7 +445,7 @@ export class CollectionCardView extends CollectionSubView() {
         const hrefParts = href.split('.');
         const hrefComplete = `${hrefParts[0]}_o.${hrefParts[1]}`;
         try {
-            const hrefBase64 = await CollectionCardView.imageUrlToBase64(hrefComplete);
+            const hrefBase64 = await imageUrlToBase64(hrefComplete);
             const response = await gptImageLabel(hrefBase64, 'Give three to five labels to describe this image.');
             image[DocData].description = response.trim();
             return response; // Return the response from gptImageLabel
diff --git a/src/client/views/collections/collectionFreeForm/ImageLabelBox.tsx b/src/client/views/collections/collectionFreeForm/ImageLabelBox.tsx
index 753685b97..583f2e656 100644
--- a/src/client/views/collections/collectionFreeForm/ImageLabelBox.tsx
+++ b/src/client/views/collections/collectionFreeForm/ImageLabelBox.tsx
@@ -6,6 +6,7 @@ import 'ldrs/ring';
 import { action, computed, makeObservable, observable, reaction } from 'mobx';
 import { observer } from 'mobx-react';
 import React from 'react';
+import { imageUrlToBase64 } from '../../../../ClientUtils';
 import { Utils, numberRange } from '../../../../Utils';
 import { Doc, NumListCast, Opt } from '../../../../fields/Doc';
 import { DocData } from '../../../../fields/DocSymbols';
@@ -22,13 +23,13 @@ import { MainView } from '../../MainView';
 import { DocumentView } from '../../nodes/DocumentView';
 import { FieldView, FieldViewProps } from '../../nodes/FieldView';
 import { OpenWhere } from '../../nodes/OpenWhere';
-import { CollectionCardView } from '../CollectionCardDeckView';
 import './ImageLabelBox.scss';
 import { MarqueeOptionsMenu } from './MarqueeOptionsMenu';
 
 export class ImageInformationItem {}
 
 export class ImageLabelBoxData {
+    // eslint-disable-next-line no-use-before-define
     static _instance: ImageLabelBoxData;
     @observable _docs: Doc[] = [];
     @observable _labelGroups: string[] = [];
@@ -47,8 +48,8 @@ export class ImageLabelBoxData {
     };
 
     @action
-    addLabel = (label: string) => {
-        label = label.toUpperCase().trim();
+    addLabel = (labelIn: string) => {
+        const label = labelIn.toUpperCase().trim();
         if (label.length > 0) {
             if (!this._labelGroups.includes(label)) {
                 this._labelGroups = [...this._labelGroups, label.startsWith('#') ? label : '#' + label];
@@ -68,9 +69,10 @@ export class ImageLabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
     public static LayoutString(fieldKey: string) {
         return FieldView.LayoutString(ImageLabelBox, fieldKey);
     }
+    // eslint-disable-next-line no-use-before-define
+    public static Instance: ImageLabelBox;
 
     private _dropDisposer?: DragManager.DragDropDisposer;
-    public static Instance: ImageLabelBox;
     private _inputRef = React.createRef<HTMLInputElement>();
     @observable _loading: boolean = false;
     private _currentLabel: string = '';
@@ -99,7 +101,7 @@ export class ImageLabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
     }
     @observable _displayImageInformation: boolean = false;
 
-    constructor(props: any) {
+    constructor(props: FieldViewProps) {
         super(props);
         makeObservable(this);
         ring.register();
@@ -165,7 +167,7 @@ export class ImageLabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
         const imageInfos = this._selectedImages.map(async doc => {
             if (!doc[DocData].tags_chat) {
                 const [name, type] = ImageCast(doc[Doc.LayoutFieldKey(doc)]).url.href.split('.');
-                return CollectionCardView.imageUrlToBase64(`${name}_o.${type}`).then(hrefBase64 =>
+                return imageUrlToBase64(`${name}_o.${type}`).then(hrefBase64 =>
                 !hrefBase64 ? undefined : 
                     gptImageLabel(hrefBase64,'Give three labels to describe this image.').then(labels => 
                         ({ doc, labels }))) ; // prettier-ignore
@@ -178,13 +180,13 @@ export class ImageLabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
 
                 const labels = imageInfo.labels.split('\n');
                 labels.forEach(label => {
-                    label =
+                    const hashLabel =
                         '#' +
                         label
                             .replace(/^\d+\.\s*|-|f\*/, '')
                             .replace(/^#/, '')
                             .trim();
-                    (imageInfo.doc[DocData].tags_chat as List<string>).push(label);
+                    (imageInfo.doc[DocData].tags_chat as List<string>).push(hashLabel);
                 });
             }
         });
@@ -214,7 +216,7 @@ export class ImageLabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
         // most similar one.
         this._selectedImages.forEach(doc => {
             const embedLists = numberRange((doc[DocData].tags_chat as List<string>).length).map(n => Array.from(NumListCast(doc[DocData][`tags_embedding_${n + 1}`])));
-            const bestEmbedScore = (embedding: Opt<number[]>) => Math.max(...embedLists.map((l, index) => (embedding && similarity(Array.from(embedding), l)!) || 0));
+            const bestEmbedScore = (embedding: Opt<number[]>) => Math.max(...embedLists.map(l => (embedding && similarity(Array.from(embedding), l)!) || 0));
             const {label: mostSimilarLabelCollect} = 
                 this._labelGroups.map(label => ({ label, similarityScore: bestEmbedScore(labelToEmbedding.get(label)) }))
                            .reduce((prev, cur) => cur.similarityScore < 0.3 || cur.similarityScore <= prev.similarityScore ? prev: cur,
@@ -243,7 +245,7 @@ export class ImageLabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
         if (this._selectedImages.length === 0) {
             return (
                 <div className="searchBox-container" style={{ pointerEvents: 'all', color: SnappingManager.userColor, background: SnappingManager.userBackgroundColor }} ref={ele => this.createDropTarget(ele!)}>
-                    <p style={{ fontSize: 'large' }}>In order to classify and sort images, marquee select the desired images and press the 'Classify and Sort Images' button. Then, add the desired groups for the images to be put in.</p>
+                    <p style={{ fontSize: 'large' }}>In order to classify and sort images, marquee select the desired images and press the &apos;Classify and Sort Images&apos; button. Then, add the desired groups for the images to be put in.</p>
                 </div>
             );
         }
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index c32bbc803..f7c478729 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -5,7 +5,7 @@ import { IReactionDisposer, action, computed, makeObservable, observable, reacti
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import ReactLoading from 'react-loading';
-import { returnFalse, returnNone, returnTrue, returnZero, setupMoveUpEvents } from '../../../ClientUtils';
+import { imageUrlToBase64, returnFalse, returnNone, returnTrue, returnZero, setupMoveUpEvents } from '../../../ClientUtils';
 import { emptyFunction } from '../../../Utils';
 import { Doc, Opt } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
@@ -365,7 +365,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 'Content-Type': 'application/json',
             },
         });
-        this.Document.phoneticTranscription = response.data['transcription'];
+        this.Document.phoneticTranscription = response.data.transcription;
     };
 
     /**
@@ -374,7 +374,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * @returns
      */
     getYouTubeVideoId = (url: string) => {
-        const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/;
+        const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=|\?v=)([^#&?]*).*/;
         const match = url.match(regExp);
         return match && match[2].length === 11 ? match[2] : null;
     };
@@ -392,7 +392,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 'Content-Type': 'application/json',
             },
         });
-        return response.data['transcription'];
+        return response.data.transcription;
     };
 
     createFlashcardPile(collectionArr: Doc[], gpt: boolean) {
@@ -402,9 +402,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             _layout_fitWidth: false,
             _layout_autoHeight: true,
         });
-        newCol['x'] = this.layoutDoc['x'];
-        newCol['y'] = NumCast(this.layoutDoc['y']) + 50;
-        newCol.type_collection = 'carousel';
+        newCol.x = this.layoutDoc.x;
+        newCol.y = NumCast(this.layoutDoc.y) + 50;
+        newCol.type_collection = CollectionViewType.Carousel as string;
         for (let i = 0; i < collectionArr.length; i++) {
             DocCast(collectionArr[i])[DocData].embedContainer = newCol;
         }
@@ -606,34 +606,17 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 _height: 150,
                 title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
             });
-            imageSnapshot['x'] = this.layoutDoc['x'];
-            imageSnapshot['y'] = this.layoutDoc['y'];
+            imageSnapshot.x = this.layoutDoc.x;
+            imageSnapshot.y = this.layoutDoc.y;
             return imageSnapshot;
         } catch (error) {
             console.log(error);
         }
     };
 
-    static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
-        try {
-            const response = await fetch(imageUrl);
-            const blob = await response.blob();
-
-            return new Promise((resolve, reject) => {
-                const reader = new FileReader();
-                reader.readAsDataURL(blob);
-                reader.onloadend = () => resolve(reader.result as string);
-                reader.onerror = error => reject(error);
-            });
-        } catch (error) {
-            console.error('Error:', error);
-            throw error;
-        }
-    };
-
     getImageDesc = async (u: string) => {
         try {
-            const hrefBase64 = await ComparisonBox.imageUrlToBase64(u);
+            const hrefBase64 = await imageUrlToBase64(u);
             const response = await gptImageLabel(hrefBase64, 'Answer the following question as a short flashcard response. Do not include a label.' + (this.dataDoc.text as RichTextField)?.Text);
 
             DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = response;
diff --git a/src/client/views/nodes/LabelBox.tsx b/src/client/views/nodes/LabelBox.tsx
index 07c0a114a..696ba5697 100644
--- a/src/client/views/nodes/LabelBox.tsx
+++ b/src/client/views/nodes/LabelBox.tsx
@@ -1,5 +1,5 @@
 import { Property } from 'csstype';
-import { action, computed, makeObservable, observable } from 'mobx';
+import { action, computed, makeObservable } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import * as textfit from 'textfit';
@@ -22,7 +22,6 @@ export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
     }
     private dropDisposer?: DragManager.DragDropDisposer;
     private _timeout: NodeJS.Timeout | undefined;
-    @observable private _editLabel = false;
     _divRef: HTMLDivElement | null = null;
 
     constructor(props: FieldViewProps) {
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 037b6315c..c89737e1e 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -13,7 +13,7 @@ import { EditorState, NodeSelection, Plugin, Selection, TextSelection, Transacti
 import { EditorView, NodeViewConstructor } from 'prosemirror-view';
 import * as React from 'react';
 import { BsMarkdownFill } from 'react-icons/bs';
-import { addStyleSheet, addStyleSheetRule, clearStyleSheetRules, ClientUtils, DivWidth, returnFalse, returnZero, setupMoveUpEvents, simMouseEvent, smoothScroll, StopEvent } from '../../../../ClientUtils';
+import { addStyleSheet, addStyleSheetRule, clearStyleSheetRules, ClientUtils, DivWidth, imageUrlToBase64, returnFalse, returnZero, setupMoveUpEvents, simMouseEvent, smoothScroll, StopEvent } from '../../../../ClientUtils';
 import { DateField } from '../../../../fields/DateField';
 import { CreateLinkToActiveAudio, Doc, DocListCast, Field, FieldType, Opt, StrListCast } from '../../../../fields/Doc';
 import { AclAdmin, AclAugment, AclEdit, AclSelfEdit, DocCss, DocData, ForceServerWrite, UpdatingFromServer } from '../../../../fields/DocSymbols';
@@ -1008,30 +1008,13 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
         // console.log('HI' + this.ProseRef?.getElementsByTagName('img'));
     };
 
-    static imageUrlToBase64 = async (imageUrl: string): Promise<string> => {
-        try {
-            const response = await fetch(imageUrl);
-            const blob = await response.blob();
-
-            return new Promise((resolve, reject) => {
-                const reader = new FileReader();
-                reader.readAsDataURL(blob);
-                reader.onloadend = () => resolve(reader.result as string);
-                reader.onerror = error => reject(error);
-            });
-        } catch (error) {
-            console.error('Error:', error);
-            throw error;
-        }
-    };
-
     getImageDesc = async (u: string) => {
         // if (StrCast(this.dataDoc.description)) return StrCast(this.dataDoc.description); // Return existing description
         // const { href } = (u as URLField).url;
         const hrefParts = u.split('.');
         const hrefComplete = `${hrefParts[0]}_o.${hrefParts[1]}`;
         try {
-            const hrefBase64 = await FormattedTextBox.imageUrlToBase64(u);
+            const hrefBase64 = await imageUrlToBase64(u);
             const response = await gptImageLabel(
                 hrefBase64,
                 'Make flashcards out of this text and image with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ' + (this.dataDoc.text as RichTextField)?.Text
diff --git a/src/client/views/smartdraw/SmartDrawHandler.tsx b/src/client/views/smartdraw/SmartDrawHandler.tsx
index 75ef55060..b4635673c 100644
--- a/src/client/views/smartdraw/SmartDrawHandler.tsx
+++ b/src/client/views/smartdraw/SmartDrawHandler.tsx
@@ -7,6 +7,7 @@ import React from 'react';
 import { AiOutlineSend } from 'react-icons/ai';
 import ReactLoading from 'react-loading';
 import { INode, parse } from 'svgson';
+import { imageUrlToBase64 } from '../../../ClientUtils';
 import { unimplementedFunction } from '../../../Utils';
 import { Doc, DocListCast } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
@@ -19,7 +20,6 @@ import { undoable } from '../../util/UndoManager';
 import { SVGToBezier, SVGType } from '../../util/bezierFit';
 import { InkingStroke } from '../InkingStroke';
 import { ObservableReactComponent } from '../ObservableReactComponent';
-import { CollectionCardView } from '../collections/CollectionCardDeckView';
 import { MarqueeView } from '../collections/collectionFreeForm';
 import { ActiveArrowEnd, ActiveArrowStart, ActiveDash, ActiveFillColor, ActiveInkBezierApprox, ActiveInkColor, ActiveInkWidth, ActiveIsInkMask, DocumentView } from '../nodes/DocumentView';
 import './SmartDrawHandler.scss';
@@ -310,7 +310,7 @@ export class SmartDrawHandler extends ObservableReactComponent<object> {
         const hrefParts = href.split('.');
         const hrefComplete = `${hrefParts[0]}_o.${hrefParts[1]}`;
         try {
-            const hrefBase64 = await CollectionCardView.imageUrlToBase64(hrefComplete);
+            const hrefBase64 = await imageUrlToBase64(hrefComplete);
             const strokes = DocListCast(drawing[DocData].data);
             const coords: string[] = [];
             strokes.forEach((stroke, i) => {
-- 
cgit v1.2.3-70-g09d2


From 66950dca6e7add542aba3c6caa8115ce7f1ecd73 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Mon, 7 Oct 2024 22:48:54 -0400
Subject: comments and clean up

---
 eslint.config.mjs                        |  65 ++-------
 package-lock.json                        | 239 ++++++++++++++++++-------------
 package.json                             |  10 +-
 src/client/views/nodes/AudioBox.tsx      |  19 +--
 src/client/views/nodes/ComparisonBox.tsx |   7 -
 src/client/views/nodes/ImageBox.tsx      |   1 -
 6 files changed, 151 insertions(+), 190 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/eslint.config.mjs b/eslint.config.mjs
index f7063caa5..4f03c066a 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -1,58 +1,11 @@
-import pluginJs from '@eslint/js';
-import pluginReactConfig from 'eslint-plugin-react/configs/recommended.js';
-import globals from 'globals';
-import tseslint from 'typescript-eslint';
+import globals from "globals";
+import tseslint from "typescript-eslint";
+import pluginReact from "eslint-plugin-react";
 
-export default [
-    {
-        languageOptions: { globals: { ...globals.browser, ...globals.node } },
-    },
-    pluginJs.configs.recommended,
-    ...tseslint.configs.recommended,
-    {
-        rules: {
-            'node/no-missing-import': 0,
-            'no-console': 'off',
-            'func-names': 'off',
-            'no-process-exit': 'off',
-            'object-shorthand': 'off',
-            'class-methods-use-this': 'off',
-            'single-quote': 'off',
-            'max-classes-per-file': 0,
-
-            'react/jsx-filename-extension': [
-                2,
-                {
-                    extensions: ['.js', '.jsx', '.ts', '.tsx'],
-                },
-            ],
 
-            'import/prefer-default-export': 'off',
-            'no-unused-expressions': 'off',
-            '@typescript-eslint/no-unused-expressions': 'off',
-            'prefer-template': 'off',
-            'no-inner-declarations': 'off',
-            'no-plusplus': 'off',
-            'no-multi-assign': 'off',
-            'no-underscore-dangle': 'off',
-            'no-nested-ternary': 'off',
-            'no-param-reassign': 'error',
-            'lines-between-class-members': 'off',
-            'no-shadow': 'off',
-            '@typescript-eslint/no-shadow': 'warn',
-            'no-unused-vars': 'off',
-            '@typescript-eslint/no-unused-vars': 'error',
-            '@typescript-eslint/no-namespace': 'off',
-            'react/destructuring-assignment': 0,
-            'prefer-arrow-callback': 'error',
-            'no-return-assign': 'error',
-            'no-await-in-loop': 'error',
-            'no-loop-func': 'error',
-            'no-cond-assign': 'error',
-            'no-use-before-define': 'error',
-            '@typescript-eslint/no-explicit-any': 'error',
-            'no-restricted-globals': ['error', 'event'],
-        },
-    },
-    pluginReactConfig,
-];
+export default [
+  {files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"]},
+  {languageOptions: { globals: globals.browser }},
+  ...tseslint.configs.recommended,
+  pluginReact.configs.flat.recommended,
+];
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 276a516df..25ffaf22b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -308,9 +308,9 @@
                 "@types/youtube": "^0.1.0",
                 "chai": "^5.0.0",
                 "cross-env": "^7.0.3",
-                "eslint": "^9.10.0",
-                "eslint-plugin-react": "^7.36.1",
-                "globals": "^15.9.0",
+                "eslint": "^9.12.0",
+                "eslint-plugin-react": "^7.37.1",
+                "globals": "^15.10.0",
                 "jsdom": "^25.0.0",
                 "mocha": "^10.2.0",
                 "prettier": "^3.1.0",
@@ -319,7 +319,7 @@
                 "ts-loader": "^9.5.1",
                 "ts-node": "^10.9.1",
                 "ts-node-dev": "^2.0.0",
-                "typescript-eslint": "^8.6.0",
+                "typescript-eslint": "^8.8.0",
                 "webpack-dev-server": "^5.0.4"
             },
             "engines": {
@@ -2638,6 +2638,14 @@
                 "node": "*"
             }
         },
+        "node_modules/@eslint/core": {
+            "version": "0.6.0",
+            "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz",
+            "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==",
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            }
+        },
         "node_modules/@eslint/eslintrc": {
             "version": "3.1.0",
             "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
@@ -2708,10 +2716,9 @@
             }
         },
         "node_modules/@eslint/js": {
-            "version": "9.10.0",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
-            "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
-            "license": "MIT",
+            "version": "9.12.0",
+            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.12.0.tgz",
+            "integrity": "sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==",
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
             }
@@ -2725,10 +2732,9 @@
             }
         },
         "node_modules/@eslint/plugin-kit": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.1.0.tgz",
-            "integrity": "sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==",
-            "license": "Apache-2.0",
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz",
+            "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==",
             "dependencies": {
                 "levn": "^0.4.1"
             },
@@ -2990,6 +2996,26 @@
                 "supercluster": "^8.0.1"
             }
         },
+        "node_modules/@humanfs/core": {
+            "version": "0.19.0",
+            "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz",
+            "integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==",
+            "engines": {
+                "node": ">=18.18.0"
+            }
+        },
+        "node_modules/@humanfs/node": {
+            "version": "0.16.5",
+            "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz",
+            "integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==",
+            "dependencies": {
+                "@humanfs/core": "^0.19.0",
+                "@humanwhocodes/retry": "^0.3.0"
+            },
+            "engines": {
+                "node": ">=18.18.0"
+            }
+        },
         "node_modules/@humanwhocodes/module-importer": {
             "version": "1.0.1",
             "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
@@ -3003,9 +3029,9 @@
             }
         },
         "node_modules/@humanwhocodes/retry": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz",
-            "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==",
+            "version": "0.3.1",
+            "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+            "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
             "engines": {
                 "node": ">=18.18"
             },
@@ -4154,6 +4180,8 @@
             "version": "2.1.5",
             "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
             "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+            "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@nodelib/fs.stat": "2.0.5",
                 "run-parallel": "^1.1.9"
@@ -4166,6 +4194,8 @@
             "version": "2.0.5",
             "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
             "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+            "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">= 8"
             }
@@ -4174,6 +4204,8 @@
             "version": "1.2.8",
             "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
             "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+            "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@nodelib/fs.scandir": "2.1.5",
                 "fastq": "^1.6.0"
@@ -9435,9 +9467,9 @@
             }
         },
         "node_modules/@types/estree": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
-            "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+            "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="
         },
         "node_modules/@types/estree-jsx": {
             "version": "1.0.5",
@@ -10202,17 +10234,17 @@
             "dev": true
         },
         "node_modules/@typescript-eslint/eslint-plugin": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.6.0.tgz",
-            "integrity": "sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==",
+            "version": "8.8.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.0.tgz",
+            "integrity": "sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
                 "@eslint-community/regexpp": "^4.10.0",
-                "@typescript-eslint/scope-manager": "8.6.0",
-                "@typescript-eslint/type-utils": "8.6.0",
-                "@typescript-eslint/utils": "8.6.0",
-                "@typescript-eslint/visitor-keys": "8.6.0",
+                "@typescript-eslint/scope-manager": "8.8.0",
+                "@typescript-eslint/type-utils": "8.8.0",
+                "@typescript-eslint/utils": "8.8.0",
+                "@typescript-eslint/visitor-keys": "8.8.0",
                 "graphemer": "^1.4.0",
                 "ignore": "^5.3.1",
                 "natural-compare": "^1.4.0",
@@ -10236,16 +10268,16 @@
             }
         },
         "node_modules/@typescript-eslint/parser": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz",
-            "integrity": "sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==",
+            "version": "8.8.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.0.tgz",
+            "integrity": "sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==",
             "dev": true,
             "license": "BSD-2-Clause",
             "dependencies": {
-                "@typescript-eslint/scope-manager": "8.6.0",
-                "@typescript-eslint/types": "8.6.0",
-                "@typescript-eslint/typescript-estree": "8.6.0",
-                "@typescript-eslint/visitor-keys": "8.6.0",
+                "@typescript-eslint/scope-manager": "8.8.0",
+                "@typescript-eslint/types": "8.8.0",
+                "@typescript-eslint/typescript-estree": "8.8.0",
+                "@typescript-eslint/visitor-keys": "8.8.0",
                 "debug": "^4.3.4"
             },
             "engines": {
@@ -10265,14 +10297,14 @@
             }
         },
         "node_modules/@typescript-eslint/scope-manager": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz",
-            "integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==",
+            "version": "8.8.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.0.tgz",
+            "integrity": "sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@typescript-eslint/types": "8.6.0",
-                "@typescript-eslint/visitor-keys": "8.6.0"
+                "@typescript-eslint/types": "8.8.0",
+                "@typescript-eslint/visitor-keys": "8.8.0"
             },
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10283,14 +10315,14 @@
             }
         },
         "node_modules/@typescript-eslint/type-utils": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.6.0.tgz",
-            "integrity": "sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==",
+            "version": "8.8.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.0.tgz",
+            "integrity": "sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@typescript-eslint/typescript-estree": "8.6.0",
-                "@typescript-eslint/utils": "8.6.0",
+                "@typescript-eslint/typescript-estree": "8.8.0",
+                "@typescript-eslint/utils": "8.8.0",
                 "debug": "^4.3.4",
                 "ts-api-utils": "^1.3.0"
             },
@@ -10308,9 +10340,9 @@
             }
         },
         "node_modules/@typescript-eslint/types": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz",
-            "integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==",
+            "version": "8.8.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.0.tgz",
+            "integrity": "sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==",
             "dev": true,
             "license": "MIT",
             "engines": {
@@ -10322,14 +10354,14 @@
             }
         },
         "node_modules/@typescript-eslint/typescript-estree": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz",
-            "integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==",
+            "version": "8.8.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.0.tgz",
+            "integrity": "sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==",
             "dev": true,
             "license": "BSD-2-Clause",
             "dependencies": {
-                "@typescript-eslint/types": "8.6.0",
-                "@typescript-eslint/visitor-keys": "8.6.0",
+                "@typescript-eslint/types": "8.8.0",
+                "@typescript-eslint/visitor-keys": "8.8.0",
                 "debug": "^4.3.4",
                 "fast-glob": "^3.3.2",
                 "is-glob": "^4.0.3",
@@ -10380,16 +10412,16 @@
             }
         },
         "node_modules/@typescript-eslint/utils": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz",
-            "integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==",
+            "version": "8.8.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.0.tgz",
+            "integrity": "sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.4.0",
-                "@typescript-eslint/scope-manager": "8.6.0",
-                "@typescript-eslint/types": "8.6.0",
-                "@typescript-eslint/typescript-estree": "8.6.0"
+                "@typescript-eslint/scope-manager": "8.8.0",
+                "@typescript-eslint/types": "8.8.0",
+                "@typescript-eslint/typescript-estree": "8.8.0"
             },
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10403,13 +10435,13 @@
             }
         },
         "node_modules/@typescript-eslint/visitor-keys": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz",
-            "integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==",
+            "version": "8.8.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.0.tgz",
+            "integrity": "sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@typescript-eslint/types": "8.6.0",
+                "@typescript-eslint/types": "8.8.0",
                 "eslint-visitor-keys": "^3.4.3"
             },
             "engines": {
@@ -17888,28 +17920,31 @@
             }
         },
         "node_modules/eslint": {
-            "version": "9.10.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.10.0.tgz",
-            "integrity": "sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==",
+            "version": "9.12.0",
+            "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.12.0.tgz",
+            "integrity": "sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==",
             "license": "MIT",
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.2.0",
                 "@eslint-community/regexpp": "^4.11.0",
                 "@eslint/config-array": "^0.18.0",
+                "@eslint/core": "^0.6.0",
                 "@eslint/eslintrc": "^3.1.0",
-                "@eslint/js": "9.10.0",
-                "@eslint/plugin-kit": "^0.1.0",
+                "@eslint/js": "9.12.0",
+                "@eslint/plugin-kit": "^0.2.0",
+                "@humanfs/node": "^0.16.5",
                 "@humanwhocodes/module-importer": "^1.0.1",
-                "@humanwhocodes/retry": "^0.3.0",
-                "@nodelib/fs.walk": "^1.2.8",
+                "@humanwhocodes/retry": "^0.3.1",
+                "@types/estree": "^1.0.6",
+                "@types/json-schema": "^7.0.15",
                 "ajv": "^6.12.4",
                 "chalk": "^4.0.0",
                 "cross-spawn": "^7.0.2",
                 "debug": "^4.3.2",
                 "escape-string-regexp": "^4.0.0",
-                "eslint-scope": "^8.0.2",
-                "eslint-visitor-keys": "^4.0.0",
-                "espree": "^10.1.0",
+                "eslint-scope": "^8.1.0",
+                "eslint-visitor-keys": "^4.1.0",
+                "espree": "^10.2.0",
                 "esquery": "^1.5.0",
                 "esutils": "^2.0.2",
                 "fast-deep-equal": "^3.1.3",
@@ -17919,13 +17954,11 @@
                 "ignore": "^5.2.0",
                 "imurmurhash": "^0.1.4",
                 "is-glob": "^4.0.0",
-                "is-path-inside": "^3.0.3",
                 "json-stable-stringify-without-jsonify": "^1.0.1",
                 "lodash.merge": "^4.6.2",
                 "minimatch": "^3.1.2",
                 "natural-compare": "^1.4.0",
                 "optionator": "^0.9.3",
-                "strip-ansi": "^6.0.1",
                 "text-table": "^0.2.0"
             },
             "bin": {
@@ -17947,9 +17980,9 @@
             }
         },
         "node_modules/eslint-plugin-react": {
-            "version": "7.36.1",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz",
-            "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==",
+            "version": "7.37.1",
+            "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz",
+            "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -18019,9 +18052,9 @@
             }
         },
         "node_modules/eslint-scope": {
-            "version": "8.0.2",
-            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz",
-            "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==",
+            "version": "8.1.0",
+            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz",
+            "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==",
             "dependencies": {
                 "esrecurse": "^4.3.0",
                 "estraverse": "^5.2.0"
@@ -18034,9 +18067,9 @@
             }
         },
         "node_modules/eslint-visitor-keys": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
-            "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz",
+            "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==",
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
             },
@@ -18160,13 +18193,13 @@
             }
         },
         "node_modules/espree": {
-            "version": "10.1.0",
-            "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
-            "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
+            "version": "10.2.0",
+            "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz",
+            "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==",
             "dependencies": {
                 "acorn": "^8.12.0",
                 "acorn-jsx": "^5.3.2",
-                "eslint-visitor-keys": "^4.0.0"
+                "eslint-visitor-keys": "^4.1.0"
             },
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -18575,6 +18608,8 @@
             "version": "1.17.1",
             "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
             "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+            "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "reusify": "^1.0.4"
             }
@@ -19708,9 +19743,9 @@
             }
         },
         "node_modules/globals": {
-            "version": "15.9.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
-            "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
+            "version": "15.10.0",
+            "resolved": "https://registry.npmjs.org/globals/-/globals-15.10.0.tgz",
+            "integrity": "sha512-tqFIbz83w4Y5TCbtgjZjApohbuh7K9BxGYFm7ifwDR240tvdb7P9x+/9VvUKlmkPoiknoJtanI8UOrqxS3a7lQ==",
             "dev": true,
             "license": "MIT",
             "engines": {
@@ -21554,14 +21589,6 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/is-path-inside": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
-            "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
-            "engines": {
-                "node": ">=8"
-            }
-        },
         "node_modules/is-plain-obj": {
             "version": "4.1.0",
             "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
@@ -28775,6 +28802,7 @@
             "version": "1.2.3",
             "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
             "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+            "dev": true,
             "funding": [
                 {
                     "type": "github",
@@ -28788,7 +28816,8 @@
                     "type": "consulting",
                     "url": "https://feross.org/support"
                 }
-            ]
+            ],
+            "license": "MIT"
         },
         "node_modules/queue-tick": {
             "version": "1.0.1",
@@ -30168,6 +30197,8 @@
             "version": "1.0.4",
             "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
             "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+            "dev": true,
+            "license": "MIT",
             "engines": {
                 "iojs": ">=1.0.0",
                 "node": ">=0.10.0"
@@ -30318,6 +30349,7 @@
             "version": "1.2.0",
             "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
             "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+            "dev": true,
             "funding": [
                 {
                     "type": "github",
@@ -30332,6 +30364,7 @@
                     "url": "https://feross.org/support"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "queue-microtask": "^1.2.2"
             }
@@ -33100,15 +33133,15 @@
             "integrity": "sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ=="
         },
         "node_modules/typescript-eslint": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.6.0.tgz",
-            "integrity": "sha512-eEhhlxCEpCd4helh3AO1hk0UP2MvbRi9CtIAJTVPQjuSXOOO2jsEacNi4UdcJzZJbeuVg1gMhtZ8UYb+NFYPrA==",
+            "version": "8.8.0",
+            "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.8.0.tgz",
+            "integrity": "sha512-BjIT/VwJ8+0rVO01ZQ2ZVnjE1svFBiRczcpr1t1Yxt7sT25VSbPfrJtDsQ8uQTy2pilX5nI9gwxhUyLULNentw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@typescript-eslint/eslint-plugin": "8.6.0",
-                "@typescript-eslint/parser": "8.6.0",
-                "@typescript-eslint/utils": "8.6.0"
+                "@typescript-eslint/eslint-plugin": "8.8.0",
+                "@typescript-eslint/parser": "8.8.0",
+                "@typescript-eslint/utils": "8.8.0"
             },
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
diff --git a/package.json b/package.json
index 8646a1d7f..4f133e3d6 100644
--- a/package.json
+++ b/package.json
@@ -73,9 +73,9 @@
         "@types/youtube": "^0.1.0",
         "chai": "^5.0.0",
         "cross-env": "^7.0.3",
-        "eslint": "^9.10.0",
-        "eslint-plugin-react": "^7.36.1",
-        "globals": "^15.9.0",
+        "eslint": "^9.12.0",
+        "eslint-plugin-react": "^7.37.1",
+        "globals": "^15.10.0",
         "jsdom": "^25.0.0",
         "mocha": "^10.2.0",
         "prettier": "^3.1.0",
@@ -84,7 +84,7 @@
         "ts-loader": "^9.5.1",
         "ts-node": "^10.9.1",
         "ts-node-dev": "^2.0.0",
-        "typescript-eslint": "^8.6.0",
+        "typescript-eslint": "^8.8.0",
         "webpack-dev-server": "^5.0.4"
     },
     "dependencies": {
@@ -311,8 +311,8 @@
         "string-similarity": "^4.0.4",
         "styled-components": "^6.1.1",
         "supercluster": "^8.0.1",
-        "tesseract.js": "^5.1.0",
         "svgson": "^5.3.1",
+        "tesseract.js": "^5.1.0",
         "textarea-caret": "^3.1.0",
         "textfit": "^2.4.0",
         "tough-cookie": "^5.0.0",
diff --git a/src/client/views/nodes/AudioBox.tsx b/src/client/views/nodes/AudioBox.tsx
index 2c0a102f5..25e76e2a6 100644
--- a/src/client/views/nodes/AudioBox.tsx
+++ b/src/client/views/nodes/AudioBox.tsx
@@ -299,32 +299,15 @@ export class AudioBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         this.Document[DocData].phoneticTranscription = response.data['transcription'];
     };
 
-    youtubeUpload = async () => {
-        console.log('Here');
-        const audio = {
-            file: 'Cd2ch4XV84s&t=373s',
-        };
-        const response = await axios.post('http://localhost:105/youtube/', audio, {
-            headers: {
-                'Content-Type': 'application/json',
-            },
-        });
-    };
-
     // context menu
     specificContextMenu = (): void => {
         const funcs: ContextMenuProps[] = [];
 
-        funcs.push({
-            description: 'Youtube',
-            event: this.youtubeUpload, // prettier-ignore
-            icon: 'expand-arrows-alt',
-        });
         funcs.push({
             description: (this.layoutDoc.hideAnchors ? "Don't hide" : 'Hide') + ' anchors',
             event: () => { this.layoutDoc.hideAnchors = !this.layoutDoc.hideAnchors; }, // prettier-ignore
             icon: 'expand-arrows-alt',
-        });
+        }); //
         funcs.push({
             description: (this.layoutDoc.dontAutoFollowLinks ? '' : "Don't") + ' follow links when encountered',
             event: () => { this.layoutDoc.dontAutoFollowLinks = !this.layoutDoc.dontAutoFollowLinks}, // prettier-ignore
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 9fb8bc4d6..e686368e9 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -528,12 +528,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      */
     askGPTPhonemes = async (phonemes: string) => {
         const sentence = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
-        const phon = 'w ʌ ɪ z j ɔː ɹ n e ɪ m ';
-        const phon2 = 'h ʌ ɛ r j ʌ t ʌ d eɪ';
         const phon6 = 'huː ɑɹ juː tədeɪ';
-        const phon3 = 'ʃ eɪ oʊ s i ʃ oʊ z b aɪ ð ə s iː ʃ oʊ';
         const phon4 = 'kamo estas hɔi';
-        const phon5 = 'la s e n a l';
         const promptEng =
             'Consider all possible phonetic transcriptions of the intended sentence "' +
             sentence +
@@ -575,14 +571,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * @param e
      */
     handleResult = (e: SpeechRecognitionEvent) => {
-        let interimTranscript = '';
         let finalTranscript = '';
         for (let i = e.resultIndex; i < e.results.length; i++) {
             const transcript = e.results[i][0].transcript;
             if (e.results[i].isFinal) {
                 finalTranscript += transcript;
-            } else {
-                interimTranscript += transcript;
             }
         }
         this._inputValue += finalTranscript;
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index 31f6df2ea..0571351f0 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -192,7 +192,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
 
     handleSelection = async (selection: string) => {
         this._searchInput = selection;
-        const images = await this.fetchImages();
     };
 
     drop = undoable((e: Event, de: DragManager.DropEvent) => {
-- 
cgit v1.2.3-70-g09d2


From 972839216c14baa5c9eaf80e1fb2fb2694bbb72c Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 8 Oct 2024 22:51:46 -0400
Subject: modified how buttons are laid out on carousel and comparison views so
 that text boxes can reflow around them.  extracted flashcard pratice into its
 own component and applied it to carousel3D and carousel

---
 src/client/views/PropertiesView.tsx                |   7 +-
 .../collections/CollectionCarousel3DView.scss      |   1 +
 .../views/collections/CollectionCarousel3DView.tsx |  70 ++++-
 .../views/collections/CollectionCarouselView.scss  |  86 +-----
 .../views/collections/CollectionCarouselView.tsx   | 316 ++++++---------------
 .../views/collections/FlashcardPracticeUI.scss     |  64 +++++
 .../views/collections/FlashcardPracticeUI.tsx      | 172 +++++++++++
 src/client/views/nodes/ComparisonBox.scss          |  15 +
 src/client/views/nodes/ComparisonBox.tsx           |  92 ++++--
 src/client/views/nodes/FieldView.tsx               |   1 +
 .../nodes/formattedText/FormattedTextBox.scss      |   6 -
 .../views/nodes/formattedText/FormattedTextBox.tsx |  16 +-
 12 files changed, 475 insertions(+), 371 deletions(-)
 create mode 100644 src/client/views/collections/FlashcardPracticeUI.scss
 create mode 100644 src/client/views/collections/FlashcardPracticeUI.tsx

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/PropertiesView.tsx b/src/client/views/PropertiesView.tsx
index 371d34173..442dab671 100644
--- a/src/client/views/PropertiesView.tsx
+++ b/src/client/views/PropertiesView.tsx
@@ -139,6 +139,9 @@ export class PropertiesView extends ObservableReactComponent<PropertiesViewProps
         Object.values(this._disposers).forEach(disposer => disposer?.());
     }
 
+    @computed get isText() {
+        return this.selectedDoc?.type === DocumentType.RTF;
+    }
     @computed get isInk() {
         return this.selectedDoc?.type === DocumentType.INK;
     }
@@ -1199,8 +1202,8 @@ export class PropertiesView extends ObservableReactComponent<PropertiesViewProps
             // prettier-ignore
             <div className="transform-editor">
                 {!this.isStack ? null : this.getNumber('Gap', ' px', 0, 200, NumCast(this.selectedDoc!.gridGap), this.setVal((doc: Doc, val: number) => { doc.gridGap = val; })) }
-                {!this.isStack ? null : this.getNumber('xMargin', ' px', 0, 500, NumCast(this.selectedDoc!.xMargin), this.setVal((doc: Doc, val: number) => { doc.xMargin = val; })) }
-                {!this.isStack ? null : this.getNumber('yMargin', ' px', 0, 500, NumCast(this.selectedDoc!.yMargin), this.setVal((doc: Doc, val: number) => { doc.yMargin = val; })) }
+                {!this.isStack && !this.isText? null : this.getNumber('xMargin', ' px', 0, 500, NumCast(this.selectedDoc!.xMargin), this.setVal((doc: Doc, val: number) => { doc.xMargin = val; })) }
+                {!this.isStack && !this.isText? null : this.getNumber('yMargin', ' px', 0, 500, NumCast(this.selectedDoc!.yMargin), this.setVal((doc: Doc, val: number) => { doc.yMargin = val; })) }
                 {!this.isGroup ? null : this.getNumber('Padding', ' px', 0, 500, NumCast(this.selectedDoc!.xPadding), this.setVal((doc: Doc, val: number) => { doc.xPadding = doc.yPadding = val; })) }
                 {this.isInk ? this.controlPointsButton : null}
                 {this.getNumber('Width', ' px', 0, Math.max(1000, this.shapeWid), this.shapeWid, this.setVal((doc: Doc, val:number) => {this.shapeWid = val}), 1000, 1)}
diff --git a/src/client/views/collections/CollectionCarousel3DView.scss b/src/client/views/collections/CollectionCarousel3DView.scss
index a556d0fa7..42e112906 100644
--- a/src/client/views/collections/CollectionCarousel3DView.scss
+++ b/src/client/views/collections/CollectionCarousel3DView.scss
@@ -4,6 +4,7 @@
     position: relative;
     background-color: white;
     overflow: hidden;
+    display: flex;
 }
 
 .carousel-wrapper {
diff --git a/src/client/views/collections/CollectionCarousel3DView.tsx b/src/client/views/collections/CollectionCarousel3DView.tsx
index c5da8e037..1583f0e0c 100644
--- a/src/client/views/collections/CollectionCarousel3DView.tsx
+++ b/src/client/views/collections/CollectionCarousel3DView.tsx
@@ -1,5 +1,5 @@
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { computed, makeObservable } from 'mobx';
+import { action, computed, makeObservable, observable } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import { returnZero } from '../../../ClientUtils';
@@ -9,12 +9,13 @@ import { Id } from '../../../fields/FieldSymbols';
 import { DocCast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
 import { DocumentType } from '../../documents/DocumentTypes';
 import { DragManager } from '../../util/DragManager';
+import { Transform } from '../../util/Transform';
 import { StyleProp } from '../StyleProp';
 import { DocumentView } from '../nodes/DocumentView';
 import { FocusViewOptions } from '../nodes/FocusViewOptions';
 import './CollectionCarousel3DView.scss';
 import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
-import { Transform } from '../../util/Transform';
+import { FlashcardPracticeUI } from './FlashcardPracticeUI';
 
 // eslint-disable-next-line @typescript-eslint/no-require-imports
 const { CAROUSEL3D_CENTER_SCALE, CAROUSEL3D_SIDE_SCALE, CAROUSEL3D_TOP } = require('../global/globalCssVariables.module.scss');
@@ -24,6 +25,9 @@ export class CollectionCarousel3DView extends CollectionSubView() {
     @computed get scrollSpeed() {
         return this.layoutDoc._autoScrollSpeed ? NumCast(this.layoutDoc._autoScrollSpeed) : 1000; // default scroll speed
     }
+    _sideBtnWidth = 35;
+    @observable _filterFunc: ((doc: Doc) => boolean) | undefined = undefined;
+
     constructor(props: SubCollectionViewProps) {
         super(props);
         makeObservable(this);
@@ -43,7 +47,7 @@ export class CollectionCarousel3DView extends CollectionSubView() {
     };
 
     @computed get carouselItems() {
-        return this.childLayoutPairs.filter(pair => pair.layout.type !== DocumentType.LINK);
+        return this.childLayoutPairs.filter(pair => pair.layout.type !== DocumentType.LINK).filter(pair => !this._filterFunc?.(pair.layout));
     }
 
     centerScale = Number(CAROUSEL3D_CENTER_SCALE);
@@ -53,22 +57,17 @@ export class CollectionCarousel3DView extends CollectionSubView() {
     onChildDoubleClick = () => ScriptCast(this.layoutDoc.onChildDoubleClick);
     isContentActive = () => this._props.isSelected() || this._props.isContentActive() || this._props.isAnyChildContentActive();
     isChildContentActive = () => !!this.isContentActive();
+    contentScreenToLocalXf = () => this._props.ScreenToLocalTransform().scale(this._props.NativeDimScaling?.() || 1);
     childScreenLeftToLocal = () =>
-        this._props
-            .ScreenToLocalTransform()
-            .scale(this._props.NativeDimScaling?.() || 1)
+        this.contentScreenToLocalXf()
             .translate(-(this.panelWidth() - this.panelWidth() * this.sideScale) / 2, -(this.panelHeight() - this.panelHeight() * this.sideScale) / 2 - (Number(CAROUSEL3D_TOP) / 100) * this._props.PanelHeight())
             .scale(1 / this.sideScale);
     childScreenRightToLocal = () =>
-        this._props
-            .ScreenToLocalTransform()
-            .scale(this._props.NativeDimScaling?.() || 1)
+        this.contentScreenToLocalXf()
             .translate(-2 * this.panelWidth() - (this.panelWidth() - this.panelWidth() * this.sideScale) / 2, -(this.panelHeight() - this.panelHeight() * this.sideScale) / 2 - (Number(CAROUSEL3D_TOP) / 100) * this._props.PanelHeight())
             .scale(1 / this.sideScale);
     childCenterScreenToLocal = () =>
-        this._props
-            .ScreenToLocalTransform()
-            .scale(this._props.NativeDimScaling?.() || 1)
+        this.contentScreenToLocalXf()
             .translate(
                 -this.panelWidth() + ((this.centerScale - 1) * this.panelWidth()) / 2, // Focused Doc is shifted right by 1/3 panel width then left by increased size percent of center * 1/2 * panel width / 3
                 -((Number(CAROUSEL3D_TOP) / 100) * this._props.PanelHeight()) + ((this.centerScale - 1) * this.panelHeight()) / 2
@@ -119,7 +118,7 @@ export class CollectionCarousel3DView extends CollectionSubView() {
 
     changeSlide = (direction: number) => {
         DocumentView.DeselectAll();
-        this.layoutDoc._carousel_index = (NumCast(this.layoutDoc._carousel_index) + direction + this.carouselItems.length) % this.carouselItems.length;
+        this.layoutDoc._carousel_index = !this.curDoc() ? 0 : (NumCast(this.layoutDoc._carousel_index) + direction + this.carouselItems.length) % (this.carouselItems.length || 1);
     };
 
     onArrowClick = (direction: number) => {
@@ -192,6 +191,35 @@ export class CollectionCarousel3DView extends CollectionSubView() {
         return this.panelWidth() * (1 - index);
     }
 
+    /**
+     * How much the content of the carousel view is being scaled based on its nesting and its fit-to-width settings
+     */
+    @computed get contentScaling() { return this.ScreenToLocalBoxXf().Scale * (this._props.NativeDimScaling?.() ?? 1); } // prettier-ignore
+
+    /**
+     * The maximum size a UI widget can be scaled so that it won't be bigger in screen pixels than its normal 35 pixel size.
+     */
+    @computed get maxWidgetScale() {
+        const maxWidgetSize = Math.min(this._sideBtnWidth * this.contentScaling, 0.1 * NumCast(this.layoutDoc.width, 1));
+        return Math.max(maxWidgetSize / this._sideBtnWidth, 1);
+    }
+    /**
+     * How much to reactively scale a UI element so that it is as big as it can be (up to its normal 35pixel size) without being too big for the Doc content
+     */
+    @computed get uiBtnScaleTransform() {  return this.maxWidgetScale * Math.min(1, this.contentScaling); } // prettier-ignore
+    screenXPadding = () => (this.uiBtnScaleTransform * this._sideBtnWidth - NumCast(this.layoutDoc.xMargin)) / this._props.ScreenToLocalTransform().Scale;
+
+    docViewProps = () => ({
+        ...this._props, //
+        isDocumentActive: this._props.childDocumentsActive?.() ? this._props.isDocumentActive : this._props.isContentActive,
+        isContentActive: this.isChildContentActive,
+        ScreenToLocalTransform: this.contentScreenToLocalXf,
+    });
+    carouselItemsFunc = () => this.carouselItems.map(pair => pair.layout);
+    @action setFilterFunc = (func?: (doc: Doc) => boolean) => { this._filterFunc = func; }; // prettier-ignore
+    answered = (correct: boolean) => (!correct || !this.curDoc()) && this.changeSlide(1);
+    curDoc = () => this.carouselItems[NumCast(this.layoutDoc._carousel_index)]?.layout;
+
     render() {
         return (
             <div
@@ -206,6 +234,22 @@ export class CollectionCarousel3DView extends CollectionSubView() {
                 </div>
                 {this.buttons}
                 <div className="dot-bar">{this.dots}</div>
+                <FlashcardPracticeUI
+                    setFilterFunc={this.setFilterFunc}
+                    fieldKey={this.fieldKey}
+                    sideBtnWidth={this._sideBtnWidth}
+                    carouselItems={this.carouselItemsFunc}
+                    childDocs={this.childDocs}
+                    advance={this.answered}
+                    curDoc={this.curDoc}
+                    practiceBtnOffset={this._sideBtnWidth * 4}
+                    layoutDoc={this.layoutDoc}
+                    maxWidgetScale={this.maxWidgetScale}
+                    uiBtnScaleTransform={this.uiBtnScaleTransform}
+                    ScreenToLocalBoxXf={this.ScreenToLocalBoxXf}
+                    renderDepth={this._props.renderDepth}
+                    docViewProps={this.docViewProps}
+                />
             </div>
         );
     }
diff --git a/src/client/views/collections/CollectionCarouselView.scss b/src/client/views/collections/CollectionCarouselView.scss
index 97952822e..757072453 100644
--- a/src/client/views/collections/CollectionCarouselView.scss
+++ b/src/client/views/collections/CollectionCarouselView.scss
@@ -12,23 +12,10 @@
         display: inline-block;
         width: 100%;
         user-select: none;
+        position: absolute;
+        top: 0;
+        left: 0;
     }
-    .message {
-        justify-content: center;
-        align-items: center;
-        display: flex;
-        height: 60%;
-        z-index: -1;
-        // margin: 15px;
-    }
-}
-
-.collectionCarouselView-addFlashcards {
-    justify-content: center;
-    align-items: center;
-    height: 100%;
-    z-index: -1;
-    pointer-events: none;
 }
 .collectionCarouselView-recentlyMissed {
     color: red;
@@ -39,10 +26,7 @@
     pointer-events: none;
 }
 .carouselView-back,
-.carouselView-fwd,
-.carouselView-remove,
-.carouselView-check,
-.carouselView-add {
+.carouselView-fwd {
     position: absolute;
     display: flex;
     width: 30;
@@ -66,68 +50,6 @@
     left: 0;
     transform-origin: top left;
 }
-.carouselView-add {
-    position: absolute;
-    bottom: 0;
-    left: 0;
-}
-.carouselView-remove {
-    left: 52%;
-}
-.carouselView-check {
-    right: 52%;
-}
-.carouselView-menu {
-    position: absolute;
-    flex-direction: column;
-    align-items: center;
-    display: flex;
-    top: 0px;
-    left: 0px;
-    width: 30;
-    transform-origin: top left;
-    border-radius: 5px;
-    color: rgba(255, 255, 255, 0.5);
-    background: rgba(0, 0, 0, 0.1);
-    .carouselView-practiceModes {
-        width: 100%;
-        display: flex;
-        flex-direction: column;
-        top: 0;
-        position: relative;
-        .carouselView-quiz {
-            position: relative;
-            display: flex;
-            height: 20px;
-            align-items: center;
-            margin: auto;
-            &:hover {
-                color: white;
-            }
-            & > svg {
-                height: 100%;
-                width: 100%;
-            }
-        }
-
-        .carouselView-practice {
-            position: relative;
-            display: flex;
-            flex-direction: column;
-            height: 20px;
-            align-items: center;
-            margin: auto;
-            &:hover {
-                color: white;
-            }
-            & > svg {
-                height: 100%;
-                width: 100%;
-            }
-        }
-    }
-}
-
 .carouselView-back:hover,
 .carouselView-fwd:hover {
     background: lightgray;
diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index 559dcfe2a..64ddaac79 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -1,52 +1,35 @@
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { Tooltip } from '@mui/material';
 import { action, computed, makeObservable, observable } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import { StopEvent, returnOne, returnZero } from '../../../ClientUtils';
-import { Doc, DocListCast, Opt } from '../../../fields/Doc';
+import { Doc, Opt } from '../../../fields/Doc';
 import { BoolCast, DocCast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
 import { DocumentType } from '../../documents/DocumentTypes';
 import { DragManager } from '../../util/DragManager';
 import { StyleProp } from '../StyleProp';
-import { TagItem } from '../TagsView';
 import { DocumentView } from '../nodes/DocumentView';
 import { FieldViewProps } from '../nodes/FieldView';
 import { FormattedTextBox } from '../nodes/formattedText/FormattedTextBox';
 import './CollectionCarouselView.scss';
 import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
+import { FlashcardPracticeUI } from './FlashcardPracticeUI';
 
-enum cardMode {
-    STAR = 'star',
-    ALL = 'all',
-}
-enum practiceMode {
-    PRACTICE = 'practice',
-    QUIZ = 'quiz',
-}
-enum practiceVal {
-    MISSED = 'missed',
-    CORRECT = 'correct',
-}
 @observer
 export class CollectionCarouselView extends CollectionSubView() {
     private _dropDisposer?: DragManager.DragDropDisposer;
-    get practiceField() { return this.fieldKey + "_practice"; } // prettier-ignore
-    get sideField()     { return "_" + this.fieldKey + "_usePath"; } // prettier-ignore
-    get starField()     { return "#star"; } // prettier-ignore
-
-    _sideBtnWidth = 35;
 
     _fadeTimer: NodeJS.Timeout | undefined;
+    _sideBtnWidth = 35;
+    @observable _filterFunc: ((doc: Doc) => boolean) | undefined = undefined;
+    @observable _last_index = this.carouselIndex;
+    @observable _last_opacity = 1;
 
     constructor(props: SubCollectionViewProps) {
         super(props);
         makeObservable(this);
     }
 
-    @observable _last_index = this.carouselIndex;
-    @observable _last_opacity = 1;
-
     componentWillUnmount() {
         this._dropDisposer?.();
     }
@@ -58,38 +41,31 @@ export class CollectionCarouselView extends CollectionSubView() {
         }
     };
 
-    @computed get practiceMode() {
-        return this.childDocs.some(doc => doc._layout_isFlashcard) ? StrCast(this.layoutDoc.practiceMode) : '';
-    }
-    @computed get practiceMessage() {
-        const cardCount = this.carouselItems.length;
-        if (this.practiceMode) {
-            if (!Doc.hasDocFilter(this.layoutDoc, 'tags', Doc.FilterAny) && !cardCount) {
-                return 'Finished! Click here to view all flashcards.';
-            }
-        }
-        return '';
-    }
-
-    @computed get filterMessage() {
-        const cardCount = this.carouselItems.length;
-        if (!this.practiceMessage) {
-            if (Doc.hasDocFilter(this.layoutDoc, 'tags', Doc.FilterAny) && !cardCount) {
-                return 'No tagged items. Click here to view all flash cards.';
-            }
-            if (this.practiceMode) {
-                if (!cardCount) return 'No flashcards to show! Click here to leave practice mode';
-            }
-        }
-        return '';
-    }
-    @computed get marginX()       { return NumCast(this.layoutDoc.caption_xMargin, 50); } // prettier-ignore
+    @computed get captionMarginX(){ return NumCast(this.layoutDoc.caption_xMargin, 50); } // prettier-ignore
     @computed get carouselIndex() { return NumCast(this.layoutDoc._carousel_index) % this.carouselItems.length; } // prettier-ignore
     @computed get carouselItems() { return this.childDocs
         .filter(doc => doc.type !== DocumentType.LINK)
-        .filter(doc => !this.practiceMode || (BoolCast(doc?._layout_isFlashcard) && doc[this.practiceField] !== practiceVal.CORRECT))// show only cards that aren't marked as correct
+        .filter(doc => !this._filterFunc?.(doc))
     } // prettier-ignore
 
+    /**
+     * How much the content of the carousel view is being scaled based on its nesting and its fit-to-width settings
+     */
+    @computed get contentScaling() { return this.ScreenToLocalBoxXf().Scale * (this._props.NativeDimScaling?.() ?? 1); } // prettier-ignore
+
+    /**
+     * The maximum size a UI widget can be scaled so that it won't be bigger in screen pixels than its normal 35 pixel size.
+     */
+    @computed get maxWidgetScale() {
+        const maxWidgetSize = Math.min(this._sideBtnWidth * this.contentScaling, 0.1 * NumCast(this.layoutDoc.width, 1));
+        return Math.max(maxWidgetSize / this._sideBtnWidth, 1);
+    }
+    /**
+     * How much to reactively scale a UI element so that it is as big as it can be (up to its normal 35pixel size) without being too big for the Doc content
+     */
+    @computed get uiBtnScaleTransform() {  return this.maxWidgetScale * Math.min(1, this.contentScaling); } // prettier-ignore
+    screenXPadding = () => (this.uiBtnScaleTransform * this._sideBtnWidth - NumCast(this.layoutDoc.xMargin)) / this._props.ScreenToLocalTransform().Scale;
+
     /**
      * Move forward or backward the specified number of Docs
      * @param dir signed number indicating Docs to move forward or backward
@@ -102,8 +78,8 @@ export class CollectionCarouselView extends CollectionSubView() {
     /**
      * Goes to the next Doc in the stack subject to the currently selected filter option.
      */
-    advance = (e: React.MouseEvent) => {
-        e.stopPropagation();
+    advance = (e?: React.MouseEvent) => {
+        e?.stopPropagation();
         this.move(1);
     };
 
@@ -115,55 +91,23 @@ export class CollectionCarouselView extends CollectionSubView() {
         this.move(-1);
     };
 
-    /*
-     * Toggles whether the 'star' metadata field is set on the current Doc
-     */
-    toggleStar = (e: React.MouseEvent) => {
-        e.stopPropagation();
-        const curDoc = this.carouselItems[this.carouselIndex];
-        if (curDoc) {
-            if (TagItem.docHasTag(curDoc, this.starField)) TagItem.removeTagFromDoc(curDoc, this.starField);
-            else TagItem.addTagToDoc(curDoc, this.starField);
-        }
-    };
-
-    /*
-     * Sets a flashcard to either missed or correct depending on if they got the question right in practice mode.
-     */
-    setPracticeVal = (e: React.MouseEvent, val: string) => {
-        e.stopPropagation();
-        const curDoc = this.carouselItems[this.carouselIndex];
-        curDoc && (curDoc[this.practiceField] = val);
-        this.advance(e);
-    };
-
-    /**
-     * Sets the practice mode answer style for flashcards
-     * @param mode practiceMode or undefined for no practice
-     */
-    setPracticeMode = (mode: practiceMode | undefined) => {
-        this.layoutDoc.practiceMode = mode;
-        this.carouselItems?.map(doc => (doc[this.practiceField] = undefined));
-        if (mode === practiceMode.QUIZ) this.carouselItems?.map(doc => (doc[this.sideField] = undefined));
-    };
+    curDoc = () => this.carouselItems[this.carouselIndex];
 
     captionStyleProvider = (doc: Doc | undefined, captionProps: Opt<FieldViewProps>, property: string) => {
         // first look for properties on the document in the carousel, then fallback to properties on the container
         const childValue = doc?.['caption_' + property] ? this._props.styleProvider?.(doc, captionProps, property) : undefined;
         return childValue ?? this._props.styleProvider?.(this.layoutDoc, captionProps, property);
     };
+    contentPanelWidth = () => this._props.PanelWidth() - 2 * NumCast(this.layoutDoc.xMargin);
     contentPanelHeight = () => this._props.PanelHeight() - (StrCast(this.layoutDoc._layout_showCaption) ? 50 : 0) - 2 * NumCast(this.layoutDoc.yMargin);
     onContentDoubleClick = () => ScriptCast(this.layoutDoc.onChildDoubleClick);
     onContentClick = () => ScriptCast(this.layoutDoc.onChildClick);
-    captionWidth = () => this._props.PanelWidth() - 2 * this.marginX;
+    captionWidth = () => this._props.PanelWidth() - 2 * this.captionMarginX;
     contentScreenToLocalXf = () =>
         this._props
             .ScreenToLocalTransform()
             .translate(-NumCast(this.layoutDoc.xMargin), -NumCast(this.layoutDoc.yMargin))
             .scale(this._props.NativeDimScaling?.() || 1);
-
-    contentPanelWidth = () => this._props.PanelWidth() - 2 * NumCast(this.layoutDoc.xMargin);
-
     isChildContentActive = () =>
         this._props.isContentActive?.() === false
             ? false
@@ -172,10 +116,7 @@ export class CollectionCarouselView extends CollectionSubView() {
               : this._props.childDocumentsActive?.() === false || this.Document.childDocumentsActive === false
                 ? false
                 : undefined;
-
     renderDoc = (doc: Doc, showCaptions: boolean, overlayFunc?: (r: DocumentView | null) => void) => {
-        const screenScale = this.ScreenToLocalBoxXf().Scale;
-        const fitWidthScale = (NumCast(this.Document.width, 1) / NumCast(this.carouselItems[this.carouselIndex]?._width)) * (this._props.NativeDimScaling?.() || 1);
         return (
             <DocumentView
                 {...this._props}
@@ -203,7 +144,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                 ScreenToLocalTransform={this.contentScreenToLocalXf}
                 PanelWidth={this.contentPanelWidth}
                 PanelHeight={this.contentPanelHeight}
-                xPadding={(this._sideBtnWidth * Math.min(this.maxWidgetScale, screenScale * screenScale)) / fitWidthScale} // padding shrinks based on screenScale to maintain its size, and then again by screenSize to get smaller
+                screenXPadding={this.screenXPadding}
             />
         );
     };
@@ -214,7 +155,7 @@ export class CollectionCarouselView extends CollectionSubView() {
         const fadeTime = 500;
         const lastDoc = this.carouselItems?.[this._last_index];
         return !lastDoc || this.carouselIndex === this._last_index ? null : (
-            <div className="collectionCarouselView-image" style={{ opacity: this._last_opacity, position: 'absolute', top: 0, left: 0, transition: `opacity ${fadeTime}ms` }}>
+            <div className="collectionCarouselView-image" style={{ opacity: this._last_opacity, transition: `opacity ${fadeTime}ms` }}>
                 {this.renderDoc(
                     lastDoc,
                     false, // hide captions if the carousel is configured to show the captions
@@ -235,15 +176,18 @@ export class CollectionCarouselView extends CollectionSubView() {
             </div>
         );
     }
+    @computed get renderedDoc() {
+        const carouselShowsCaptions = StrCast(this.layoutDoc._layout_showCaption);
+        return this.renderDoc(this.curDoc(), !!carouselShowsCaptions);
+    }
+
     @computed get content() {
-        const index = this.carouselIndex;
-        const curDoc = this.carouselItems?.[index];
         const captionProps = { ...this._props, NativeScaling: returnOne, PanelWidth: this.captionWidth, fieldKey: 'caption', setHeight: undefined, setContentView: undefined };
         const carouselShowsCaptions = StrCast(this.layoutDoc._layout_showCaption);
-        return !curDoc ? null : (
+        return !this.curDoc() ? null : (
             <>
                 <div className="collectionCarouselView-image" key="image">
-                    {this.renderDoc(curDoc, !!carouselShowsCaptions)}
+                    {this.renderedDoc}
                     {this.overlay}
                 </div>
                 {!carouselShowsCaptions ? null : (
@@ -253,158 +197,70 @@ export class CollectionCarouselView extends CollectionSubView() {
                         onWheel={StopEvent}
                         style={{
                             borderRadius: this._props.styleProvider?.(this.layoutDoc, captionProps, StyleProp.BorderRounding) as string,
-                            marginRight: this.marginX,
-                            marginLeft: this.marginX,
-                            width: `calc(100% - ${this.marginX * 2}px)`,
+                            marginRight: this.captionMarginX,
+                            marginLeft: this.captionMarginX,
+                            width: `calc(100% - ${this.captionMarginX * 2}px)`,
                         }}>
-                        <FormattedTextBox key={index} xPadding={10} yPadding={10} {...captionProps} fieldKey={carouselShowsCaptions} styleProvider={this.captionStyleProvider} Document={curDoc} TemplateDataDocument={undefined} />
+                        <FormattedTextBox xPadding={10} yPadding={10} {...captionProps} fieldKey={carouselShowsCaptions} styleProvider={this.captionStyleProvider} Document={this.curDoc()} TemplateDataDocument={undefined} />
                     </div>
                 )}
             </>
         );
     }
 
-    togglePracticeMode = (mode: practiceMode) => this.setPracticeMode(mode === this.practiceMode ? undefined : mode);
-    toggleFilterMode = () => Doc.setDocFilter(this.Document, 'tags', this.starField, 'check', true);
-    setColor = (mode: practiceMode | cardMode, which: string) => (which === mode ? 'white' : 'light gray');
-
-    @computed get filterDoc() {
-        return DocListCast(Doc.MyContextMenuBtns.data).find(doc => doc.title === 'Filter');
-    }
-    filterHeight = () => NumCast(this.filterDoc?.height) * Math.min(1, this.ScreenToLocalBoxXf().Scale);
-    filterWidth = () => (!this.filterDoc ? 1 : (this.filterHeight() * NumCast(this.filterDoc._width)) / NumCast(this.filterDoc._height));
-
-    /**
-     * How much the content of the carousel view is being scaled based on its nesting and its fit-to-width settings
-     */
-    @computed get contentScaling() {
-        return this.ScreenToLocalBoxXf().Scale * (this._props.NativeDimScaling?.() ?? 1);
-    }
-
-    /**
-     * The maximum size a UI widget can be scaled so that it won't be bigger in screen pixels than its normal 35 pixel size.
-     */
-    @computed get maxWidgetScale() {
-        const maxWidgetSize = Math.min(this._sideBtnWidth * this.contentScaling, 0.1 * NumCast(this.Document.width, 1));
-        return Math.max(maxWidgetSize / this._sideBtnWidth, 1);
-    }
-    /**
-     * How much to reactively scale a UI element so that it is as big as it can be (up to its normal 35pixel size) without being too big for the Doc content
-     */
-    @computed get uiBtnScaleTransform() {
-        return `scale(${this.maxWidgetScale * Math.min(1, this.contentScaling)})`;
-    }
-    @computed get menu() {
-        const curDoc = this.carouselItems?.[this.carouselIndex];
-        return (
-            <div className="carouselView-menu" style={{ height: this.filterHeight(), width: this.filterHeight(), transform: this.uiBtnScaleTransform }}>
-                {!this.filterDoc ? null : (
-                    <DocumentView
-                        {...this._props}
-                        Document={this.filterDoc}
-                        TemplateDataDocument={undefined}
-                        LayoutTemplate={this._props.childLayoutTemplate}
-                        LayoutTemplateString={this._props.childLayoutString}
-                        renderDepth={this._props.renderDepth + 1}
-                        NativeWidth={returnZero}
-                        NativeHeight={returnZero}
-                        fitWidth={undefined}
-                        showTags={false}
-                        hideFilterStatus={true}
-                        containerViewPath={this.childContainerViewPath}
-                        setContentViewBox={undefined}
-                        onDoubleClickScript={this.onContentDoubleClick}
-                        onClickScript={this.onContentClick}
-                        isDocumentActive={this._props.childDocumentsActive?.() ? this._props.isDocumentActive : this._props.isContentActive}
-                        isContentActive={this.isChildContentActive}
-                        hideCaptions={true}
-                        childFilters={this.childDocFilters}
-                        hideDecorations={BoolCast(this.layoutDoc.layout_hideDecorations)}
-                        addDocument={this._props.addDocument}
-                        ScreenToLocalTransform={this.contentScreenToLocalXf}
-                        PanelWidth={this.filterWidth}
-                        PanelHeight={this.filterHeight}
-                    />
-                )}
-                <div
-                    className="carouselView-practiceModes"
-                    style={{
-                        transformOrigin: `0px ${-this.filterHeight()}px`,
-                        transform: `scale(${Math.max(1, 1 / this.ScreenToLocalBoxXf().Scale / this.maxWidgetScale)})`,
-                        display: BoolCast(curDoc?._layout_isFlashcard) ? undefined : 'none',
-                    }}>
-                    <Tooltip title="Practice flashcards using GPT">
-                        <div key="back" className="carouselView-quiz" style={{ width: this.filterWidth(), height: this.filterHeight() }} onClick={() => this.togglePracticeMode(practiceMode.QUIZ)}>
-                            <FontAwesomeIcon icon="file-pen" color={this.setColor(practiceMode.QUIZ, StrCast(this.practiceMode))} size="1x" />
-                        </div>
-                    </Tooltip>
-                    <Tooltip title={this.practiceMode === practiceMode.PRACTICE ? 'Exit practice mode' : 'Practice flashcards manually'}>
-                        <div key="back" className="carouselView-practice" style={{ width: this.filterWidth(), height: this.filterHeight() }} onClick={() => this.togglePracticeMode(practiceMode.PRACTICE)}>
-                            <FontAwesomeIcon icon="check" color={this.setColor(practiceMode.PRACTICE, StrCast(this.practiceMode))} size="1x" />
-                        </div>
-                    </Tooltip>
-                </div>
-            </div>
-        );
-    }
-    @computed get buttons() {
-        return (
+    @computed get navButtons() {
+        return this.Document._chromeHidden || !this.curDoc() ? null : (
             <>
-                <div key="back" className="carouselView-back" style={{ transform: this.uiBtnScaleTransform }} onClick={this.goback}>
+                <div key="back" className="carouselView-back" style={{ transform: `scale(${this.uiBtnScaleTransform})` }} onClick={this.goback}>
                     <FontAwesomeIcon icon="chevron-left" size="2x" />
                 </div>
-                <div key="fwd" className="carouselView-fwd" style={{ transform: this.uiBtnScaleTransform }} onClick={this.advance}>
+                <div key="fwd" className="carouselView-fwd" style={{ transform: `scale(${this.uiBtnScaleTransform})` }} onClick={this.advance}>
                     <FontAwesomeIcon icon="chevron-right" size="2x" />
                 </div>
-                {this.practiceMode == practiceMode.PRACTICE ? (
-                    <div style={{ transform: this.uiBtnScaleTransform, bottom: `${this._sideBtnWidth}px`, height: `${this._sideBtnWidth}px`, position: 'absolute', width: `100%` }}>
-                        <Tooltip title="Incorrect. View again later.">
-                            <div key="remove" className="carouselView-remove" onClick={e => this.setPracticeVal(e, practiceVal.MISSED)}>
-                                <FontAwesomeIcon icon="xmark" color="red" size="1x" />
-                            </div>
-                        </Tooltip>
-                        <Tooltip title="Correct">
-                            <div key="check" className="carouselView-check" onClick={e => this.setPracticeVal(e, practiceVal.CORRECT)}>
-                                <FontAwesomeIcon icon="check" color="green" size="1x" />
-                            </div>
-                        </Tooltip>
-                    </div>
-                ) : null}
             </>
         );
     }
 
+    docViewProps = () => ({
+        ...this._props, //
+        isDocumentActive: this._props.childDocumentsActive?.() ? this._props.isDocumentActive : this._props.isContentActive,
+        isContentActive: this.isChildContentActive,
+        ScreenToLocalTransform: this.contentScreenToLocalXf,
+    });
+    carouselItemsFunc = () => this.carouselItems;
+    answered = () => this.advance();
+    @action setFilterFunc = (func?: (doc: Doc) => boolean) => { this._filterFunc = func; }; // prettier-ignore
+
     render() {
         return (
-            <div>
-                <div
-                    className="collectionCarouselView-outer"
-                    ref={this.createDashEventsTarget}
-                    style={{
-                        background: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.BackgroundColor) as string,
-                        color: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.Color) as string,
-                        width: `calc(100% - ${NumCast(this.layoutDoc._xMargin)}px)`,
-                        height: `calc(100% - ${NumCast(this.layoutDoc._yMargin)}px)`,
-                        left: NumCast(this.layoutDoc._xMargin),
-                        top: NumCast(this.layoutDoc._yMargin),
-                    }}>
-                    {!this.practiceMessage && !this.filterMessage ? (
-                        this.content
-                    ) : (
-                        <p
-                            className="message"
-                            onClick={() => {
-                                if (this.filterMessage || this.practiceMessage) {
-                                    this.setPracticeMode(undefined);
-                                    Doc.setDocFilter(this.layoutDoc, 'tags', Doc.FilterAny, 'remove');
-                                }
-                            }}>
-                            {this.filterMessage || this.practiceMessage}
-                        </p>
-                    )}
-                </div>
-                {!this.Document._chromeHidden ? this.menu : null}
-                {!this.Document._chromeHidden && this.carouselItems?.[this.carouselIndex] ? this.buttons : null}
+            <div
+                className="collectionCarouselView-outer"
+                ref={this.createDashEventsTarget}
+                style={{
+                    background: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.BackgroundColor) as string,
+                    color: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.Color) as string,
+                    width: `calc(100% - ${NumCast(this.layoutDoc._xMargin)}px)`,
+                    height: `calc(100% - ${NumCast(this.layoutDoc._yMargin)}px)`,
+                    left: NumCast(this.layoutDoc._xMargin),
+                    top: NumCast(this.layoutDoc._yMargin),
+                }}>
+                {this.content}
+                <FlashcardPracticeUI
+                    setFilterFunc={this.setFilterFunc}
+                    fieldKey={this.fieldKey}
+                    sideBtnWidth={this._sideBtnWidth}
+                    carouselItems={this.carouselItemsFunc}
+                    childDocs={this.childDocs}
+                    advance={this.answered}
+                    curDoc={this.curDoc}
+                    layoutDoc={this.layoutDoc}
+                    maxWidgetScale={this.maxWidgetScale}
+                    uiBtnScaleTransform={this.uiBtnScaleTransform}
+                    ScreenToLocalBoxXf={this.ScreenToLocalBoxXf}
+                    renderDepth={this._props.renderDepth}
+                    docViewProps={this.docViewProps}
+                />
+                {this.navButtons}
             </div>
         );
     }
diff --git a/src/client/views/collections/FlashcardPracticeUI.scss b/src/client/views/collections/FlashcardPracticeUI.scss
new file mode 100644
index 000000000..53c26ad34
--- /dev/null
+++ b/src/client/views/collections/FlashcardPracticeUI.scss
@@ -0,0 +1,64 @@
+.FlashcardPracticeUI-remove,
+.FlashcardPracticeUI-check {
+    position: absolute;
+    display: flex;
+    width: 30;
+    height: 30;
+    align-items: center;
+    border-radius: 5px;
+    justify-content: center;
+    color: rgba(255, 255, 255, 0.5);
+    background: rgba(0, 0, 0, 0.1);
+    &:hover {
+        color: white;
+    }
+}
+.FlashcardPracticeUI-remove {
+    left: 52%;
+}
+.FlashcardPracticeUI-check {
+    right: 52%;
+}
+.FlashcardPracticeUI-menu {
+    position: absolute;
+    flex-direction: column;
+    align-items: center;
+    display: flex;
+    top: 0px;
+    left: 0px;
+    width: 30;
+    transform-origin: top left;
+    border-radius: 5px;
+    color: rgba(255, 255, 255, 0.5);
+    background: rgba(0, 0, 0, 0.1);
+    .FlashcardPracticeUI-practiceModes {
+        width: 100%;
+        display: flex;
+        flex-direction: column;
+        top: 0;
+        position: relative;
+        .FlashcardPracticeUI-quiz,
+        .FlashcardPracticeUI-practice {
+            position: relative;
+            display: flex;
+            height: 20px;
+            align-items: center;
+            margin: auto;
+            padding: 3px;
+            &:hover {
+                color: white;
+            }
+            & > svg {
+                height: 100%;
+                width: 100%;
+            }
+        }
+    }
+}
+.FlashcardPracticeUI-message {
+    z-index: 100;
+    position: relative;
+    margin: auto;
+    align-content: center;
+    width: max-content;
+}
diff --git a/src/client/views/collections/FlashcardPracticeUI.tsx b/src/client/views/collections/FlashcardPracticeUI.tsx
new file mode 100644
index 000000000..032a405bf
--- /dev/null
+++ b/src/client/views/collections/FlashcardPracticeUI.tsx
@@ -0,0 +1,172 @@
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { Tooltip } from '@mui/material';
+import { computed, makeObservable } from 'mobx';
+import { observer } from 'mobx-react';
+import * as React from 'react';
+import { returnZero } from '../../../ClientUtils';
+import { Doc, DocListCast } from '../../../fields/Doc';
+import { BoolCast, NumCast, StrCast } from '../../../fields/Types';
+import { Transform } from '../../util/Transform';
+import { ObservableReactComponent } from '../ObservableReactComponent';
+import { DocumentView, DocumentViewProps } from '../nodes/DocumentView';
+import './FlashcardPracticeUI.scss';
+
+enum practiceMode {
+    PRACTICE = 'practice',
+    QUIZ = 'quiz',
+}
+enum practiceVal {
+    MISSED = 'missed',
+    CORRECT = 'correct',
+}
+
+interface PracticeUIProps {
+    fieldKey: string;
+    layoutDoc: Doc;
+    carouselItems: () => Doc[];
+    childDocs: Doc[];
+    curDoc: () => Doc;
+    advance: (correct: boolean) => void;
+    renderDepth: number;
+    sideBtnWidth: number;
+    uiBtnScaleTransform: number;
+    ScreenToLocalBoxXf: () => Transform;
+    maxWidgetScale: number;
+    docViewProps: () => DocumentViewProps;
+    setFilterFunc: (func?: (doc: Doc) => boolean) => void;
+    practiceBtnOffset?: number;
+}
+@observer
+export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProps> {
+    constructor(props: PracticeUIProps) {
+        super(props);
+        makeObservable(this);
+        this._props.setFilterFunc(this.tryFilterOut);
+    }
+
+    componentWillUnmount(): void {
+        this._props.setFilterFunc(undefined);
+    }
+
+    get practiceField() { return this._props.fieldKey + "_practice"; } // prettier-ignore
+
+    @computed get filterDoc() { return DocListCast(Doc.MyContextMenuBtns.data).find(doc => doc.title === 'Filter'); } // prettier-ignore
+    @computed get practiceMode() {  return this._props.childDocs.some(doc => doc._layout_isFlashcard) ? StrCast(this._props.layoutDoc.practiceMode) : ''; } // prettier-ignore
+
+    btnHeight = () => NumCast(this.filterDoc?.height) * Math.min(1, this._props.ScreenToLocalBoxXf().Scale);
+    btnWidth = () => (!this.filterDoc ? 1 : (this.btnHeight() * NumCast(this.filterDoc._width)) / NumCast(this.filterDoc._height));
+
+    /**
+     * Sets the practice mode answer style for flashcards
+     * @param mode practiceMode or undefined for no practice
+     */
+    setPracticeMode = (mode: practiceMode | undefined) => {
+        this._props.layoutDoc.practiceMode = mode;
+        this._props.carouselItems().map(doc => (doc[this.practiceField] = undefined));
+    };
+
+    @computed get emptyMessage() {
+        const cardCount = this._props.carouselItems().length;
+        const practiceMessage = this.practiceMode && !Doc.hasDocFilter(this._props.layoutDoc, 'tags', Doc.FilterAny) && !this._props.carouselItems().length ? 'Finished! Click here to view all flashcards.' : '';
+        const filterMessage = practiceMessage
+            ? ''
+            : Doc.hasDocFilter(this._props.layoutDoc, 'tags', Doc.FilterAny) && !cardCount
+              ? 'No tagged items. Click here to view all flash cards.'
+              : this.practiceMode && !cardCount
+                ? 'No flashcards to show! Click here to leave practice mode'
+                : '';
+        return !practiceMessage && !filterMessage ? null : (
+            <p
+                className="FlashcardPracticeUI-message"
+                onClick={() => {
+                    if (filterMessage || practiceMessage) {
+                        this.setPracticeMode(undefined);
+                        Doc.setDocFilter(this._props.layoutDoc, 'tags', Doc.FilterAny, 'remove');
+                    }
+                }}>
+                {filterMessage || practiceMessage}
+            </p>
+        );
+    }
+
+    @computed get practiceButtons() {
+        /*
+         * Sets a flashcard to either missed or correct depending on if they got the question right in practice mode.
+         */
+        const setPracticeVal = (e: React.MouseEvent, val: string) => {
+            e.stopPropagation();
+            const curDoc = this._props.curDoc();
+            curDoc && (curDoc[this.practiceField] = val);
+            this._props.advance?.(val === practiceVal.CORRECT);
+        };
+
+        return this.practiceMode == practiceMode.PRACTICE ? (
+            <div style={{ transform: `scale(${this._props.uiBtnScaleTransform})`, bottom: `${this._props.practiceBtnOffset ?? this._props.sideBtnWidth}px`, height: `${this._props.sideBtnWidth}px`, position: 'absolute', width: `100%` }}>
+                <Tooltip title="Incorrect. View again later.">
+                    <div key="remove" className="FlashcardPracticeUI-remove" onClick={e => setPracticeVal(e, practiceVal.MISSED)}>
+                        <FontAwesomeIcon icon="xmark" color="red" size="1x" />
+                    </div>
+                </Tooltip>
+                <Tooltip title="Correct">
+                    <div key="check" className="FlashcardPracticeUI-check" onClick={e => setPracticeVal(e, practiceVal.CORRECT)}>
+                        <FontAwesomeIcon icon="check" color="green" size="1x" />
+                    </div>
+                </Tooltip>
+            </div>
+        ) : null;
+    }
+    @computed get practiceModesMenu() {
+        const setColor = (mode: practiceMode) => (StrCast(this.practiceMode) === mode ? 'white' : 'light gray');
+        const togglePracticeMode = (mode: practiceMode) => this.setPracticeMode(mode === this.practiceMode ? undefined : mode);
+
+        return !this._props.curDoc()?._layout_isFlashcard ? null : (
+            <div
+                className="FlashcardPracticeUI-practiceModes"
+                style={{
+                    transformOrigin: `0px ${-this.btnHeight()}px`,
+                    transform: `scale(${Math.max(1, 1 / this._props.ScreenToLocalBoxXf().Scale / this._props.maxWidgetScale)})`,
+                }}>
+                <Tooltip title="Practice flashcards using GPT">
+                    <div key="back" className="FlashcardPracticeUI-quiz" style={{ width: this.btnWidth(), height: this.btnHeight() }} onClick={() => togglePracticeMode(practiceMode.QUIZ)}>
+                        <FontAwesomeIcon icon="file-pen" color={setColor(practiceMode.QUIZ)} size="sm" />
+                    </div>
+                </Tooltip>
+                <Tooltip title={this.practiceMode === practiceMode.PRACTICE ? 'Exit practice mode' : 'Practice flashcards manually'}>
+                    <div key="back" className="FlashcardPracticeUI-practice" style={{ width: this.btnWidth(), height: this.btnHeight() }} onClick={() => togglePracticeMode(practiceMode.PRACTICE)}>
+                        <FontAwesomeIcon icon="check" color={setColor(practiceMode.PRACTICE)} size="sm" />
+                    </div>
+                </Tooltip>
+            </div>
+        );
+    }
+    tryFilterOut = (doc: Doc) => (this.practiceMode && BoolCast(doc?._layout_isFlashcard) && doc[this.practiceField] === practiceVal.CORRECT ? true : false); // show only cards that aren't marked as correct
+    render() {
+        return (
+            <>
+                {this.emptyMessage}
+                {this.practiceButtons}
+                <div className="FlashcardPracticeUI-menu" style={{ height: this.btnHeight(), width: this.btnHeight(), transform: `scale(${this._props.uiBtnScaleTransform})` }}>
+                    {!this.filterDoc || this._props.layoutDoc._chromeHidden ? null : (
+                        <DocumentView
+                            {...this._props.docViewProps()}
+                            Document={this.filterDoc}
+                            TemplateDataDocument={undefined}
+                            PanelWidth={this.btnWidth}
+                            PanelHeight={this.btnHeight}
+                            NativeWidth={returnZero}
+                            NativeHeight={returnZero}
+                            hideDecorations={BoolCast(this._props.layoutDoc.layout_hideDecorations)}
+                            hideCaptions={true}
+                            hideFilterStatus={true}
+                            renderDepth={this._props.renderDepth + 1}
+                            fitWidth={undefined}
+                            showTags={false}
+                            setContentViewBox={undefined}
+                        />
+                    )}
+                    {this.practiceModesMenu}
+                </div>
+            </>
+        );
+    }
+}
diff --git a/src/client/views/nodes/ComparisonBox.scss b/src/client/views/nodes/ComparisonBox.scss
index b7307f3a3..8156c50f6 100644
--- a/src/client/views/nodes/ComparisonBox.scss
+++ b/src/client/views/nodes/ComparisonBox.scss
@@ -296,3 +296,18 @@
         }
     }
 }
+.comparisonBox-bottomMenu {
+    transform-origin: bottom right;
+    width: max-content;
+    justify-content: space-between;
+    height: max-content;
+    position: absolute;
+    bottom: 0;
+    right: 2;
+    flex-direction: row-reverse;
+    display: flex;
+    cursor: pointer;
+    .comparisonBox-button {
+        padding-right: 8px;
+    }
+}
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index ef66c2b11..81e223028 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -68,7 +68,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return (
             <Tooltip title={<div className="dash-tooltip">flip</div>}>
                 <div
-                    className="formattedTextBox-alternateButton"
+                    className="comparisonBox-alternateButton ccomparisonBox-button"
                     onPointerDown={e =>
                         setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => {
                             if (!this.revealOp || this.revealOp === 'flip') {
@@ -81,42 +81,74 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         color: this.revealOp === 'hover' ? 'black' : this._frontSide ? 'black' : 'white',
                         display: 'inline-block',
                     }}>
-                    <div key="alternate" className="formattedTextBox-flip">
-                        <FontAwesomeIcon icon="turn-up" size="1x" />
-                    </div>
+                    <FontAwesomeIcon icon="turn-up" size="xl" />
                 </div>
             </Tooltip>
         );
     }
 
+    _sideBtnWidth = 30;
+    /**
+     * How much the content of the view is being scaled based on its nesting and its fit-to-width settings
+     */
+    @computed get contentScaling() {
+        return this.ScreenToLocalBoxXf().Scale * (this._props.NativeDimScaling?.() ?? 1);
+    }
+    /**
+     * The maximum size a UI widget can be scaled so that it won't be bigger in screen pixels than its normal 35 pixel size.
+     */
+    @computed get maxWidgetScale() {
+        const maxWidgetSize = Math.min(this._sideBtnWidth * this.contentScaling, 0.25 * Math.min(NumCast(this.Document.width), NumCast(this.Document.height)));
+        return Math.max(maxWidgetSize / this._sideBtnWidth, 1);
+    }
+    /**
+     * How much to reactively scale a UI element so that it is as big as it can be (up to its normal 35pixel size) without being too big for the Doc content
+     */
+    @computed get uiBtnScaleTransform() {
+        return this.maxWidgetScale * Math.min(1, this.contentScaling);
+    }
+
     @computed get flashcardMenu() {
         return (
-            <div>
-                <Tooltip
-                    title={this._frontSide ? <div className="dash-tooltip">Flip to front side to use GPT</div> : <div className="dash-tooltip">Ask GPT to create an answer on the back side of the flashcard based on your question on the front</div>}>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '50px', cursor: 'pointer' }} onPointerDown={() => (!this._frontSide ? this.findImageTags() : null)}>
-                        <FontAwesomeIcon icon="lightbulb" size="xl" />
-                    </div>
-                </Tooltip>
-                {DocCast(this.Document.embedContainer)?.type_collection === CollectionViewType.Carousel ? null : (
-                    <div>
-                        <Tooltip title={<div>Create a flashcard pile</div>}>
-                            <div style={{ position: 'absolute', bottom: '3px', right: '74px', cursor: 'pointer' }} onPointerDown={() => this.createFlashcardPile([this.Document], false)}>
-                                <FontAwesomeIcon icon="folder-plus" size="xl" />
-                            </div>
-                        </Tooltip>
-                        <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
-                            <div style={{ position: 'absolute', bottom: '3px', right: '104px', cursor: 'pointer' }} onClick={() => this.gptFlashcardPile()}>
-                                <FontAwesomeIcon icon="layer-group" size="xl" />
+            <div className="comparisonBox-bottomMenu" style={{ transform: `scale(${this.uiBtnScaleTransform})` }}>
+                {this.overlayAlternateIcon}
+                {!this._props.isContentActive() ? null : (
+                    <>
+                        {' '}
+                        {!this._frontSide ? null : (
+                            <Tooltip
+                                title={
+                                    <div className="dash-tooltip">{
+                                        !this._frontSide ? "Flip to front side to use GPT":
+                                                "Ask GPT to create an answer on the back side of the flashcard based on your question on the front"}
+                                   </div> // prettier-ignore
+                                }>
+                                <div className="comparisonBox-button" onPointerDown={() => (this._frontSide ? this.findImageTags() : null)}>
+                                    <FontAwesomeIcon icon="lightbulb" size="xl" />
+                                </div>
+                            </Tooltip>
+                        )}
+                        {DocCast(this.Document.embedContainer)?.type_collection === CollectionViewType.Carousel ? null : (
+                            <>
+                                <Tooltip title={<div>Create a flashcard pile</div>}>
+                                    <div className="comparisonBox-button" onPointerDown={() => this.createFlashcardPile([this.Document], false)}>
+                                        <FontAwesomeIcon icon="folder-plus" size="xl" />
+                                    </div>
+                                </Tooltip>
+                                <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
+                                    <div className="comparisonBox-button" onClick={this.gptFlashcardPile}>
+                                        <FontAwesomeIcon icon="layer-group" size="xl" />
+                                    </div>
+                                </Tooltip>
+                            </>
+                        )}
+                        <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
+                            <div className="comparisonBox-button" onClick={this.handleHover}>
+                                <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="hand-point-up" size="xl" />
                             </div>
                         </Tooltip>
-                    </div>
+                    </>
                 )}
-                <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
-                    <div style={{ position: 'absolute', bottom: '3px', right: '25px', cursor: 'pointer' }} onClick={() => this.handleHover()}>
-                        <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="hand-point-up" size="xl" />
-                    </div>
-                </Tooltip>
             </div>
         );
     }
@@ -478,7 +510,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 this._loading = false;
                 return;
             }
-            this.flipFlashcard();
         }
         try {
             console.log(queryText);
@@ -655,6 +686,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     childActiveFunc = () => this._childActive;
 
+    contentScreenToLocalXf = () => this._props.ScreenToLocalTransform().scale(this._props.NativeDimScaling?.() || 1);
     render() {
         const clearButton = (which: string) => (
             <Tooltip title={<div className="dash-tooltip">remove</div>}>
@@ -687,6 +719,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         removeDocument={whichSlot.endsWith('1') ? this.remDoc1 : this.remDoc2}
                         NativeWidth={returnZero}
                         NativeHeight={returnZero}
+                        ScreenToLocalTransform={this.contentScreenToLocalXf}
                         isContentActive={this.childActiveFunc}
                         isDocumentActive={returnFalse}
                         dontSelect={returnTrue}
@@ -808,8 +841,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             <ReactLoading type="spin" height={30} width={30} color={'blue'} />
                         </div>
                     ) : null}
-                    {this._props.isContentActive() ? this.flashcardMenu : null}
-                    {this.overlayAlternateIcon}
+                    {this.flashcardMenu}
                 </div>
             );
         }
diff --git a/src/client/views/nodes/FieldView.tsx b/src/client/views/nodes/FieldView.tsx
index 170966471..c81631baa 100644
--- a/src/client/views/nodes/FieldView.tsx
+++ b/src/client/views/nodes/FieldView.tsx
@@ -51,6 +51,7 @@ export interface FieldViewSharedProps {
     LayoutTemplate?: () => Opt<Doc>;
     renderDepth: number;
     scriptContext?: unknown; // can be assigned anything and will be passed as 'scriptContext' to any OnClick script that executes on this document
+    screenXPadding?: () => number; // padding in screen space coordinates (used by text box to reflow around UI buttons in carouselView)
     xPadding?: number;
     yPadding?: number;
     dontRegisterView?: boolean;
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.scss b/src/client/views/nodes/formattedText/FormattedTextBox.scss
index d6f13d9ee..f1ae1151f 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.scss
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.scss
@@ -101,12 +101,6 @@ audiotag:hover {
     height: 22;
     cursor: default;
 }
-.formattedTextBox-flip {
-    align-items: center;
-    position: absolute;
-    right: 2px;
-    bottom: 4px;
-}
 
 .formattedTextBox-outer {
     position: relative;
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index c89737e1e..93153b453 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -763,10 +763,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
         );
     };
     sidebarMove = (e: PointerEvent, down: number[], delta: number[]) => {
-        const localDelta = this._props
-            .ScreenToLocalTransform()
-            .scale(this._props.NativeDimScaling?.() || 1)
-            .transformDirection(delta[0], delta[1]);
+        const localDelta = this.DocumentView?.().screenToViewTransform().transformDirection(delta[0], delta[1]) ?? delta;
         const sidebarWidth = (NumCast(this.layoutDoc._width) * Number(this.layout_sidebarWidthPercent.replace('%', ''))) / 100;
         const width = NumCast(this.layoutDoc._width) + localDelta[0];
         this.layoutDoc._layout_sidebarWidthPercent = Math.max(0, (sidebarWidth + localDelta[0]) / width) * 100 + '%';
@@ -1264,7 +1261,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
         this._cachedLinks = Doc.Links(this.Document);
         this._disposers.breakupDictation = reaction(() => Doc.RecordingEvent, this.breakupDictation);
         this._disposers.layout_autoHeight = reaction(
-            () => ({ autoHeight: this.layout_autoHeight, fontSize: this.fontSize, css: this.Document[DocCss] }),
+            () => ({ autoHeight: this.layout_autoHeight, fontSize: this.fontSize, css: this.Document[DocCss], xMargin: this.Document.xMargin, yMargin: this.Document.yMargin }),
             autoHeight => setTimeout(() => autoHeight && this.tryUpdateScrollHeight())
         );
         this._disposers.highlights = reaction(
@@ -2088,8 +2085,12 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
         const scale = this._props.NativeDimScaling?.() || 1;
         const rounded = StrCast(this.layoutDoc.layout_borderRounding) === '100%' ? '-rounded' : '';
         setTimeout(() => !this._props.isContentActive() && FormattedTextBoxComment.textBox === this && FormattedTextBoxComment.Hide);
-        const paddingX = Math.max(this._props.xPadding ?? 0, NumCast(this.layoutDoc._xMargin));
-        const paddingY = Math.max(this._props.yPadding ?? 0, NumCast(this.layoutDoc._yMargin));
+
+        const scrSize = (which: number, view = this._props.docViewPath().slice(-which)[0]) => 
+                [view._props.PanelWidth() / view.screenToLocalScale(), view._props.PanelHeight() / view.screenToLocalScale()]; // prettier-ignore
+        const scrMargin = [Math.max(0, (scrSize(2)[0] - scrSize(1)[0]) / 2), Math.max(0, (scrSize(2)[1] - scrSize(1)[1]) / 2)];
+        const paddingX = Math.max(NumCast(this.layoutDoc._xMargin), this._props.xPadding ?? 0, 0, ((this._props.screenXPadding?.() ?? 0) - scrMargin[0]) * this.ScreenToLocalBoxXf().Scale);
+        const paddingY = Math.max(NumCast(this.layoutDoc._yMargin), 0, ((this._props.yPadding ?? 0) - scrMargin[1]) * this.ScreenToLocalBoxXf().Scale);
         const styleFromLayout = styleFromLayoutString(this.Document, this._props, scale); // this converts any expressions in the format string to style props.  e.g., <FormattedTextBox height='{this._header_height}px' >
         return styleFromLayout?.height === '0px' ? null : (
             <div
@@ -2176,7 +2177,6 @@ Docs.Prototypes.TemplateMap.set(DocumentType.RTF, {
         _layout_nativeDimEditable: true,
         _layout_reflowVertical: true,
         _layout_reflowHorizontal: true,
-        _layout_noSidebar: true,
         defaultDoubleClick: 'ignore',
         systemIcon: 'BsFileEarmarkTextFill',
     },
-- 
cgit v1.2.3-70-g09d2


From 461253999837ddcab1c157117fa0931fd3aa5332 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Wed, 9 Oct 2024 12:59:42 -0400
Subject: textbox

---
 src/client/views/nodes/ComparisonBox.tsx                  |  2 +-
 src/client/views/nodes/VideoBox.tsx                       |  2 --
 src/client/views/nodes/formattedText/FormattedTextBox.tsx | 10 ----------
 3 files changed, 1 insertion(+), 13 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 81e223028..09f35e7ab 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -390,7 +390,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      */
     pushInfo = async () => {
         const audio = {
-            file: this._audio.url,
+            file: DocCast(this.Document.audio)[DocData].url,
         };
         const response = await axios.post('http://localhost:105/recognize/', audio, {
             headers: {
diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx
index d653b27d7..de51f6447 100644
--- a/src/client/views/nodes/VideoBox.tsx
+++ b/src/client/views/nodes/VideoBox.tsx
@@ -879,7 +879,6 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                     ref={action((r: CollectionStackedTimeline) => {
                         this._stackedTimeline = r;
                     })}
-                    // eslint-disable-next-line react/jsx-props-no-spreading
                     {...this._props}
                     dataFieldKey={this.fieldKey}
                     fieldKey={this.annotationKey}
@@ -990,7 +989,6 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
                             left: (this._props.PanelWidth() - this.panelWidth()) / 2,
                         }}>
                         <CollectionFreeFormView
-                            // eslint-disable-next-line react/jsx-props-no-spreading
                             {...this._props}
                             ref={this._ffref}
                             setContentViewBox={emptyFunction}
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 93153b453..dac869f56 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -1006,26 +1006,16 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
     };
 
     getImageDesc = async (u: string) => {
-        // if (StrCast(this.dataDoc.description)) return StrCast(this.dataDoc.description); // Return existing description
-        // const { href } = (u as URLField).url;
-        const hrefParts = u.split('.');
-        const hrefComplete = `${hrefParts[0]}_o.${hrefParts[1]}`;
         try {
             const hrefBase64 = await imageUrlToBase64(u);
             const response = await gptImageLabel(
                 hrefBase64,
                 'Make flashcards out of this text and image with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ' + (this.dataDoc.text as RichTextField)?.Text
             );
-            //const response = await gptImageLabel(u, 'Make flashcards out of this text with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ');
-            // console.log(response);
             AnchorMenu.Instance.transferToFlashcard(response || 'Something went wrong', NumCast(this.dataDoc['x']), NumCast(this.dataDoc['y']));
-            // this._props.addto_;
-            // this.Document[DocData].description = response.trim();
-            // return response; // Return the response
         } catch (error) {
             console.log('Error', error);
         }
-        // return '';
     };
 
     animateRes = (resIndex: number, newText: string) => {
-- 
cgit v1.2.3-70-g09d2


From 9c80914b41b1b964938370c7a0db8a643b6af23f Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Wed, 9 Oct 2024 13:17:24 -0400
Subject: comments

---
 src/client/views/nodes/ComparisonBox.tsx | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 09f35e7ab..7a9474f08 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -800,16 +800,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                 <button className="submit-buttonrecord" onClick={this._listening ? this.stopListening : this.startListening} style={{ background: this._listening ? 'lightgray' : '', borderRadius: '2px' }}>
                                     {<FontAwesomeIcon icon="microphone" size="lg" />}
                                 </button>
-                                <div
-                                    className="submit-buttonschema-header-button"
-                                    onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, true)}
-                                    style={{ position: 'absolute', top: '5px', left: '50px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
+                                <div className="submit-buttonschema-header-button" onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, true)} style={{ position: 'absolute', top: '5px', left: '50px', zIndex: '100', cursor: 'pointer' }}>
                                     <FontAwesomeIcon color={'white'} icon="caret-down" />
                                 </div>
-                                <button
-                                    className="submit-buttonpronunciation"
-                                    onClick={this.evaluatePronunciation}
-                                    style={{ display: 'inline-flex', alignItems: 'center', background: this._listening ? 'lightgray' : '', borderRadius: '2px', width: '100%' }}>
+                                <button className="submit-buttonpronunciation" onClick={this.evaluatePronunciation} style={{ display: 'inline-flex', alignItems: 'center' }}>
                                     Evaluate Pronunciation
                                 </button>
 
-- 
cgit v1.2.3-70-g09d2


From 01db98ebdd02729729222bdd20ab65b57cbbe94c Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Wed, 9 Oct 2024 13:27:56 -0400
Subject: more refactoring to of collection flashcards into CollectioSubView to
 simplify using it in diferent collection views.

---
 .../views/collections/CollectionCardDeckView.scss  | 13 +---
 .../views/collections/CollectionCardDeckView.tsx   | 81 ++++++----------------
 .../views/collections/CollectionCarousel3DView.tsx | 72 +++++--------------
 .../views/collections/CollectionCarouselView.scss  |  1 +
 .../views/collections/CollectionCarouselView.tsx   | 53 ++------------
 src/client/views/collections/CollectionSubView.tsx | 51 +++++++++++++-
 .../views/collections/FlashcardPracticeUI.scss     |  2 +-
 .../views/collections/FlashcardPracticeUI.tsx      | 27 ++++----
 .../collectionFreeForm/CollectionFreeFormView.tsx  |  2 +-
 src/client/views/nodes/ComparisonBox.tsx           | 18 ++---
 10 files changed, 113 insertions(+), 207 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/collections/CollectionCardDeckView.scss b/src/client/views/collections/CollectionCardDeckView.scss
index 0520e38d4..0637cd4e9 100644
--- a/src/client/views/collections/CollectionCardDeckView.scss
+++ b/src/client/views/collections/CollectionCardDeckView.scss
@@ -6,6 +6,7 @@
     position: relative;
     background-color: white;
     overflow: hidden;
+    display: flex;
 
     button {
         border-radius: 50%;
@@ -48,15 +49,3 @@
 .card-item-active {
     z-index: 100;
 }
-
-.collectionCardDeckView-flashcards {
-    width: 100%;
-    height: 100%;
-    position: absolute;
-    top: 0;
-    left: 0;
-    display: flex;
-    transform-origin: top left;
-    pointer-events: none;
-    z-index: 100;
-}
diff --git a/src/client/views/collections/CollectionCardDeckView.tsx b/src/client/views/collections/CollectionCardDeckView.tsx
index 7272b22e2..8f351d8a7 100644
--- a/src/client/views/collections/CollectionCardDeckView.tsx
+++ b/src/client/views/collections/CollectionCardDeckView.tsx
@@ -22,7 +22,6 @@ import { DocumentView } from '../nodes/DocumentView';
 import { GPTPopup, GPTPopupMode } from '../pdf/GPTPopup/GPTPopup';
 import './CollectionCardDeckView.scss';
 import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
-import { FlashcardPracticeUI } from './FlashcardPracticeUI';
 
 enum cardSortings {
     Time = 'time',
@@ -47,8 +46,6 @@ export class CollectionCardView extends CollectionSubView() {
     private _textToDoc = new Map<string, Doc>();
     private _dropped = false; // set when a card doc has just moved and the drop method has been called - prevents the pointerUp method from hiding doc decorations (which needs to be done when clicking on a card to animate it to front/center)
 
-    _sideBtnWidth = 35;
-    @observable _filterFunc: ((doc: Doc) => boolean) | undefined = undefined;
     @observable _forceChildXf = 0;
     @observable _hoveredNodeIndex = -1;
     @observable _docRefs = new ObservableMap<Doc, DocumentView>();
@@ -119,15 +116,15 @@ export class CollectionCardView extends CollectionSubView() {
     /**
      * The child documents to be rendered-- everything other than ink/link docs (which are marks as being svg's)
      */
-    @computed get childDocsWithoutLinks() {
-        return this.childDocs.filter(l => !l.layout_isSvg).filter(doc => !this._filterFunc?.(doc));
+    @computed get childCards() {
+        return this.childLayoutPairs.filter(pair => !pair.layout.layout_isSvg);
     }
 
     /**
      * how much to scale down the contents of the view so that everything will fit
      */
     @computed get fitContentScale() {
-        const length = Math.min(this.childDocsWithoutLinks.length, this._maxRowCount);
+        const length = Math.min(this.childCards.length, this._maxRowCount);
         return (this.childPanelWidth() * length) / this._props.PanelWidth();
     }
 
@@ -280,7 +277,12 @@ export class CollectionCardView extends CollectionSubView() {
     );
 
     @computed get sortedDocs() {
-        return this.sort(this.childDocsWithoutLinks, this.cardSort, BoolCast(this.Document.cardSort_isDesc), this._docDraggedIndex);
+        return this.sort(
+            this.childCards.map(card => card.layout),
+            this.cardSort,
+            BoolCast(this.Document.cardSort_isDesc),
+            this._docDraggedIndex
+        );
     }
 
     /**
@@ -428,12 +430,14 @@ export class CollectionCardView extends CollectionSubView() {
                 default:                return StrCast(doc.title);
             } // prettier-ignore
         };
-        const docTextPromises = this.childDocsWithoutLinks.map(async doc => {
-            const docText = (await docToText(doc)) ?? '';
-            doc.gptInputText = docText;
-            this._textToDoc.set(docText.replace(/\n/g, ' ').trim(), doc);
-            return `======${docText.replace(/\n/g, ' ').trim()}======`;
-        });
+        const docTextPromises = this.childCards
+            .map(pair => pair.layout)
+            .map(async doc => {
+                const docText = (await docToText(doc)) ?? '';
+                doc.gptInputText = docText;
+                this._textToDoc.set(docText.replace(/\n/g, ' ').trim(), doc);
+                return `======${docText.replace(/\n/g, ' ').trim()}======`;
+            });
         return Promise.all<string>(docTextPromises);
     };
 
@@ -567,7 +571,7 @@ export class CollectionCardView extends CollectionSubView() {
      * Actually renders all the cards
      */
     @computed get renderCards() {
-        if (!this.childDocsWithoutLinks.length) {
+        if (!this.childCards.length) {
             return null;
         }
 
@@ -611,36 +615,16 @@ export class CollectionCardView extends CollectionSubView() {
     }
 
     contentScreenToLocalXf = () => this._props.ScreenToLocalTransform().scale(this._props.NativeDimScaling?.() || 1);
+    curDoc = () => this.childCards.find(card => DocumentView.getDocumentView(card.layout, this.DocumentView?.())?.IsSelected)?.layout;
     docViewProps = () => ({
         ...this._props, //
         isDocumentActive: this._props.childDocumentsActive?.() ? this._props.isDocumentActive : this._props.isContentActive,
         isContentActive: this.isChildContentActive,
         ScreenToLocalTransform: this.contentScreenToLocalXf,
     });
-    carouselItemsFunc = () => this.childDocsWithoutLinks;
-    @action setFilterFunc = (func?: (doc: Doc) => boolean) => { this._filterFunc = func; }; // prettier-ignore
-    answered = (correct: boolean) => !correct || !this.curDoc();
-    curDoc = () => this.sortedDocs.find(doc => DocumentView.getDocumentView(doc, this.DocumentView?.())?.IsSelected);
-    /**
-     * How much the content of the carousel view is being scaled based on its nesting and its fit-to-width settings
-     */
-    @computed get contentScaling() { return this.ScreenToLocalBoxXf().Scale * (this._props.NativeDimScaling?.() ?? 1); } // prettier-ignore
-
-    /**
-     * The maximum size a UI widget can be scaled so that it won't be bigger in screen pixels than its normal 35 pixel size.
-     */
-    @computed get maxWidgetScale() {
-        const maxWidgetSize = Math.min(this._sideBtnWidth * this.contentScaling, 0.1 * NumCast(this.layoutDoc.width, 1));
-        return Math.max(maxWidgetSize / this._sideBtnWidth, 1);
-    }
-    /**
-     * How much to reactively scale a UI element so that it is as big as it can be (up to its normal 35pixel size) without being too big for the Doc content
-     */
-    @computed get uiBtnScaleTransform() {  return this.maxWidgetScale * Math.min(1, this.contentScaling); } // prettier-ignore
 
     render() {
-        const isEmpty = this.childDocsWithoutLinks.length === 0;
-
+        const isEmpty = this.childCards.length === 0;
         return (
             <div
                 className="collectionCardView-outer"
@@ -661,31 +645,8 @@ export class CollectionCardView extends CollectionSubView() {
                         gridAutoRows: `${100 / this.numRows}%`,
                     }}>
                     {this.renderCards}
-                    <div
-                        className="collectionCardDeckView-flashcards"
-                        style={{
-                            transform: `scale(${this.fitContentScale || 1})`,
-                            width: `${100 / (this.fitContentScale || 1)}%`,
-                            height: `${100 / (this.fitContentScale || 1)}%`,
-                            pointerEvents: !this.childDocsWithoutLinks.length ? 'unset' : undefined,
-                        }}>
-                        <FlashcardPracticeUI
-                            setFilterFunc={this.setFilterFunc}
-                            fieldKey={this.fieldKey}
-                            sideBtnWidth={this._sideBtnWidth}
-                            carouselItems={this.carouselItemsFunc}
-                            childDocs={this.childDocs}
-                            advance={this.answered}
-                            curDoc={this.curDoc}
-                            layoutDoc={this.layoutDoc}
-                            maxWidgetScale={this.maxWidgetScale}
-                            uiBtnScaleTransform={this.uiBtnScaleTransform}
-                            ScreenToLocalBoxXf={this.ScreenToLocalBoxXf}
-                            renderDepth={this._props.renderDepth}
-                            docViewProps={this.docViewProps}
-                        />
-                    </div>
                 </div>
+                {this.flashCardUI(this.curDoc, this.docViewProps)}
             </div>
         );
     }
diff --git a/src/client/views/collections/CollectionCarousel3DView.tsx b/src/client/views/collections/CollectionCarousel3DView.tsx
index 3bcf3450f..9ccac0e0f 100644
--- a/src/client/views/collections/CollectionCarousel3DView.tsx
+++ b/src/client/views/collections/CollectionCarousel3DView.tsx
@@ -1,5 +1,5 @@
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { action, computed, makeObservable, observable } from 'mobx';
+import { computed, makeObservable } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import { returnZero } from '../../../ClientUtils';
@@ -15,26 +15,19 @@ import { DocumentView } from '../nodes/DocumentView';
 import { FocusViewOptions } from '../nodes/FocusViewOptions';
 import './CollectionCarousel3DView.scss';
 import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
-import { FlashcardPracticeUI } from './FlashcardPracticeUI';
 
 // eslint-disable-next-line @typescript-eslint/no-require-imports
 const { CAROUSEL3D_CENTER_SCALE, CAROUSEL3D_SIDE_SCALE, CAROUSEL3D_TOP } = require('../global/globalCssVariables.module.scss');
 
 @observer
 export class CollectionCarousel3DView extends CollectionSubView() {
-    @computed get scrollSpeed() {
-        return this.layoutDoc._autoScrollSpeed ? NumCast(this.layoutDoc._autoScrollSpeed) : 1000; // default scroll speed
-    }
-    _sideBtnWidth = 35;
-    @observable _filterFunc: ((doc: Doc) => boolean) | undefined = undefined;
+    private _dropDisposer?: DragManager.DragDropDisposer;
 
     constructor(props: SubCollectionViewProps) {
         super(props);
         makeObservable(this);
     }
 
-    private _dropDisposer?: DragManager.DragDropDisposer;
-
     componentWillUnmount() {
         this._dropDisposer?.();
     }
@@ -46,8 +39,11 @@ export class CollectionCarousel3DView extends CollectionSubView() {
         }
     };
 
+    @computed get scrollSpeed() {
+        return this.layoutDoc._autoScrollSpeed ? NumCast(this.layoutDoc._autoScrollSpeed) : 1000; // default scroll speed
+    }
     @computed get carouselItems() {
-        return this.childLayoutPairs.filter(pair => pair.layout.type !== DocumentType.LINK).filter(pair => !this._filterFunc?.(pair.layout));
+        return this.childLayoutPairs.filter(pair => !pair.layout.layout_isSvg);
     }
 
     centerScale = Number(CAROUSEL3D_CENTER_SCALE);
@@ -86,11 +82,11 @@ export class CollectionCarousel3DView extends CollectionSubView() {
 
     @computed get content() {
         const currentIndex = NumCast(this.layoutDoc._carousel_index);
-        const displayDoc = (childPair: { layout: Doc; data: Doc }, dxf: () => Transform) => (
+        const displayDoc = (child: Doc, dxf: () => Transform) => (
             <DocumentView
                 {...this._props}
-                Document={childPair.layout}
-                TemplateDataDocument={childPair.data}
+                Document={child}
+                TemplateDataDocument={undefined}
                 // suppressSetHeight={true}
                 NativeWidth={returnZero}
                 NativeHeight={returnZero}
@@ -109,9 +105,9 @@ export class CollectionCarousel3DView extends CollectionSubView() {
             />
         );
 
-        return this.carouselItems.map((childPair, index) => (
-            <div key={childPair.layout[Id]} className={`collectionCarousel3DView-item${index === currentIndex ? '-active' : ''} ${index}`} style={{ width: this.panelWidth() }}>
-                {displayDoc(childPair, index < currentIndex ? this.childScreenLeftToLocal : index === currentIndex ? this.childCenterScreenToLocal : this.childScreenRightToLocal)}
+        return this.carouselItems.map((child, index) => (
+            <div key={child.layout[Id]} className={`collectionCarousel3DView-item${index === currentIndex ? '-active' : ''} ${index}`} style={{ width: this.panelWidth() }}>
+                {displayDoc(child.layout, index < currentIndex ? this.childScreenLeftToLocal : index === currentIndex ? this.childCenterScreenToLocal : this.childScreenRightToLocal)}
             </div>
         ));
     }
@@ -191,35 +187,14 @@ export class CollectionCarousel3DView extends CollectionSubView() {
         return this.panelWidth() * (1 - index);
     }
 
-    /**
-     * How much the content of the carousel view is being scaled based on its nesting and its fit-to-width settings
-     */
-    @computed get contentScaling() { return this.ScreenToLocalBoxXf().Scale * (this._props.NativeDimScaling?.() ?? 1); } // prettier-ignore
-
-    /**
-     * The maximum size a UI widget can be scaled so that it won't be bigger in screen pixels than its normal 35 pixel size.
-     */
-    @computed get maxWidgetScale() {
-        const maxWidgetSize = Math.min(this._sideBtnWidth * this.contentScaling, 0.1 * NumCast(this.layoutDoc.width, 1));
-        return Math.max(maxWidgetSize / this._sideBtnWidth, 1);
-    }
-    /**
-     * How much to reactively scale a UI element so that it is as big as it can be (up to its normal 35pixel size) without being too big for the Doc content
-     */
-    @computed get uiBtnScaleTransform() {  return this.maxWidgetScale * Math.min(1, this.contentScaling); } // prettier-ignore
-    screenXPadding = () => (this.uiBtnScaleTransform * this._sideBtnWidth - NumCast(this.layoutDoc.xMargin)) / this._props.ScreenToLocalTransform().Scale;
-
+    curDoc = () => this.carouselItems[NumCast(this.layoutDoc._carousel_index)]?.layout;
+    answered = (correct: boolean) => (!correct || !this.curDoc()) && this.changeSlide(1);
     docViewProps = () => ({
         ...this._props, //
         isDocumentActive: this._props.childDocumentsActive?.() ? this._props.isDocumentActive : this._props.isContentActive,
         isContentActive: this.isChildContentActive,
         ScreenToLocalTransform: this.contentScreenToLocalXf,
     });
-    carouselItemsFunc = () => this.carouselItems.map(pair => pair.layout);
-    @action setFilterFunc = (func?: (doc: Doc) => boolean) => { this._filterFunc = func; }; // prettier-ignore
-    answered = (correct: boolean) => (!correct || !this.curDoc()) && this.changeSlide(1);
-    curDoc = () => this.carouselItems[NumCast(this.layoutDoc._carousel_index)]?.layout;
-
     render() {
         return (
             <div
@@ -233,25 +208,10 @@ export class CollectionCarousel3DView extends CollectionSubView() {
                     {this.content}
                 </div>
                 {this.buttons}
-                <div className="dot-bar" style={{ transform: `scale(${this.uiBtnScaleTransform})` }}>
+                <div className="dot-bar" style={{ transform: `scale(${this.uiBtnScaling})` }}>
                     {this.dots}
                 </div>
-                <FlashcardPracticeUI
-                    setFilterFunc={this.setFilterFunc}
-                    fieldKey={this.fieldKey}
-                    sideBtnWidth={this._sideBtnWidth}
-                    carouselItems={this.carouselItemsFunc}
-                    childDocs={this.childDocs}
-                    advance={this.answered}
-                    curDoc={this.curDoc}
-                    practiceBtnOffset={this._sideBtnWidth * 4}
-                    layoutDoc={this.layoutDoc}
-                    maxWidgetScale={this.maxWidgetScale}
-                    uiBtnScaleTransform={this.uiBtnScaleTransform}
-                    ScreenToLocalBoxXf={this.ScreenToLocalBoxXf}
-                    renderDepth={this._props.renderDepth}
-                    docViewProps={this.docViewProps}
-                />
+                {this.flashCardUI(this.curDoc, this.docViewProps, this.answered)}
             </div>
         );
     }
diff --git a/src/client/views/collections/CollectionCarouselView.scss b/src/client/views/collections/CollectionCarouselView.scss
index 757072453..544b3e262 100644
--- a/src/client/views/collections/CollectionCarouselView.scss
+++ b/src/client/views/collections/CollectionCarouselView.scss
@@ -2,6 +2,7 @@
     height: 100%;
     position: relative;
     overflow: hidden;
+    display: flex;
     .collectionCarouselView-caption {
         height: 50;
         display: inline-block;
diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index 64ddaac79..538eba356 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -5,7 +5,6 @@ import * as React from 'react';
 import { StopEvent, returnOne, returnZero } from '../../../ClientUtils';
 import { Doc, Opt } from '../../../fields/Doc';
 import { BoolCast, DocCast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
-import { DocumentType } from '../../documents/DocumentTypes';
 import { DragManager } from '../../util/DragManager';
 import { StyleProp } from '../StyleProp';
 import { DocumentView } from '../nodes/DocumentView';
@@ -13,15 +12,12 @@ import { FieldViewProps } from '../nodes/FieldView';
 import { FormattedTextBox } from '../nodes/formattedText/FormattedTextBox';
 import './CollectionCarouselView.scss';
 import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
-import { FlashcardPracticeUI } from './FlashcardPracticeUI';
 
 @observer
 export class CollectionCarouselView extends CollectionSubView() {
     private _dropDisposer?: DragManager.DragDropDisposer;
 
     _fadeTimer: NodeJS.Timeout | undefined;
-    _sideBtnWidth = 35;
-    @observable _filterFunc: ((doc: Doc) => boolean) | undefined = undefined;
     @observable _last_index = this.carouselIndex;
     @observable _last_opacity = 1;
 
@@ -43,28 +39,7 @@ export class CollectionCarouselView extends CollectionSubView() {
 
     @computed get captionMarginX(){ return NumCast(this.layoutDoc.caption_xMargin, 50); } // prettier-ignore
     @computed get carouselIndex() { return NumCast(this.layoutDoc._carousel_index) % this.carouselItems.length; } // prettier-ignore
-    @computed get carouselItems() { return this.childDocs
-        .filter(doc => doc.type !== DocumentType.LINK)
-        .filter(doc => !this._filterFunc?.(doc))
-    } // prettier-ignore
-
-    /**
-     * How much the content of the carousel view is being scaled based on its nesting and its fit-to-width settings
-     */
-    @computed get contentScaling() { return this.ScreenToLocalBoxXf().Scale * (this._props.NativeDimScaling?.() ?? 1); } // prettier-ignore
-
-    /**
-     * The maximum size a UI widget can be scaled so that it won't be bigger in screen pixels than its normal 35 pixel size.
-     */
-    @computed get maxWidgetScale() {
-        const maxWidgetSize = Math.min(this._sideBtnWidth * this.contentScaling, 0.1 * NumCast(this.layoutDoc.width, 1));
-        return Math.max(maxWidgetSize / this._sideBtnWidth, 1);
-    }
-    /**
-     * How much to reactively scale a UI element so that it is as big as it can be (up to its normal 35pixel size) without being too big for the Doc content
-     */
-    @computed get uiBtnScaleTransform() {  return this.maxWidgetScale * Math.min(1, this.contentScaling); } // prettier-ignore
-    screenXPadding = () => (this.uiBtnScaleTransform * this._sideBtnWidth - NumCast(this.layoutDoc.xMargin)) / this._props.ScreenToLocalTransform().Scale;
+    @computed get carouselItems() { return this.childLayoutPairs.filter(pair => !pair.layout.layout_isSvg); } // prettier-ignore
 
     /**
      * Move forward or backward the specified number of Docs
@@ -91,7 +66,7 @@ export class CollectionCarouselView extends CollectionSubView() {
         this.move(-1);
     };
 
-    curDoc = () => this.carouselItems[this.carouselIndex];
+    curDoc = () => this.carouselItems[this.carouselIndex]?.layout;
 
     captionStyleProvider = (doc: Doc | undefined, captionProps: Opt<FieldViewProps>, property: string) => {
         // first look for properties on the document in the carousel, then fallback to properties on the container
@@ -153,7 +128,7 @@ export class CollectionCarouselView extends CollectionSubView() {
      */
     @computed get overlay() {
         const fadeTime = 500;
-        const lastDoc = this.carouselItems?.[this._last_index];
+        const lastDoc = this.carouselItems?.[this._last_index]?.layout;
         return !lastDoc || this.carouselIndex === this._last_index ? null : (
             <div className="collectionCarouselView-image" style={{ opacity: this._last_opacity, transition: `opacity ${fadeTime}ms` }}>
                 {this.renderDoc(
@@ -211,10 +186,10 @@ export class CollectionCarouselView extends CollectionSubView() {
     @computed get navButtons() {
         return this.Document._chromeHidden || !this.curDoc() ? null : (
             <>
-                <div key="back" className="carouselView-back" style={{ transform: `scale(${this.uiBtnScaleTransform})` }} onClick={this.goback}>
+                <div key="back" className="carouselView-back" style={{ transform: `scale(${this.uiBtnScaling})` }} onClick={this.goback}>
                     <FontAwesomeIcon icon="chevron-left" size="2x" />
                 </div>
-                <div key="fwd" className="carouselView-fwd" style={{ transform: `scale(${this.uiBtnScaleTransform})` }} onClick={this.advance}>
+                <div key="fwd" className="carouselView-fwd" style={{ transform: `scale(${this.uiBtnScaling})` }} onClick={this.advance}>
                     <FontAwesomeIcon icon="chevron-right" size="2x" />
                 </div>
             </>
@@ -227,9 +202,7 @@ export class CollectionCarouselView extends CollectionSubView() {
         isContentActive: this.isChildContentActive,
         ScreenToLocalTransform: this.contentScreenToLocalXf,
     });
-    carouselItemsFunc = () => this.carouselItems;
     answered = () => this.advance();
-    @action setFilterFunc = (func?: (doc: Doc) => boolean) => { this._filterFunc = func; }; // prettier-ignore
 
     render() {
         return (
@@ -245,21 +218,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                     top: NumCast(this.layoutDoc._yMargin),
                 }}>
                 {this.content}
-                <FlashcardPracticeUI
-                    setFilterFunc={this.setFilterFunc}
-                    fieldKey={this.fieldKey}
-                    sideBtnWidth={this._sideBtnWidth}
-                    carouselItems={this.carouselItemsFunc}
-                    childDocs={this.childDocs}
-                    advance={this.answered}
-                    curDoc={this.curDoc}
-                    layoutDoc={this.layoutDoc}
-                    maxWidgetScale={this.maxWidgetScale}
-                    uiBtnScaleTransform={this.uiBtnScaleTransform}
-                    ScreenToLocalBoxXf={this.ScreenToLocalBoxXf}
-                    renderDepth={this._props.renderDepth}
-                    docViewProps={this.docViewProps}
-                />
+                {this.flashCardUI(this.curDoc, this.docViewProps, this.answered)}
                 {this.navButtons}
             </div>
         );
diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx
index 581201a20..c057d2402 100644
--- a/src/client/views/collections/CollectionSubView.tsx
+++ b/src/client/views/collections/CollectionSubView.tsx
@@ -9,7 +9,7 @@ import { Id } from '../../../fields/FieldSymbols';
 import { List } from '../../../fields/List';
 import { listSpec } from '../../../fields/Schema';
 import { ScriptField } from '../../../fields/ScriptField';
-import { BoolCast, Cast, ScriptCast, StrCast } from '../../../fields/Types';
+import { BoolCast, Cast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
 import { WebField } from '../../../fields/URLField';
 import { GetEffectiveAcl, TraceMobx } from '../../../fields/util';
 import { GestureUtils } from '../../../pen-gestures/GestureUtils';
@@ -25,7 +25,8 @@ import { SnappingManager } from '../../util/SnappingManager';
 import { UndoManager } from '../../util/UndoManager';
 import { ViewBoxBaseComponent } from '../DocComponent';
 import { FieldViewProps } from '../nodes/FieldView';
-import { DocumentView } from '../nodes/DocumentView';
+import { DocumentView, DocumentViewProps } from '../nodes/DocumentView';
+import { FlashcardPracticeUI } from './FlashcardPracticeUI';
 
 export interface CollectionViewProps extends React.PropsWithChildren<FieldViewProps> {
     isAnnotationOverlay?: boolean; // is the collection an annotation overlay (eg an overlay on an image/video/etc)
@@ -119,7 +120,8 @@ export function CollectionSubView<X>() {
                     pair =>
                         // filter out any documents that have a proto that we don't have permissions to
                         !pair.layout?.hidden && pair.layout && (!pair.layout.proto || (pair.layout.proto instanceof Doc && GetEffectiveAcl(pair.layout.proto) !== AclPrivate))
-                );
+                )
+                .filter(pair => !this._filterFunc?.(pair.layout!));
             return validPairs.map(({ data, layout }) => ({ data: data as Doc, layout: layout! })); // this mapping is a bit of a hack to coerce types
         }
         /**
@@ -515,6 +517,49 @@ export function CollectionSubView<X>() {
                 alert('Document upload failed - possibly an unsupported file type.');
             }
         };
+
+        protected _sideBtnWidth = 35;
+        @observable _filterFunc: ((doc: Doc) => boolean) | undefined = undefined;
+        /**
+         * How much the content of the collection is being scaled based on its nesting and its fit-to-width settings
+         */
+        @computed get contentScaling() { return this.ScreenToLocalBoxXf().Scale * (this._props.NativeDimScaling?.() ?? 1); } // prettier-ignore
+        /**
+         * The maximum size a UI widget can be in collection coordinates based on not wanting the widget to visually obscure too much of the collection
+         * This takes the desired screen space size and converts into collection coordinates.  It then returns the smaller of the converted
+         * size or a fraction of the collection view.
+         */
+        @computed get maxWidgetSize() { return Math.min(this._sideBtnWidth * this.contentScaling, 0.25 * NumCast(this.layoutDoc.width, 1));  } // prettier-ignore
+        /**
+         * This computes a scale factor for UI elements so that they shrink and grow as the collection does in screen space.
+         * Note, the scale factor does not allow for elements to grow larger than their native screen space size.
+         */
+        @computed get uiBtnScaling() { return this.maxWidgetSize / this._sideBtnWidth; } // prettier-ignore
+
+        screenXPadding = () => (this.uiBtnScaling * this._sideBtnWidth - NumCast(this.layoutDoc.xMargin)) / this._props.ScreenToLocalTransform().Scale;
+        filteredChildDocs = () => this.childLayoutPairs.map(pair => pair.layout);
+        childDocsFunc = () => this.childDocs;
+        @action setFilterFunc = (func?: (doc: Doc) => boolean) => { this._filterFunc = func; }; // prettier-ignore
+
+        public flashCardUI = (curDoc: () => Doc | undefined, docViewProps: () => DocumentViewProps, answered?: (correct: boolean) => void) => {
+            return (
+                <FlashcardPracticeUI
+                    setFilterFunc={this.setFilterFunc}
+                    fieldKey={this.fieldKey}
+                    sideBtnWidth={this._sideBtnWidth}
+                    allChildDocs={this.childDocsFunc}
+                    filteredChildDocs={this.filteredChildDocs}
+                    advance={answered}
+                    curDoc={curDoc}
+                    practiceBtnOffset={this._sideBtnWidth * 4}
+                    layoutDoc={this.layoutDoc}
+                    uiBtnScaling={this.uiBtnScaling}
+                    ScreenToLocalBoxXf={this.ScreenToLocalBoxXf}
+                    renderDepth={this._props.renderDepth}
+                    docViewProps={docViewProps}
+                />
+            );
+        };
     }
 
     return CollectionSubViewInternal;
diff --git a/src/client/views/collections/FlashcardPracticeUI.scss b/src/client/views/collections/FlashcardPracticeUI.scss
index 2f99500f8..c5252bbfa 100644
--- a/src/client/views/collections/FlashcardPracticeUI.scss
+++ b/src/client/views/collections/FlashcardPracticeUI.scss
@@ -50,7 +50,7 @@
             height: 20px;
             align-items: center;
             margin: auto;
-            padding: 3px;
+            // padding: 3px;
             &:hover {
                 color: white;
             }
diff --git a/src/client/views/collections/FlashcardPracticeUI.tsx b/src/client/views/collections/FlashcardPracticeUI.tsx
index a643c95b0..7bf4d86d1 100644
--- a/src/client/views/collections/FlashcardPracticeUI.tsx
+++ b/src/client/views/collections/FlashcardPracticeUI.tsx
@@ -23,15 +23,14 @@ enum practiceVal {
 interface PracticeUIProps {
     fieldKey: string;
     layoutDoc: Doc;
-    carouselItems: () => Doc[];
-    childDocs: Doc[];
+    filteredChildDocs: () => Doc[];
+    allChildDocs: () => Doc[];
     curDoc: () => Doc | undefined;
-    advance: (correct: boolean) => void;
+    advance?: (correct: boolean) => void;
     renderDepth: number;
     sideBtnWidth: number;
-    uiBtnScaleTransform: number;
+    uiBtnScaling: number;
     ScreenToLocalBoxXf: () => Transform;
-    maxWidgetScale: number;
     docViewProps: () => DocumentViewProps;
     setFilterFunc: (func?: (doc: Doc) => boolean) => void;
     practiceBtnOffset?: number;
@@ -51,7 +50,7 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
     get practiceField() { return this._props.fieldKey + "_practice"; } // prettier-ignore
 
     @computed get filterDoc() { return DocListCast(Doc.MyContextMenuBtns.data).find(doc => doc.title === 'Filter'); } // prettier-ignore
-    @computed get practiceMode() {  return this._props.childDocs.some(doc => doc._layout_isFlashcard) ? StrCast(this._props.layoutDoc.practiceMode) : ''; } // prettier-ignore
+    @computed get practiceMode() {  return this._props.allChildDocs().some(doc => doc._layout_isFlashcard) ? StrCast(this._props.layoutDoc.practiceMode) : ''; } // prettier-ignore
 
     btnHeight = () => NumCast(this.filterDoc?.height) * Math.min(1, this._props.ScreenToLocalBoxXf().Scale);
     btnWidth = () => (!this.filterDoc ? 1 : (this.btnHeight() * NumCast(this.filterDoc._width)) / NumCast(this.filterDoc._height));
@@ -62,12 +61,12 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
      */
     setPracticeMode = (mode: practiceMode | undefined) => {
         this._props.layoutDoc.practiceMode = mode;
-        this._props.carouselItems().map(doc => (doc[this.practiceField] = undefined));
+        this._props.allChildDocs().map(doc => (doc[this.practiceField] = undefined));
     };
 
     @computed get emptyMessage() {
-        const cardCount = this._props.carouselItems().length;
-        const practiceMessage = this.practiceMode && !Doc.hasDocFilter(this._props.layoutDoc, 'tags', Doc.FilterAny) && !this._props.carouselItems().length ? 'Finished! Click here to view all flashcards.' : '';
+        const cardCount = this._props.filteredChildDocs().length;
+        const practiceMessage = this.practiceMode && !Doc.hasDocFilter(this._props.layoutDoc, 'tags', Doc.FilterAny) && !cardCount ? 'Finished! Click here to view all flashcards.' : '';
         const filterMessage = practiceMessage
             ? ''
             : Doc.hasDocFilter(this._props.layoutDoc, 'tags', Doc.FilterAny) && !cardCount
@@ -78,7 +77,7 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
         return !practiceMessage && !filterMessage ? null : (
             <p
                 className="FlashcardPracticeUI-message"
-                style={{ transform: `scale(${this._props.uiBtnScaleTransform})` }}
+                style={{ transform: `scale(${this._props.uiBtnScaling})` }}
                 onClick={() => {
                     if (filterMessage || practiceMessage) {
                         this.setPracticeMode(undefined);
@@ -102,7 +101,7 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
         };
 
         return this.practiceMode == practiceMode.PRACTICE && this._props.curDoc() ? (
-            <div className="FlashcardPracticeUI-practice" style={{ transform: `scale(${this._props.uiBtnScaleTransform})`, bottom: `${this._props.practiceBtnOffset ?? this._props.sideBtnWidth}px`, height: `${this._props.sideBtnWidth}px` }}>
+            <div className="FlashcardPracticeUI-practice" style={{ transform: `scale(${this._props.uiBtnScaling})`, bottom: `${this._props.practiceBtnOffset ?? this._props.sideBtnWidth}px`, height: `${this._props.sideBtnWidth}px` }}>
                 <Tooltip title="Incorrect. View again later.">
                     <div key="remove" className="FlashcardPracticeUI-remove" onClick={e => setPracticeVal(e, practiceVal.MISSED)}>
                         <FontAwesomeIcon icon="xmark" color="red" size="1x" />
@@ -120,12 +119,12 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
         const setColor = (mode: practiceMode) => (StrCast(this.practiceMode) === mode ? 'white' : 'light gray');
         const togglePracticeMode = (mode: practiceMode) => this.setPracticeMode(mode === this.practiceMode ? undefined : mode);
 
-        return !this._props.childDocs.some(doc => doc._layout_isFlashcard) ? null : (
+        return !this._props.allChildDocs().some(doc => doc._layout_isFlashcard) ? null : (
             <div
                 className="FlashcardPracticeUI-practiceModes"
                 style={{
                     transformOrigin: `0px ${-this.btnHeight()}px`,
-                    transform: `scale(${Math.max(1, 1 / this._props.ScreenToLocalBoxXf().Scale / this._props.maxWidgetScale)})`,
+                    transform: `scale(${Math.max(1, 1 / this._props.ScreenToLocalBoxXf().Scale)})`,
                 }}>
                 <Tooltip title="Practice flashcards using GPT">
                     <div key="back" className="FlashcardPracticeUI-quiz" style={{ width: this.btnWidth(), height: this.btnHeight() }} onClick={() => togglePracticeMode(practiceMode.QUIZ)}>
@@ -146,7 +145,7 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
             <>
                 {this.emptyMessage}
                 {this.practiceButtons}
-                <div className="FlashcardPracticeUI-menu" style={{ height: this.btnHeight(), width: this.btnHeight(), transform: `scale(${this._props.uiBtnScaleTransform})` }}>
+                <div className="FlashcardPracticeUI-menu" style={{ height: this.btnHeight(), width: this.btnHeight(), transform: `scale(${this._props.uiBtnScaling})` }}>
                     {!this.filterDoc || this._props.layoutDoc._chromeHidden ? null : (
                         <DocumentView
                             {...this._props.docViewProps()}
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
index d8678eebc..0cc63d632 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
@@ -138,7 +138,7 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
         return this._props.layoutEngine?.() || StrCast(this.layoutDoc._layoutEngine);
     }
     @computed get childPointerEvents() {
-        return falseSnappingManager.IsResizing
+        return SnappingManager.IsResizing
             ? 'none'
             : (this._props.childPointerEvents?.() ??
                   (this._props.viewDefDivClick || //
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 81e223028..a8c91aae8 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -87,34 +87,26 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         );
     }
 
-    _sideBtnWidth = 30;
+    _sideBtnWidth = 35;
     /**
      * How much the content of the view is being scaled based on its nesting and its fit-to-width settings
      */
-    @computed get contentScaling() {
-        return this.ScreenToLocalBoxXf().Scale * (this._props.NativeDimScaling?.() ?? 1);
-    }
+    @computed get viewScaling() { return this.ScreenToLocalBoxXf().Scale; } // prettier-ignore
     /**
      * The maximum size a UI widget can be scaled so that it won't be bigger in screen pixels than its normal 35 pixel size.
      */
-    @computed get maxWidgetScale() {
-        const maxWidgetSize = Math.min(this._sideBtnWidth * this.contentScaling, 0.25 * Math.min(NumCast(this.Document.width), NumCast(this.Document.height)));
-        return Math.max(maxWidgetSize / this._sideBtnWidth, 1);
-    }
+    @computed get maxWidgetSize() { return  Math.min(this._sideBtnWidth * this.viewScaling, 0.25 * Math.min(NumCast(this.Document.width), NumCast(this.Document.height))); } // prettier-ignore
     /**
      * How much to reactively scale a UI element so that it is as big as it can be (up to its normal 35pixel size) without being too big for the Doc content
      */
-    @computed get uiBtnScaleTransform() {
-        return this.maxWidgetScale * Math.min(1, this.contentScaling);
-    }
+    @computed get uiBtnScaling() { return Math.max(this.maxWidgetSize / this._sideBtnWidth, 1) * Math.min(1, this.viewScaling)* (this._props.NativeDimScaling?.() ?? 1); } // prettier-ignore
 
     @computed get flashcardMenu() {
         return (
-            <div className="comparisonBox-bottomMenu" style={{ transform: `scale(${this.uiBtnScaleTransform})` }}>
+            <div className="comparisonBox-bottomMenu" style={{ transform: `scale(${this.uiBtnScaling})` }}>
                 {this.overlayAlternateIcon}
                 {!this._props.isContentActive() ? null : (
                     <>
-                        {' '}
                         {!this._frontSide ? null : (
                             <Tooltip
                                 title={
-- 
cgit v1.2.3-70-g09d2


From a0b0dc415f21535782239b471bd4b4942dea6daf Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Wed, 9 Oct 2024 13:54:32 -0400
Subject: removing more commented out code, fixing lint.  fixed carousel3Dview
 child active

---
 src/client/apis/gpt/GPT.ts                         |  3 +-
 .../views/collections/CollectionCarousel3DView.tsx | 11 +++-
 .../views/collections/FlashcardPracticeUI.scss     |  2 +-
 src/client/views/nodes/ComparisonBox.tsx           | 67 ++++++++++------------
 4 files changed, 41 insertions(+), 42 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index 88352110b..e8c6cc02f 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -72,7 +72,6 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
         model: 'gpt-4-turbo',
         maxTokens: 1024,
         temp: 0.1, //0.3
-        prompt: '',
         prompt: "BRIEFLY (<50 words) describe any differences between the rubric and the user's answer answer in second person. If there are no differences, say correct",
     },
 
@@ -125,7 +124,7 @@ let lastResp = '';
  * @param inputText Text to process
  * @returns AI Output
  */
-const gptAPICall = async (inputTextIn: string, callType: GPTCallType, prompt?: any, dontCache?: boolean) => {
+const gptAPICall = async (inputTextIn: string, callType: GPTCallType, prompt?: string, dontCache?: boolean) => {
     const inputText = [GPTCallType.SUMMARY, GPTCallType.FLASHCARD, GPTCallType.QUIZ, GPTCallType.STACK].includes(callType) ? inputTextIn + '.' : inputTextIn;
     const opts: GPTCallOpts = callTypeMap[callType];
     if (lastCall === inputText && dontCache !== true) return lastResp;
diff --git a/src/client/views/collections/CollectionCarousel3DView.tsx b/src/client/views/collections/CollectionCarousel3DView.tsx
index 9ccac0e0f..f2ba90c78 100644
--- a/src/client/views/collections/CollectionCarousel3DView.tsx
+++ b/src/client/views/collections/CollectionCarousel3DView.tsx
@@ -6,7 +6,7 @@ import { returnZero } from '../../../ClientUtils';
 import { Utils } from '../../../Utils';
 import { Doc, DocListCast, Opt } from '../../../fields/Doc';
 import { Id } from '../../../fields/FieldSymbols';
-import { DocCast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
+import { BoolCast, DocCast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
 import { DocumentType } from '../../documents/DocumentTypes';
 import { DragManager } from '../../util/DragManager';
 import { Transform } from '../../util/Transform';
@@ -52,7 +52,14 @@ export class CollectionCarousel3DView extends CollectionSubView() {
     panelHeight = () => this._props.PanelHeight() * this.sideScale;
     onChildDoubleClick = () => ScriptCast(this.layoutDoc.onChildDoubleClick);
     isContentActive = () => this._props.isSelected() || this._props.isContentActive() || this._props.isAnyChildContentActive();
-    isChildContentActive = () => !!this.isContentActive();
+    isChildContentActive = () =>
+        this._props.isContentActive?.() === false
+            ? false
+            : this._props.isDocumentActive?.() && (this._props.childDocumentsActive?.() || BoolCast(this.Document.childDocumentsActive))
+              ? true
+              : this._props.childDocumentsActive?.() === false || this.Document.childDocumentsActive === false
+                ? false
+                : undefined;
     contentScreenToLocalXf = () => this._props.ScreenToLocalTransform().scale(this._props.NativeDimScaling?.() || 1);
     childScreenLeftToLocal = () =>
         this.contentScreenToLocalXf()
diff --git a/src/client/views/collections/FlashcardPracticeUI.scss b/src/client/views/collections/FlashcardPracticeUI.scss
index c5252bbfa..2f99500f8 100644
--- a/src/client/views/collections/FlashcardPracticeUI.scss
+++ b/src/client/views/collections/FlashcardPracticeUI.scss
@@ -50,7 +50,7 @@
             height: 20px;
             align-items: center;
             margin: auto;
-            // padding: 3px;
+            padding: 3px;
             &:hover {
                 color: white;
             }
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 00ca0078e..9b75feba8 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -451,36 +451,33 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         const senArr = text?.split('Question: ') ?? [];
         const collectionArr: Doc[] = [];
         for (let i = 1; i < senArr.length; i++) {
-            const newDoc = Docs.Create.ComparisonDocument(senArr![i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
+            const newDoc = Docs.Create.ComparisonDocument(senArr[i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
 
-            if (StrCast(senArr![i]).includes('Keyword: ')) {
+            if (senArr[i].includes('Keyword: ')) {
                 const question = StrCast(senArr![i]).split('Keyword: ');
-                const img = await this.fetchImages(question[1]);
-                const textSide1 = question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0];
-                const textDoc1 = Docs.Create.TextDocument(question[0]);
-                const rtfiel = new RichTextField(
-                    JSON.stringify({
-                        doc: {
-                            type: 'doc',
-                            content: [
-                                {
-                                    type: 'paragraph',
-                                    attrs: { align: null, color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
-                                    content: [
-                                        { type: 'text', text: question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0] },
-                                        { type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: img![Id] } },
-                                    ],
-                                },
-                            ],
-                        },
-                        selection: { type: 'text', anchor: 2, head: 2 },
-                    }),
-                    textSide1
-                );
-
-                textDoc1[DocData].text = rtfiel;
-                DocCast(newDoc)[DocData][this.fieldKey + '_1'] = textDoc1;
-                DocCast(newDoc)[DocData][this.fieldKey + '_0'] = Docs.Create.TextDocument(question[0].includes('Answer: ') ? question[0].split('Answer: ')[1] : question[1]);
+                const questionTxt = question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0];
+                const answerTxt = question[0].includes('Answer: ') ? question[0].split('Answer: ')[1] : question[1];
+                this.fetchImages(question[1]).then(img => {
+                    const rtfiel = new RichTextField(
+                        JSON.stringify({
+                            // this is a RichText json that has the question text placed above a related image
+                            doc: {
+                                type: 'doc',
+                                content: [
+                                    {
+                                        type: 'paragraph',
+                                        attrs: { align: null, color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
+                                        content: [{ type: 'text', text: questionTxt }, img ? { type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: img[Id] } } : {}],
+                                    },
+                                ],
+                            },
+                            selection: { type: 'text', anchor: 2, head: 2 },
+                        }),
+                        questionTxt
+                    );
+                    newDoc[DocData][this.fieldKey + '_1'] = Docs.Create.TextDocument(questionTxt, { text: rtfiel });
+                    newDoc[DocData][this.fieldKey + '_0'] = Docs.Create.TextDocument(answerTxt);
+                });
             }
 
             collectionArr.push(newDoc);
@@ -493,8 +490,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      */
     askGPT = async (callType: GPTCallType): Promise<string | undefined> => {
         const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
-        const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
-        const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
+        // const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
+        // const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
         this._loading = true;
 
         if (callType == GPTCallType.CHATCARD) {
@@ -504,7 +501,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             }
         }
         try {
-            console.log(queryText);
             const res = await gptAPICall(questionText, GPTCallType.FLASHCARD);
             if (!res) {
                 console.error('GPT call failed');
@@ -513,7 +509,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             if (callType == GPTCallType.CHATCARD) {
                 DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
             } else if (callType == GPTCallType.QUIZ) {
-                console.log(this._inputValue);
                 this._frontSide = true;
                 this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
             } else if (callType === GPTCallType.FLASHCARD) {
@@ -531,13 +526,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     layoutHeight = () => NumCast(this.layoutDoc.height, 200);
 
     findImageTags = async () => {
-        const c = this.DocumentView?.().ContentDiv!.getElementsByTagName('img');
-        if (c?.length === 0) await this.askGPT(GPTCallType.CHATCARD);
+        const c = this.DocumentView?.().ContentDiv?.getElementsByTagName('img');
+        if (c?.length === 0) this.askGPT(GPTCallType.CHATCARD);
         if (c) {
             this._loading = true;
             for (const i of c) {
-                console.log(i);
-                if (i.className !== 'ProseMirror-separator') await this.getImageDesc(i.src);
+                if (i.className !== 'ProseMirror-separator') this.getImageDesc(i.src);
             }
             this._loading = false;
         }
@@ -611,7 +605,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     fetchImages = async (selection: string) => {
         try {
             const { data } = await axios.get(`${API_URL}?query=${selection}&page=1&per_page=${1}&client_id=Q4zruu6k6lum2kExiGhLNBJIgXDxD6NNj0SRHH_XXU0`);
-            console.log(data.results);
             const imageSnapshot = Docs.Create.ImageDocument(data.results[0].urls.small, {
                 _nativeWidth: Doc.NativeWidth(this.layoutDoc),
                 _nativeHeight: Doc.NativeHeight(this.layoutDoc),
-- 
cgit v1.2.3-70-g09d2


From 530b598e4e994bb566bcd289e95d05ddd1ecf86c Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Wed, 9 Oct 2024 15:49:02 -0400
Subject: hide flashcard menu when animating docs in card view and elsewhere

---
 src/client/views/nodes/ComparisonBox.tsx | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 9b75feba8..b86d61fdd 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -19,6 +19,7 @@ import { CollectionViewType, DocumentType } from '../../documents/DocumentTypes'
 import { Docs } from '../../documents/Documents';
 import { DragManager } from '../../util/DragManager';
 import { dropActionType } from '../../util/DropActionTypes';
+import { SnappingManager } from '../../util/SnappingManager';
 import { undoable } from '../../util/UndoManager';
 import { ContextMenu } from '../ContextMenu';
 import { ViewBoxAnnotatableComponent } from '../DocComponent';
@@ -102,7 +103,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @computed get uiBtnScaling() { return Math.max(this.maxWidgetSize / this._sideBtnWidth, 1) * Math.min(1, this.viewScaling)* (this._props.NativeDimScaling?.() ?? 1); } // prettier-ignore
 
     @computed get flashcardMenu() {
-        return (
+        return SnappingManager.HideDecorations ? null : (
             <div className="comparisonBox-bottomMenu" style={{ transform: `scale(${this.uiBtnScaling})` }}>
                 {this.overlayAlternateIcon}
                 {!this._props.isContentActive() ? null : (
-- 
cgit v1.2.3-70-g09d2


From a760773be31c274af45a7d781160585d58d88c07 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Wed, 9 Oct 2024 23:43:59 -0400
Subject: changed flashcard revealOp to be set on collection, not individual
 flashcards

---
 .../views/collections/CollectionCardDeckView.tsx   | 18 ++++----
 .../views/collections/FlashcardPracticeUI.tsx      | 53 +++++++++++++++++-----
 src/client/views/nodes/ComparisonBox.tsx           | 17 +------
 3 files changed, 52 insertions(+), 36 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/collections/CollectionCardDeckView.tsx b/src/client/views/collections/CollectionCardDeckView.tsx
index 8f351d8a7..8807462c3 100644
--- a/src/client/views/collections/CollectionCardDeckView.tsx
+++ b/src/client/views/collections/CollectionCardDeckView.tsx
@@ -332,14 +332,16 @@ export class CollectionCardView extends CollectionSubView() {
         return docs;
     };
 
-    isChildContentActive = () =>
-        this._props.isContentActive?.() === false
-            ? false
-            : this._props.isDocumentActive?.() && (this._props.childDocumentsActive?.() || BoolCast(this.Document.childDocumentsActive))
-              ? true
-              : this._props.childDocumentsActive?.() === false || this.Document.childDocumentsActive === false
+    isChildContentActive = computedFn(
+        (doc: Doc) => () =>
+            this._props.isContentActive?.() === false
                 ? false
-                : undefined;
+                : this._props.isDocumentActive?.() && this.curDoc() === doc
+                  ? true
+                  : this._props.childDocumentsActive?.() === false || this.Document.childDocumentsActive === false
+                    ? false
+                    : undefined
+    ); // prettier-ignore
 
     displayDoc = (doc: Doc, screenToLocalTransform: () => Transform) => (
         <DocumentView
@@ -362,7 +364,7 @@ export class CollectionCardView extends CollectionSubView() {
             dragAction={(this.Document.childDragAction ?? this._props.childDragAction) as dropActionType}
             showTags={BoolCast(this.layoutDoc.showChildTags)}
             whenChildContentsActiveChanged={this._props.whenChildContentsActiveChanged}
-            isContentActive={this.isChildContentActive}
+            isContentActive={this.isChildContentActive(doc)}
             dontHideOnDrag
         />
     );
diff --git a/src/client/views/collections/FlashcardPracticeUI.tsx b/src/client/views/collections/FlashcardPracticeUI.tsx
index 7bf4d86d1..efa94d845 100644
--- a/src/client/views/collections/FlashcardPracticeUI.tsx
+++ b/src/client/views/collections/FlashcardPracticeUI.tsx
@@ -3,13 +3,17 @@ import { Tooltip } from '@mui/material';
 import { computed, makeObservable } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
-import { returnZero } from '../../../ClientUtils';
+import { returnFalse, returnZero, setupMoveUpEvents } from '../../../ClientUtils';
 import { Doc, DocListCast } from '../../../fields/Doc';
 import { BoolCast, NumCast, StrCast } from '../../../fields/Types';
 import { Transform } from '../../util/Transform';
 import { ObservableReactComponent } from '../ObservableReactComponent';
 import { DocumentView, DocumentViewProps } from '../nodes/DocumentView';
 import './FlashcardPracticeUI.scss';
+import { IconButton, MultiToggle, Type } from 'browndash-components';
+import { SnappingManager } from '../../util/SnappingManager';
+import { IconProp } from '@fortawesome/fontawesome-svg-core';
+import { emptyFunction } from '../../../Utils';
 
 enum practiceMode {
     PRACTICE = 'practice',
@@ -116,7 +120,7 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
         ) : null;
     }
     @computed get practiceModesMenu() {
-        const setColor = (mode: practiceMode) => (StrCast(this.practiceMode) === mode ? 'white' : 'light gray');
+        const setColor = (mode: practiceMode) => (StrCast(this.practiceMode) === mode ? 'white' : 'lightgray');
         const togglePracticeMode = (mode: practiceMode) => this.setPracticeMode(mode === this.practiceMode ? undefined : mode);
 
         return !this._props.allChildDocs().some(doc => doc._layout_isFlashcard) ? null : (
@@ -126,16 +130,41 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
                     transformOrigin: `0px ${-this.btnHeight()}px`,
                     transform: `scale(${Math.max(1, 1 / this._props.ScreenToLocalBoxXf().Scale)})`,
                 }}>
-                <Tooltip title="Practice flashcards using GPT">
-                    <div key="back" className="FlashcardPracticeUI-quiz" style={{ width: this.btnWidth(), height: this.btnHeight() }} onClick={() => togglePracticeMode(practiceMode.QUIZ)}>
-                        <FontAwesomeIcon icon="file-pen" color={setColor(practiceMode.QUIZ)} size="sm" />
-                    </div>
-                </Tooltip>
-                <Tooltip title={this.practiceMode === practiceMode.PRACTICE ? 'Exit practice mode' : 'Practice flashcards manually'}>
-                    <div key="back" className="FlashcardPracticeUI-practice" style={{ width: this.btnWidth(), height: this.btnHeight() }} onClick={() => togglePracticeMode(practiceMode.PRACTICE)}>
-                        <FontAwesomeIcon icon="check" color={setColor(practiceMode.PRACTICE)} size="sm" />
-                    </div>
-                </Tooltip>
+                <MultiToggle
+                    tooltip="Practice flashcards one at a time"
+                    type={Type.PRIM}
+                    color={SnappingManager.userColor}
+                    background={SnappingManager.userVariantColor}
+                    multiSelect={false}
+                    isToggle={false}
+                    toggleStatus={!!this.practiceMode}
+                    label="Practice"
+                    items={[
+                        [practiceMode.QUIZ, 'file-pen', 'Practice flashcards using GPT'],
+                        [practiceMode.PRACTICE, 'check', this.practiceMode === practiceMode.PRACTICE ? 'Exit practice mode' : 'Practice flashcards manually'],
+                    ].map(([item, icon, tooltip]) => ({
+                        icon: <FontAwesomeIcon className={`FlashcardPracticeUI-${item}`} color={setColor(item as practiceMode)} icon={icon as IconProp} size="sm" />,
+                        tooltip: tooltip,
+                        val: item,
+                    }))}
+                    selectedItems={this.practiceMode}
+                    onSelectionChange={(val: (string | number) | (string | number)[]) => togglePracticeMode(val as practiceMode)}
+                />
+                <IconButton
+                    tooltip="hover over card to reveal answer"
+                    type={Type.TERT}
+                    text={StrCast(this._props.layoutDoc.revealOp)}
+                    color={SnappingManager.userColor}
+                    background={SnappingManager.userVariantColor}
+                    icon={<FontAwesomeIcon color={SnappingManager.userColor} icon={this._props.layoutDoc.revealOp === 'hover' ? 'hand-point-up' : 'question'} size="sm" />}
+                    label={StrCast(this._props.layoutDoc.revealOp)}
+                    onPointerDown={e =>
+                        setupMoveUpEvents(this, e, returnFalse, emptyFunction, () => {
+                            this._props.layoutDoc.revealOp = this._props.layoutDoc.revealOp === 'hover' ? 'flip' : 'hover';
+                            this._props.layoutDoc.childDocumentsActive = this._props.layoutDoc.revealOp === 'hover' ? true : undefined;
+                        })
+                    }
+                />
             </div>
         );
     }
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index b86d61fdd..aed81709b 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -62,7 +62,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @computed get clipWidthKey()  { return `_${this._props.fieldKey}_clipWidth`;  } // prettier-ignore
     @computed get clipWidth()     { return NumCast(this.layoutDoc[this.clipWidthKey], 50); } // prettier-ignore
     @computed get clipHeight()    { return NumCast(this.layoutDoc[this.clipHeightKey], 200);  } // prettier-ignore
-    @computed get revealOp()      { return StrCast(this.layoutDoc[this.revealOpKey]); } // prettier-ignore
+    @computed get revealOp()      { return StrCast(this.layoutDoc[this.revealOpKey], StrCast(this._props.docViewPath().slice(-2)[0]?.Document.revealOp)); } // prettier-ignore
     set revealOp(value:string)    { this.layoutDoc[this.revealOpKey] = value; } // prettier-ignore
 
     @computed get overlayAlternateIcon() {
@@ -135,27 +135,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                 </Tooltip>
                             </>
                         )}
-                        <Tooltip title={<div className="dash-tooltip">Hover to reveal</div>}>
-                            <div className="comparisonBox-button" onClick={this.handleHover}>
-                                <FontAwesomeIcon color={this.revealOp === 'hover' ? 'blue' : 'black'} icon="hand-point-up" size="xl" />
-                            </div>
-                        </Tooltip>
                     </>
                 )}
             </div>
         );
     }
 
-    @action handleHover = () => {
-        if (this.revealOp === 'hover') {
-            this.revealOp = 'flip';
-            this.Document.forceActive = false;
-        } else {
-            this.revealOp = 'hover';
-            this.Document.forceActive = true;
-        }
-    };
-
     @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
         this._inputValue = e.target.value;
     };
-- 
cgit v1.2.3-70-g09d2


From e9bf4605675857ee9e822c1051107fe86dc1bc16 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Thu, 10 Oct 2024 08:54:57 -0400
Subject: only show flip comparison icon if revealOp isn't hover

---
 src/client/views/nodes/ComparisonBox.tsx | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index aed81709b..12081ff87 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -105,8 +105,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @computed get flashcardMenu() {
         return SnappingManager.HideDecorations ? null : (
             <div className="comparisonBox-bottomMenu" style={{ transform: `scale(${this.uiBtnScaling})` }}>
-                {this.overlayAlternateIcon}
-                {!this._props.isContentActive() ? null : (
+                {this.revealOp === 'hover' || !this._props.isSelected() ? null : this.overlayAlternateIcon}
+                {!this._props.isSelected() ? null : (
                     <>
                         {!this._frontSide ? null : (
                             <Tooltip
-- 
cgit v1.2.3-70-g09d2


From e329ac0aea297e63401c7853fbf2d9d6b280cc2d Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Thu, 10 Oct 2024 15:54:13 -0400
Subject: change the default flashcard to have a thin border and have text fill
 the card and be vertically and horizontally centered.

---
 src/client/documents/Documents.ts                         | 1 +
 src/client/util/CurrentUserUtils.ts                       | 2 +-
 src/client/views/SidebarAnnos.tsx                         | 1 -
 src/client/views/nodes/ComparisonBox.tsx                  | 8 +++++---
 src/client/views/nodes/formattedText/FormattedTextBox.tsx | 1 +
 5 files changed, 8 insertions(+), 5 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index feaf41dfc..358bc227e 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -292,6 +292,7 @@ export class DocumentOptions {
     _text_fontSize?: string;
     _text_fontFamily?: string;
     _text_fontWeight?: string;
+    text_align?: STRt = new StrInfo('horizontal text alignment default');
     fontSize?: string;
     _pivotField?: string; // field key used to determine headings for sections in stacking, masonry, pivot views
 
diff --git a/src/client/util/CurrentUserUtils.ts b/src/client/util/CurrentUserUtils.ts
index e7a4cbeeb..6b692a2aa 100644
--- a/src/client/util/CurrentUserUtils.ts
+++ b/src/client/util/CurrentUserUtils.ts
@@ -369,7 +369,7 @@ pie title Minerals in my tap water
                           creator:(opts:DocumentOptions)=> Doc // how to create the empty thing if it doesn't exist
               }[] = [
             {key: "Note",       creator: opts => Docs.Create.TextDocument("", opts),        opts: { _width: 200, _layout_autoHeight: true }},
-            {key: "Flashcard",  creator: opts => Docs.Create.ComparisonDocument("", opts),  opts: { _layout_isFlashcard: true, _width: 300, _height: 300}},
+            {key: "Flashcard",  creator: opts => Docs.Create.ComparisonDocument("", opts),  opts: { _layout_isFlashcard: true, _layout_fitWidth: true, _width: 300, _height: 300}},
             {key: "Image",      creator: opts => Docs.Create.ImageDocument("", opts),       opts: { _width: 400, _height:400 }},
             {key: "Equation",   creator: opts => Docs.Create.EquationDocument("",opts),     opts: { _width: 300, _height: 35, }},
             {key: "Noteboard",  creator: opts => Docs.Create.NoteTakingDocument([], opts),  opts: { _width: 250, _height: 200, _layout_fitWidth: true}},
diff --git a/src/client/views/SidebarAnnos.tsx b/src/client/views/SidebarAnnos.tsx
index dd60bfa65..1f3ad8444 100644
--- a/src/client/views/SidebarAnnos.tsx
+++ b/src/client/views/SidebarAnnos.tsx
@@ -232,7 +232,6 @@ export class SidebarAnnos extends ObservableReactComponent<FieldViewProps & Extr
 
                 <div style={{ width: '100%', height: `calc(100% - 38px)`, position: 'relative' }}>
                     <CollectionStackingView
-                        // eslint-disable-next-line react/jsx-props-no-spreading
                         {...this._props}
                         setContentViewBox={emptyFunction}
                         NativeWidth={returnZero}
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 12081ff87..9852228fa 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -121,7 +121,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                 </div>
                             </Tooltip>
                         )}
-                        {DocCast(this.Document.embedContainer)?.type_collection === CollectionViewType.Carousel ? null : (
+                        {DocCast(this.Document.embedContainer)?.type_collection !== CollectionViewType.Freeform ? null : (
                             <>
                                 <Tooltip title={<div>Create a flashcard pile</div>}>
                                     <div className="comparisonBox-button" onPointerDown={() => this.createFlashcardPile([this.Document], false)}>
@@ -411,6 +411,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             _height: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 200) + 50,
             _layout_fitWidth: false,
             _layout_autoHeight: true,
+            _xMargin: 5,
+            _yMargin: 5,
         });
         newCol.x = this.layoutDoc.x;
         newCol.y = NumCast(this.layoutDoc.y) + 50;
@@ -727,13 +729,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             // add text box to each side when comparison box is first created
             if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-                const newDoc = Docs.Create.TextDocument(dataSplit[1], { _layout_autoHeight: true });
+                const newDoc = Docs.Create.TextDocument(dataSplit[1], { title: 'answer', _layout_autoHeight: true, _layout_centered: true, text_align: 'center', _layout_fitWidth: true });
                 this.addDoc(newDoc, this.fieldKey + '_0');
             }
 
             if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
                 const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-                const newDoc = Docs.Create.TextDocument(dataSplit[0], { _layout_autoHeight: true });
+                const newDoc = Docs.Create.TextDocument(dataSplit[0], { title: 'question', _layout_autoHeight: true, _layout_centered: true, text_align: 'center', _layout_fitWidth: true });
                 this.addDoc(newDoc, this.fieldKey + '_1');
             }
 
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index dac869f56..448dd5646 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -1517,6 +1517,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
                     selectAll(this._editorView.state, tr => {
                         this._editorView!.dispatch(tr.replaceSelectionWith(state.schema.nodes.paragraph.create({ align: textAlign })));
                     });
+                    this.tryUpdateDoc(true);
                 }
             }
             this._editorView.TextView = this;
-- 
cgit v1.2.3-70-g09d2


From f75f15ae58b57644c28d42446c176289bbe55dd4 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Thu, 10 Oct 2024 18:27:25 -0400
Subject: adjusted hiding chrome for carousel.  cleaned up some comparisonBox
 quiz code.  removed create flashcard pile button from flashcard - would
 prefer carousel being added to marquee menu.

---
 .../views/collections/CollectionCarouselView.tsx   |   2 +-
 .../views/collections/FlashcardPracticeUI.tsx      |  46 ++++-----
 src/client/views/nodes/ComparisonBox.scss          |  29 +++++-
 src/client/views/nodes/ComparisonBox.tsx           | 109 ++++++++++-----------
 src/client/views/pdf/AnchorMenu.tsx                |   2 +-
 5 files changed, 106 insertions(+), 82 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index 538eba356..aa447c7bf 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -184,7 +184,7 @@ export class CollectionCarouselView extends CollectionSubView() {
     }
 
     @computed get navButtons() {
-        return this.Document._chromeHidden || !this.curDoc() ? null : (
+        return !this.curDoc() ? null : (
             <>
                 <div key="back" className="carouselView-back" style={{ transform: `scale(${this.uiBtnScaling})` }} onClick={this.goback}>
                     <FontAwesomeIcon icon="chevron-left" size="2x" />
diff --git a/src/client/views/collections/FlashcardPracticeUI.tsx b/src/client/views/collections/FlashcardPracticeUI.tsx
index 4e424f5cd..7697d308b 100644
--- a/src/client/views/collections/FlashcardPracticeUI.tsx
+++ b/src/client/views/collections/FlashcardPracticeUI.tsx
@@ -15,7 +15,7 @@ import { SnappingManager } from '../../util/SnappingManager';
 import { IconProp } from '@fortawesome/fontawesome-svg-core';
 import { emptyFunction } from '../../../Utils';
 
-enum practiceMode {
+export enum practiceMode {
     PRACTICE = 'practice',
     QUIZ = 'quiz',
 }
@@ -172,27 +172,29 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
             <>
                 {this.emptyMessage}
                 {this.practiceButtons}
-                <div className="FlashcardPracticeUI-menu" style={{ height: this.btnHeight(), width: this.btnHeight(), transform: `scale(${this._props.uiBtnScaling})` }}>
-                    {!this.filterDoc || this._props.layoutDoc._chromeHidden ? null : (
-                        <DocumentView
-                            {...this._props.docViewProps()}
-                            Document={this.filterDoc}
-                            TemplateDataDocument={undefined}
-                            PanelWidth={this.btnWidth}
-                            PanelHeight={this.btnHeight}
-                            NativeWidth={returnZero}
-                            NativeHeight={returnZero}
-                            hideDecorations={BoolCast(this._props.layoutDoc.layout_hideDecorations)}
-                            hideCaptions={true}
-                            hideFilterStatus={true}
-                            renderDepth={this._props.renderDepth + 1}
-                            fitWidth={undefined}
-                            showTags={false}
-                            setContentViewBox={undefined}
-                        />
-                    )}
-                    {this.practiceModesMenu}
-                </div>
+                {this._props.layoutDoc._chromeHidden ? null : (
+                    <div className="FlashcardPracticeUI-menu" style={{ height: this.btnHeight(), width: this.btnHeight(), transform: `scale(${this._props.uiBtnScaling})` }}>
+                        {!this.filterDoc ? null : (
+                            <DocumentView
+                                {...this._props.docViewProps()}
+                                Document={this.filterDoc}
+                                TemplateDataDocument={undefined}
+                                PanelWidth={this.btnWidth}
+                                PanelHeight={this.btnHeight}
+                                NativeWidth={returnZero}
+                                NativeHeight={returnZero}
+                                hideDecorations={BoolCast(this._props.layoutDoc.layout_hideDecorations)}
+                                hideCaptions={true}
+                                hideFilterStatus={true}
+                                renderDepth={this._props.renderDepth + 1}
+                                fitWidth={undefined}
+                                showTags={false}
+                                setContentViewBox={undefined}
+                            />
+                        )}
+                        {this.practiceModesMenu}
+                    </div>
+                )}
             </>
         );
     }
diff --git a/src/client/views/nodes/ComparisonBox.scss b/src/client/views/nodes/ComparisonBox.scss
index 8156c50f6..c328ef4bf 100644
--- a/src/client/views/nodes/ComparisonBox.scss
+++ b/src/client/views/nodes/ComparisonBox.scss
@@ -9,6 +9,7 @@
     z-index: 0;
     pointer-events: none;
     display: flex;
+    flex-direction: column;
     p {
         // bcz: what is this styling for?  if text in the comparison box is colored, then this causes it to render with a black outline
         color: rgb(0, 0, 0);
@@ -32,8 +33,10 @@
         padding-right: 5px;
         border-radius: 2px;
         height: 17%;
-        display: inline-block;
         bottom: 0;
+        overflow: hidden;
+        display: flex;
+        width: 100%;
 
         &.schema-header-button {
             color: gray;
@@ -61,6 +64,29 @@
             float: left;
             border-radius: 2px;
         }
+        .submit-buttonrecord {
+            border-radius: 2px;
+        }
+        .submit-buttonpronunciation {
+            display: inline-flex;
+            align-items: center;
+        }
+        .submit-buttonschema-header-button {
+            position: absolute;
+            top: 5px;
+            left: 11px;
+            z-index: 10;
+            width: 5px;
+            height: 5px;
+            cursor: pointer;
+        }
+        .submit-buttonsubmit {
+            border-radius: 2px;
+            margin-bottom: 3px;
+            width: 100%;
+            display: inline-flex;
+            align-items: center;
+        }
     }
 
     .dropbtn {
@@ -194,6 +220,7 @@
 
     .loading-spinner {
         display: flex;
+        position: absolute;
         justify-content: center;
         align-items: center;
         height: 90%;
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 9852228fa..ccbe98257 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -1,7 +1,7 @@
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { Tooltip } from '@mui/material';
 import axios from 'axios';
-import { IReactionDisposer, action, computed, makeObservable, observable, reaction } from 'mobx';
+import { IReactionDisposer, action, computed, makeObservable, observable, reaction, runInAction } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import ReactLoading from 'react-loading';
@@ -30,6 +30,7 @@ import './ComparisonBox.scss';
 import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FormattedTextBox } from './formattedText/FormattedTextBox';
+import { practiceMode } from '../collections/FlashcardPracticeUI';
 
 const API_URL = 'https://api.unsplash.com/search/photos';
 
@@ -122,18 +123,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             </Tooltip>
                         )}
                         {DocCast(this.Document.embedContainer)?.type_collection !== CollectionViewType.Freeform ? null : (
-                            <>
-                                <Tooltip title={<div>Create a flashcard pile</div>}>
-                                    <div className="comparisonBox-button" onPointerDown={() => this.createFlashcardPile([this.Document], false)}>
-                                        <FontAwesomeIcon icon="folder-plus" size="xl" />
-                                    </div>
-                                </Tooltip>
-                                <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
-                                    <div className="comparisonBox-button" onClick={this.gptFlashcardPile}>
-                                        <FontAwesomeIcon icon="layer-group" size="xl" />
-                                    </div>
-                                </Tooltip>
-                            </>
+                            <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
+                                <div className="comparisonBox-button" onClick={this.gptFlashcardPile}>
+                                    <FontAwesomeIcon icon="layer-group" size="xl" />
+                                </div>
+                            </Tooltip>
                         )}
                     </>
                 )}
@@ -153,7 +147,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this._frontSide = !this._frontSide;
     };
 
-    @action handleRenderGPTClick = async () => {
+    @action handleRenderGPTClick = () => {
         const phonTrans = DocCast(this.Document.audio) ? DocCast(this.Document.audio).phoneticTranscription : undefined;
         if (phonTrans) {
             this._inputValue = StrCast(phonTrans);
@@ -490,20 +484,22 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
         try {
             const res = await gptAPICall(questionText, GPTCallType.FLASHCARD);
-            if (!res) {
-                console.error('GPT call failed');
-                return;
-            }
-            if (callType == GPTCallType.CHATCARD) {
-                DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
-            } else if (callType == GPTCallType.QUIZ) {
-                this._frontSide = true;
-                this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
-            } else if (callType === GPTCallType.FLASHCARD) {
+            runInAction(() => {
+                if (!res) {
+                    console.error('GPT call failed');
+                    return;
+                }
+                if (callType == GPTCallType.CHATCARD) {
+                    DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
+                } else if (callType == GPTCallType.QUIZ) {
+                    this._frontSide = true;
+                    this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
+                } else if (callType === GPTCallType.FLASHCARD) {
+                    this._loading = false;
+                    return res;
+                }
                 this._loading = false;
-                return res;
-            }
-            this._loading = false;
+            });
             return res;
         } catch (err) {
             console.error('GPT call failed', err);
@@ -725,24 +721,33 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
         if (this.Document._layout_isFlashcard) {
             const side = this._frontSide ? 1 : 0;
+            const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
+            const textCreator = (which: number, title: string, text: string) => {
+                const newDoc = Docs.Create.TextDocument(text, {
+                    title, //
+                    _layout_autoHeight: true,
+                    _layout_centered: true,
+                    text_align: 'center',
+                    _layout_fitWidth: true,
+                });
+                this.addDoc(newDoc, this.fieldKey + '_' + which);
+                return newDoc;
+            };
 
             // add text box to each side when comparison box is first created
             if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
-                const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-                const newDoc = Docs.Create.TextDocument(dataSplit[1], { title: 'answer', _layout_autoHeight: true, _layout_centered: true, text_align: 'center', _layout_fitWidth: true });
-                this.addDoc(newDoc, this.fieldKey + '_0');
+                textCreator(0, 'answer', dataSplit[1]);
             }
 
             if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
-                const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-                const newDoc = Docs.Create.TextDocument(dataSplit[0], { title: 'question', _layout_autoHeight: true, _layout_centered: true, text_align: 'center', _layout_fitWidth: true });
-                this.addDoc(newDoc, this.fieldKey + '_1');
+                const question = textCreator(1, 'question', dataSplit[0] || 'hint: Enter a topic, select this document and click the stack button to have GPT create a deck of cards');
+                Doc.SelectOnLoad = dataSplit[0] ? undefined : question;
             }
 
-            if (DocCast(this.Document.embedContainer) && DocCast(this.Document.embedContainer).practiceMode === 'quiz') {
+            if (DocCast(this.Document.embedContainer).practiceMode === practiceMode.QUIZ) {
                 const text = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
                 return (
-                    <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} style={{ display: 'flex', flexDirection: 'column' }}>
+                    <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`}>
                         <p style={{ color: 'white', padding: 10 }}>{text}</p>
                         <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
                         <div className="input-box">
@@ -757,38 +762,28 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                 readOnly={this._frontSide}></textarea>
 
                             {this._loading ? (
-                                <div className="loading-spinner" style={{ position: 'absolute' }}>
+                                <div className="loading-spinner">
                                     <ReactLoading type="spin" height={30} width={30} color={'blue'} />
                                 </div>
                             ) : null}
                         </div>
                         <div>
-                            <div className="submit-button" style={{ overflow: 'hidden', display: 'flex', width: '100%' }}>
-                                <div
-                                    className="submit-buttonschema-header-button"
-                                    onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, false)}
-                                    style={{ position: 'absolute', top: '5px', left: '11px', zIndex: '100', width: '5px', height: '5px', cursor: 'pointer' }}>
-                                    <FontAwesomeIcon color={'white'} icon="caret-down" />
+                            <div className="submit-button">
+                                <div className="submit-buttonschema-header-button" onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, false)}>
+                                    <FontAwesomeIcon color="white" icon="caret-down" />
                                 </div>
-                                <button className="submit-buttonrecord" onClick={this._listening ? this.stopListening : this.startListening} style={{ background: this._listening ? 'lightgray' : '', borderRadius: '2px' }}>
+                                <button className="submit-buttonrecord" onClick={this._listening ? this.stopListening : this.startListening} style={{ background: this._listening ? 'lightgray' : '' }}>
                                     {<FontAwesomeIcon icon="microphone" size="lg" />}
                                 </button>
-                                <div className="submit-buttonschema-header-button" onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, true)} style={{ position: 'absolute', top: '5px', left: '50px', zIndex: '100', cursor: 'pointer' }}>
-                                    <FontAwesomeIcon color={'white'} icon="caret-down" />
+                                <div className="submit-buttonschema-header-button" onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, true)} style={{ left: '50px', zIndex: '100' }}>
+                                    <FontAwesomeIcon color="white" icon="caret-down" />
                                 </div>
-                                <button className="submit-buttonpronunciation" onClick={this.evaluatePronunciation} style={{ display: 'inline-flex', alignItems: 'center' }}>
+                                <button className="submit-buttonpronunciation" onClick={this.evaluatePronunciation}>
                                     Evaluate Pronunciation
                                 </button>
-
-                                {!this._frontSide ? (
-                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderGPTClick} style={{ borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
-                                        Submit
-                                    </button>
-                                ) : (
-                                    <button className="submit-buttonsubmit" type="button" onClick={this.handleRenderClick} style={{ display: 'inline-flex', alignItems: 'center', borderRadius: '2px', marginBottom: '3px', width: '100%' }}>
-                                        Redo the Question
-                                    </button>
-                                )}
+                                <button className="submit-buttonsubmit" type="button" onClick={this._frontSide ? this.handleRenderClick : this.handleRenderGPTClick}>
+                                    {this._frontSide ? 'Redo the Question' : 'Submit'}
+                                </button>
                             </div>
                         </div>
                     </div>
@@ -804,7 +799,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     onMouseLeave={() => this.hoverFlip(false)}>
                     {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
                     {this._loading ? (
-                        <div className="loading-spinner" style={{ position: 'absolute' }}>
+                        <div className="loading-spinner">
                             <ReactLoading type="spin" height={30} width={30} color={'blue'} />
                         </div>
                     ) : null}
diff --git a/src/client/views/pdf/AnchorMenu.tsx b/src/client/views/pdf/AnchorMenu.tsx
index b204d3692..7243473e0 100644
--- a/src/client/views/pdf/AnchorMenu.tsx
+++ b/src/client/views/pdf/AnchorMenu.tsx
@@ -254,7 +254,7 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
                         />
                     )}
                     {/* Adds a create flashcards option to the anchor menu, which calls the gptFlashcard method. */}
-                    <IconButton tooltip="Create flashcards" onPointerDown={this.gptFlashcards} icon={<FontAwesomeIcon icon="id-card" size="lg" />} color={SettingsManager.userColor} />
+                    <IconButton tooltip="Create flashcards" onPointerDown={this.gptFlashcards} icon={<FontAwesomeIcon icon="layer-group" size="lg" />} color={SettingsManager.userColor} />
                     <IconButton tooltip="Create labels" onPointerDown={this.makeLabels} icon={<FontAwesomeIcon icon="tag" size="lg" />} color={SettingsManager.userColor} />
                     {this._selectedText && (
                         <IconButton
-- 
cgit v1.2.3-70-g09d2


From de4cc95e406b10bd92975abd5eef8f708cbf8f02 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Thu, 10 Oct 2024 22:32:52 -0400
Subject: fixed being able to use text menu on text in comparison box.  Allow
 TextDocuments to be created with a RichText field.  Changed comparisonBox to
 horizontally center flashcard text.

---
 src/client/documents/Documents.ts                  |  7 ++--
 src/client/views/nodes/ComparisonBox.tsx           | 44 ++++++++++++----------
 .../views/nodes/formattedText/FormattedTextBox.tsx |  6 +--
 .../views/nodes/formattedText/RichTextMenu.tsx     | 12 ++++--
 4 files changed, 38 insertions(+), 31 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index 5f2a592ae..0d7e0b20e 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -240,7 +240,6 @@ export class DocumentOptions {
     borderWidth?: STRt = new StrInfo('Width of user-added border', false);
     borderColor?: STRt = new StrInfo('Color of user-added border', false);
     text_fontColor?: STRt = new StrInfo('Color of text', false);
-    text_align?: STRt = new StrInfo('alignment');
     hCentering?: 'h-left' | 'h-center' | 'h-right';
     isDefaultTemplateDoc?: BOOLt = new BoolInfo('');
     contentBold?: BOOLt = new BoolInfo('');
@@ -697,7 +696,7 @@ export namespace Docs {
             dataProps.author_date = new DateField();
             if (fieldKey) {
                 dataProps[`${fieldKey}_modificationDate`] = new DateField();
-                dataProps[fieldKey] = options.data ?? data;
+                dataProps[fieldKey] = (options as unknown as { [key: string]: FieldType | undefined })[fieldKey] ?? data;
 
                 // so that the list of annotations is already initialised, prevents issues in addonly.
                 // without this, if a doc has no annotations but the user has AddOnly privileges, they won't be able to add an annotation because they would have needed to create the field's list which they don't have permissions to do.
@@ -827,7 +826,7 @@ export namespace Docs {
             return InstanceFromProto(Prototypes.get(DocumentType.MESSAGE), field, options, undefined, fieldKey);
         }
 
-        export function TextDocument(text: string, options: DocumentOptions = {}, fieldKey: string = 'text') {
+        export function TextDocument(text: string | RichTextField, options: DocumentOptions = {}, fieldKey: string = 'text') {
             const rtf = {
                 doc: {
                     type: 'doc',
@@ -846,7 +845,7 @@ export namespace Docs {
                 selection: { type: 'text', anchor: 1, head: 1 },
                 storedMarks: [],
             };
-            const field = text ? new RichTextField(JSON.stringify(rtf), text) : undefined;
+            const field = text instanceof RichTextField ? text : text ? new RichTextField(JSON.stringify(rtf), text) : options.text instanceof RichTextField ? options.text : undefined;
             return InstanceFromProto(Prototypes.get(DocumentType.RTF), field, options, undefined, fieldKey);
         }
 
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index ccbe98257..f8cf0f464 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -425,6 +425,27 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
     }
 
+    textToRtf = (text: string, img?: Doc) =>
+        new RichTextField(
+            JSON.stringify({
+                // this is a RichText json that has the question text placed above a related image
+                doc: {
+                    type: 'doc',
+                    content: [
+                        {
+                            type: 'paragraph',
+                            attrs: { align: 'center', color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
+                            content: [
+                                ...(text ? [{ type: 'text', text }] : []), //
+                                ...(img ? [{ type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: img[Id] } }] : []),
+                            ],
+                        },
+                    ],
+                },
+                selection: { type: 'text', anchor: 2, head: 2 },
+            }),
+            text
+        );
     /**
      * Transfers the content of flashcards into a flashcard pile.
      */
@@ -440,25 +461,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 const questionTxt = question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0];
                 const answerTxt = question[0].includes('Answer: ') ? question[0].split('Answer: ')[1] : question[1];
                 this.fetchImages(question[1]).then(img => {
-                    const rtfiel = new RichTextField(
-                        JSON.stringify({
-                            // this is a RichText json that has the question text placed above a related image
-                            doc: {
-                                type: 'doc',
-                                content: [
-                                    {
-                                        type: 'paragraph',
-                                        attrs: { align: null, color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
-                                        content: [{ type: 'text', text: questionTxt }, img ? { type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: img[Id] } } : {}],
-                                    },
-                                ],
-                            },
-                            selection: { type: 'text', anchor: 2, head: 2 },
-                        }),
-                        questionTxt
-                    );
-                    newDoc[DocData][this.fieldKey + '_1'] = Docs.Create.TextDocument(questionTxt, { text: rtfiel });
-                    newDoc[DocData][this.fieldKey + '_0'] = Docs.Create.TextDocument(answerTxt);
+                    newDoc[DocData][this.fieldKey + '_1'] = Docs.Create.TextDocument(this.textToRtf(questionTxt));
+                    newDoc[DocData][this.fieldKey + '_0'] = Docs.Create.TextDocument(this.textToRtf(answerTxt, img));
                 });
             }
 
@@ -723,7 +727,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             const side = this._frontSide ? 1 : 0;
             const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
             const textCreator = (which: number, title: string, text: string) => {
-                const newDoc = Docs.Create.TextDocument(text, {
+                const newDoc = Docs.Create.TextDocument(this.textToRtf(text), {
                     title, //
                     _layout_autoHeight: true,
                     _layout_centered: true,
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 18b8c9d34..c57307974 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -1328,7 +1328,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
         );
 
         this._disposers.selected = reaction(
-            () => this._props.rootSelected?.(),
+            () => this._props.rootSelected?.() || this._props.isContentActive(),
             action(selected => {
                 this.prepareForTyping();
                 if (FormattedTextBox._globalHighlights.has('Bold Text')) {
@@ -1514,7 +1514,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
                     dispatch(state.tr.insertText(startupText));
                 }
                 const textAlign = StrCast(this.dataDoc.text_align, StrCast(Doc.UserDoc().textAlign, 'left'));
-                if (textAlign !== 'left') {
+                if (textAlign && textAlign !== 'left') {
                     selectAll(this._editorView.state, tr => {
                         this._editorView!.dispatch(tr.replaceSelectionWith(state.schema.nodes.paragraph.create({ align: textAlign })));
                     });
@@ -1775,7 +1775,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
                 }
             }
         }
-        if (RichTextMenu.Instance?.view === this._editorView && !this._props.rootSelected?.()) {
+        if (RichTextMenu.Instance?.view === this._editorView && !(this._props.isContentActive() || this._props.rootSelected?.())) {
             RichTextMenu.Instance?.updateMenu(undefined, undefined, undefined, undefined);
         }
 
diff --git a/src/client/views/nodes/formattedText/RichTextMenu.tsx b/src/client/views/nodes/formattedText/RichTextMenu.tsx
index 88e2e4248..55e6a3a5b 100644
--- a/src/client/views/nodes/formattedText/RichTextMenu.tsx
+++ b/src/client/views/nodes/formattedText/RichTextMenu.tsx
@@ -76,6 +76,10 @@ export class RichTextMenu extends AntimodeMenu<AntimodeMenuProps> {
         });
     }
 
+    @computed get RootSelected() {
+        return this.TextView?._props.rootSelected?.() || this.TextView?._props.isContentActive();
+    }
+
     @computed get noAutoLink() {
         return this._noLinkActive;
     }
@@ -183,7 +187,7 @@ export class RichTextMenu extends AntimodeMenu<AntimodeMenuProps> {
 
     // finds font sizes and families in selection
     getActiveAlignment = () => {
-        if (this.view && this.TextView?._props.rootSelected?.()) {
+        if (this.view && this.RootSelected) {
             const from = this.view.state.selection.$from;
             for (let i = from.depth; i >= 0; i--) {
                 const node = from.node(i);
@@ -216,7 +220,7 @@ export class RichTextMenu extends AntimodeMenu<AntimodeMenuProps> {
         const activeSizes = new Set<string>();
         const activeColors = new Set<string>();
         const activeHighlights = new Set<string>();
-        if (this.view && this.TextView?._props.rootSelected?.()) {
+        if (this.view && this.RootSelected) {
             const { state } = this.view;
             const pos = this.view.state.selection.$from;
             let marks: Mark[] = [...(state.storedMarks ?? [])];
@@ -252,7 +256,7 @@ export class RichTextMenu extends AntimodeMenu<AntimodeMenuProps> {
 
     // finds all active marks on selection in given group
     getActiveMarksOnSelection() {
-        if (!this.view || !this.TextView?._props.rootSelected?.()) return [] as MarkType[];
+        if (!this.view || !this.RootSelected) return [] as MarkType[];
 
         const { state } = this.view;
         let marks: Mark[] = [...(state.storedMarks ?? [])];
@@ -409,7 +413,7 @@ export class RichTextMenu extends AntimodeMenu<AntimodeMenuProps> {
         this.layoutDoc && (this.layoutDoc._layout_centered = !this.layoutDoc._layout_centered);
     };
     align = (view: EditorView, dispatch: (tr: Transaction) => void, alignment: 'left' | 'right' | 'center') => {
-        if (this.TextView?._props.rootSelected?.()) {
+        if (this.RootSelected) {
             let { tr } = view.state;
             view.state.doc.nodesBetween(view.state.selection.from, view.state.selection.to, (node, pos) => {
                 if ([schema.nodes.paragraph, schema.nodes.heading].includes(node.type)) {
-- 
cgit v1.2.3-70-g09d2


From 04fb4e772c6b7cdc6e266b2c661b2eb5f075f954 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Fri, 11 Oct 2024 00:42:08 -0400
Subject: quiz changes

---
 src/client/views/nodes/ComparisonBox.tsx | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index f8cf0f464..b2a717c3c 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -117,7 +117,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                                 "Ask GPT to create an answer on the back side of the flashcard based on your question on the front"}
                                    </div> // prettier-ignore
                                 }>
-                                <div className="comparisonBox-button" onPointerDown={() => (this._frontSide ? this.findImageTags() : null)}>
+                                <div className="comparisonBox-button" onPointerDown={() => (this._frontSide ? this.askGPT(GPTCallType.CHATCARD) : null)}>
                                     <FontAwesomeIcon icon="lightbulb" size="xl" />
                                 </div>
                             </Tooltip>
@@ -476,8 +476,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      */
     askGPT = async (callType: GPTCallType): Promise<string | undefined> => {
         const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
-        // const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
-        // const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
+        const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
+        const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
         this._loading = true;
 
         if (callType == GPTCallType.CHATCARD) {
@@ -487,7 +487,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             }
         }
         try {
-            const res = await gptAPICall(questionText, GPTCallType.FLASHCARD);
+            const res = await gptAPICall(callType == GPTCallType.QUIZ ? queryText : questionText, callType);
             runInAction(() => {
                 if (!res) {
                     console.error('GPT call failed');
-- 
cgit v1.2.3-70-g09d2


From 66f2b03283a1e42c48b1c16b4344b730c0a2e9f3 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Fri, 11 Oct 2024 14:19:35 -0400
Subject: cleaned up comparisonBox a bit - fixed text doc placeholder text and
 fixed parsing keyword/question/answer from flashcard creator.  also fixed
 text boxes within in comparisonBox

---
 .../views/collections/FlashcardPracticeUI.tsx      |  17 +-
 src/client/views/nodes/ComparisonBox.tsx           | 308 ++++++++++-----------
 src/client/views/nodes/DocumentView.tsx            |   9 -
 .../views/nodes/formattedText/FormattedTextBox.tsx |   9 +
 4 files changed, 170 insertions(+), 173 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/collections/FlashcardPracticeUI.tsx b/src/client/views/collections/FlashcardPracticeUI.tsx
index 7697d308b..45e040653 100644
--- a/src/client/views/collections/FlashcardPracticeUI.tsx
+++ b/src/client/views/collections/FlashcardPracticeUI.tsx
@@ -1,19 +1,19 @@
+import { IconProp } from '@fortawesome/fontawesome-svg-core';
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { Tooltip } from '@mui/material';
+import { IconButton, MultiToggle, Type } from 'browndash-components';
 import { computed, makeObservable } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import { returnFalse, returnZero, setupMoveUpEvents } from '../../../ClientUtils';
+import { emptyFunction } from '../../../Utils';
 import { Doc, DocListCast } from '../../../fields/Doc';
 import { BoolCast, NumCast, StrCast } from '../../../fields/Types';
+import { SnappingManager } from '../../util/SnappingManager';
 import { Transform } from '../../util/Transform';
 import { ObservableReactComponent } from '../ObservableReactComponent';
 import { DocumentView, DocumentViewProps } from '../nodes/DocumentView';
 import './FlashcardPracticeUI.scss';
-import { IconButton, MultiToggle, Type } from 'browndash-components';
-import { SnappingManager } from '../../util/SnappingManager';
-import { IconProp } from '@fortawesome/fontawesome-svg-core';
-import { emptyFunction } from '../../../Utils';
 
 export enum practiceMode {
     PRACTICE = 'practice',
@@ -24,6 +24,11 @@ enum practiceVal {
     CORRECT = 'correct',
 }
 
+export enum flashcardRevealOp {
+    HOVER = 'hover',
+    FLIP = 'flip',
+}
+
 interface PracticeUIProps {
     fieldKey: string;
     layoutDoc: Doc;
@@ -154,11 +159,11 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
                     text={StrCast(this._props.layoutDoc.revealOp)}
                     color={SnappingManager.userColor}
                     background={SnappingManager.userVariantColor}
-                    icon={<FontAwesomeIcon color={SnappingManager.userColor} icon={this._props.layoutDoc.revealOp === 'hover' ? 'hand-point-up' : 'question'} size="sm" />}
+                    icon={<FontAwesomeIcon color={SnappingManager.userColor} icon={this._props.layoutDoc.revealOp === flashcardRevealOp.HOVER ? 'hand-point-up' : 'question'} size="sm" />}
                     label={StrCast(this._props.layoutDoc.revealOp)}
                     onPointerDown={e =>
                         setupMoveUpEvents(this, e, returnFalse, emptyFunction, () => {
-                            this._props.layoutDoc.revealOp = this._props.layoutDoc.revealOp === 'hover' ? 'flip' : 'hover';
+                            this._props.layoutDoc.revealOp = this._props.layoutDoc.revealOp === flashcardRevealOp.HOVER ? flashcardRevealOp.FLIP : flashcardRevealOp.HOVER;
                             this._props.layoutDoc.childDocumentsActive = this._props.layoutDoc.revealOp === 'hover' ? true : undefined;
                         })
                     }
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index b2a717c3c..a57090e99 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -11,7 +11,7 @@ import { Doc, Opt } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
 import { Id } from '../../../fields/FieldSymbols';
 import { RichTextField } from '../../../fields/RichTextField';
-import { DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
+import { BoolCast, DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
 import { nullAudio } from '../../../fields/URLField';
 import { GPTCallType, gptAPICall, gptImageLabel } from '../../apis/gpt/GPT';
 import { DocUtils, FollowLinkScript } from '../../documents/DocUtils';
@@ -25,12 +25,12 @@ import { ContextMenu } from '../ContextMenu';
 import { ViewBoxAnnotatableComponent } from '../DocComponent';
 import { PinDocView, PinProps } from '../PinFuncs';
 import { StyleProp } from '../StyleProp';
+import { flashcardRevealOp, practiceMode } from '../collections/FlashcardPracticeUI';
 import '../pdf/GPTPopup/GPTPopup.scss';
 import './ComparisonBox.scss';
 import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FormattedTextBox } from './formattedText/FormattedTextBox';
-import { practiceMode } from '../collections/FlashcardPracticeUI';
 
 const API_URL = 'https://api.unsplash.com/search/photos';
 
@@ -41,7 +41,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     }
     private SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
     private _closeRef = React.createRef<HTMLDivElement>();
-    private _disposers: (DragManager.DragDropDisposer | undefined)[] = [undefined, undefined];
+    private _disposers: { [key: string]: DragManager.DragDropDisposer | undefined } = {};
     private _reactDisposer: IReactionDisposer | undefined;
     constructor(props: FieldViewProps) {
         super(props);
@@ -55,9 +55,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @observable private _childActive = false;
     @observable private _animating = '';
     @observable private _listening = false;
-    @observable private _frontSide = false;
-    @observable recognition = new this.SpeechRecognition();
+    @observable private _renderSide = this.fieldKey;
+    @observable private _recognition = new this.SpeechRecognition();
 
+    @computed get isFlashcard()   { return BoolCast(this.Document.layout_isFlashcard); } // prettier-ignore
+    @computed get frontKey()      { return this._props.fieldKey; } // prettier-ignore
+    @computed get backKey()       { return this._props.fieldKey + '_back'; } // prettier-ignore
     @computed get revealOpKey()   { return `_${this._props.fieldKey}_revealOp`; } // prettier-ignore
     @computed get clipHeightKey() { return `_${this._props.fieldKey}_clipHeight`; } // prettier-ignore
     @computed get clipWidthKey()  { return `_${this._props.fieldKey}_clipWidth`;  } // prettier-ignore
@@ -65,6 +68,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @computed get clipHeight()    { return NumCast(this.layoutDoc[this.clipHeightKey], 200);  } // prettier-ignore
     @computed get revealOp()      { return StrCast(this.layoutDoc[this.revealOpKey], StrCast(this._props.docViewPath().slice(-2)[0]?.Document.revealOp)); } // prettier-ignore
     set revealOp(value:string)    { this.layoutDoc[this.revealOpKey] = value; } // prettier-ignore
+    @computed get loading()       { return this._loading; } // prettier-ignore
+    set loading(value)            { runInAction(() => { this._loading = value; })} // prettier-ignore
 
     @computed get overlayAlternateIcon() {
         return (
@@ -73,14 +78,14 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     className="comparisonBox-alternateButton ccomparisonBox-button"
                     onPointerDown={e =>
                         setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => {
-                            if (!this.revealOp || this.revealOp === 'flip') {
+                            if (!this.revealOp || this.revealOp === flashcardRevealOp.FLIP) {
                                 this.flipFlashcard();
                             }
                         })
                     }
                     style={{
-                        background: this.revealOp === 'hover' ? 'gray' : this._frontSide ? 'white' : 'black',
-                        color: this.revealOp === 'hover' ? 'black' : this._frontSide ? 'black' : 'white',
+                        background: this.revealOp === flashcardRevealOp.HOVER ? 'gray' : this._renderSide === this.backKey ? 'white' : 'black',
+                        color: this.revealOp === flashcardRevealOp.HOVER ? 'black' : this._renderSide === this.backKey ? 'black' : 'white',
                         display: 'inline-block',
                     }}>
                     <FontAwesomeIcon icon="turn-up" size="xl" />
@@ -106,18 +111,15 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @computed get flashcardMenu() {
         return SnappingManager.HideDecorations ? null : (
             <div className="comparisonBox-bottomMenu" style={{ transform: `scale(${this.uiBtnScaling})` }}>
-                {this.revealOp === 'hover' || !this._props.isSelected() ? null : this.overlayAlternateIcon}
+                {this.revealOp === flashcardRevealOp.HOVER || !this._props.isSelected() ? null : this.overlayAlternateIcon}
                 {!this._props.isSelected() ? null : (
                     <>
-                        {!this._frontSide ? null : (
+                        {this._renderSide === this.frontKey ? null : (
                             <Tooltip
                                 title={
-                                    <div className="dash-tooltip">{
-                                        !this._frontSide ? "Flip to front side to use GPT":
-                                                "Ask GPT to create an answer on the back side of the flashcard based on your question on the front"}
-                                   </div> // prettier-ignore
+                                    <div className="dash-tooltip">Ask GPT to create an answer for the question on the front</div> // prettier-ignore
                                 }>
-                                <div className="comparisonBox-button" onPointerDown={() => (this._frontSide ? this.askGPT(GPTCallType.CHATCARD) : null)}>
+                                <div className="comparisonBox-button" onPointerDown={() => this.askGPT(GPTCallType.CHATCARD)}>
                                     <FontAwesomeIcon icon="lightbulb" size="xl" />
                                 </div>
                             </Tooltip>
@@ -143,17 +145,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this._childActive = true;
     };
 
-    @action handleRenderClick = () => {
-        this._frontSide = !this._frontSide;
-    };
-
     @action handleRenderGPTClick = () => {
         const phonTrans = DocCast(this.Document.audio) ? DocCast(this.Document.audio).phoneticTranscription : undefined;
         if (phonTrans) {
             this._inputValue = StrCast(phonTrans);
             this.askGPTPhonemes(this._inputValue);
         } else if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
-        this._frontSide = false;
+        this._renderSide = this.backKey;
         this._outputValue = '';
     };
 
@@ -169,7 +167,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this._props.setContentViewBox?.(this);
         this._reactDisposer = reaction(
             () => this._props.isSelected(), // when this reaction should update
-            selected => !selected && (this._childActive = false) // what it should update to
+            selected => {
+                if (selected && this.isFlashcard) this.activateContent();
+                !selected && (this._childActive = false);
+            }, // what it should update to
+            { fireImmediately: true }
         );
     }
 
@@ -177,10 +179,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this._reactDisposer?.();
     }
 
-    protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string, disposerId: number) => {
-        this._disposers[disposerId]?.();
+    protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string) => {
+        this._disposers[fieldKey]?.();
         if (ele) {
-            this._disposers[disposerId] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
+            this._disposers[fieldKey] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
         }
     };
 
@@ -253,10 +255,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             default:                      return this._props.styleProvider?.(doc, props, property);
         } // prettier-ignore
     };
-    moveDoc1 = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: (doc: Doc | Doc[]) => boolean) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.fieldKey + '_1'), true);
-    moveDoc2 = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: (doc: Doc | Doc[]) => boolean) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.fieldKey + '_2'), true);
-    remDoc1 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_1'), true);
-    remDoc2 = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.fieldKey + '_2'), true);
+    moveDocFront = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: (doc: Doc | Doc[]) => boolean) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.frontKey), true);
+    moveDocBack = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: (doc: Doc | Doc[]) => boolean) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.backKey), true);
+    remDocFront = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.frontKey), true);
+    remDocBack = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.backKey), true);
 
     registerSliding = (e: React.PointerEvent<HTMLDivElement>, targetWidth: number) => {
         if (e.button !== 2) {
@@ -268,8 +270,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 action((moveEv, doubleTap) => {
                     if (doubleTap) {
                         this._childActive = true;
-                        if (!this.dataDoc[this.fieldKey + '_1'] && !this.dataDoc[this.fieldKey]) this.dataDoc[this.fieldKey + '_1'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
-                        if (!this.dataDoc[this.fieldKey + '_2'] && !this.dataDoc[this.fieldKey + '_alternate']) this.dataDoc[this.fieldKey + '_2'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
+                        if (!this.dataDoc[this.frontKey] && !this.dataDoc[this.fieldKey]) this.dataDoc[this.frontKey] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
+                        if (!this.dataDoc[this.backKey] && !this.dataDoc[this.fieldKey + '_alternate']) this.dataDoc[this.backKey] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
                     }
                 }),
                 false,
@@ -296,26 +298,26 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      */
     setListening = () => {
         if (this.SpeechRecognition) {
-            this.recognition.continuous = true;
-            this.recognition.interimResults = true;
-            this.recognition.lang = 'en-US';
-            this.recognition.onresult = this.handleResult.bind(this);
+            this._recognition.continuous = true;
+            this._recognition.interimResults = true;
+            this._recognition.lang = 'en-US';
+            this._recognition.onresult = this.handleResult.bind(this);
         }
         ContextMenu.Instance.setLangIndex(0);
     };
 
     startListening = () => {
-        this.recognition.start();
+        this._recognition.start();
         this._listening = true;
     };
 
     stopListening = () => {
-        this.recognition.stop();
+        this._recognition.stop();
         this._listening = false;
     };
 
     setLanguage = (language: string, ind: number) => {
-        this.recognition.lang = language;
+        this._recognition.lang = language;
         ContextMenu.Instance.setLangIndex(ind);
     };
 
@@ -324,7 +326,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * @returns
      */
     convertAbr = () => {
-        switch (this.recognition.lang) {
+        switch (this._recognition.lang) {
             case 'en-US': return 'English'; //prettier-ignore
             case 'es-ES': return 'Spanish'; //prettier-ignore
             case 'fr-FR': return 'French'; //prettier-ignore
@@ -389,7 +391,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      */
     youtubeUpload = async () => {
         const audio = {
-            file: this.getYouTubeVideoId(StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text)),
+            file: this.getYouTubeVideoId(StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text)),
         };
         const response = await axios.post('http://localhost:105/youtube/', audio, {
             headers: {
@@ -407,13 +409,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             _layout_autoHeight: true,
             _xMargin: 5,
             _yMargin: 5,
+            x: NumCast(this.layoutDoc.x),
+            y: NumCast(this.layoutDoc.y) + 50,
         });
-        newCol.x = this.layoutDoc.x;
-        newCol.y = NumCast(this.layoutDoc.y) + 50;
-        newCol.type_collection = CollectionViewType.Carousel as string;
-        for (let i = 0; i < collectionArr.length; i++) {
-            DocCast(collectionArr[i])[DocData].embedContainer = newCol;
-        }
 
         if (gpt) {
             this._props.DocumentView?.()._props.addDocument?.(newCol);
@@ -421,7 +419,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         } else {
             this._props.addDocument?.(newCol);
             this._props.removeDocument?.(this.Document);
-            this.Document.embedContainer = newCol;
+            Doc.SetContainer(this.Document, newCol);
         }
     }
 
@@ -450,65 +448,69 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * Transfers the content of flashcards into a flashcard pile.
      */
     gptFlashcardPile = async () => {
-        const text = await this.askGPT(GPTCallType.STACK);
-        const senArr = text?.split('Question: ') ?? [];
-        const collectionArr: Doc[] = [];
-        for (let i = 1; i < senArr.length; i++) {
-            const newDoc = Docs.Create.ComparisonDocument(senArr[i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
-
-            if (senArr[i].includes('Keyword: ')) {
-                const question = StrCast(senArr![i]).split('Keyword: ');
-                const questionTxt = question[0].includes('Answer: ') ? question[0].split('Answer: ')[0] : question[0];
-                const answerTxt = question[0].includes('Answer: ') ? question[0].split('Answer: ')[1] : question[1];
-                this.fetchImages(question[1]).then(img => {
-                    newDoc[DocData][this.fieldKey + '_1'] = Docs.Create.TextDocument(this.textToRtf(questionTxt));
-                    newDoc[DocData][this.fieldKey + '_0'] = Docs.Create.TextDocument(this.textToRtf(answerTxt, img));
+        this.askGPT(GPTCallType.STACK).then(text => {
+            const [qtoken, ktoken, atoken] = ['Question: ', 'Keyword: ', 'Answer: '];
+            const collectionArr: Doc[] = [];
+            const promises = text
+                .split(qtoken)
+                .filter(t => t)
+                .map(tuple => {
+                    const newDoc = Docs.Create.ComparisonDocument('', { _layout_isFlashcard: true, _width: 300, _height: 300 });
+                    const question = (tuple.includes(ktoken) ? tuple.split(ktoken)[0] : tuple).split(atoken)[0];
+                    const rest = tuple.replace(question, '');
+                    // prettier-ignore
+                    const answer = rest.startsWith(ktoken) ?     // if keyword comes first, 
+                                        tuple.includes(atoken) ? tuple.split(atoken)[1] : "" : //if tuple includes answer, split at answer and take what's left, otherwise there's no answer
+                                    rest.includes(ktoken) ?      // otherwise if keyword is present it must come after answer, 
+                                        rest.split(ktoken)[0].split(atoken)[1] :  // split at keyword and take what comes first and split that at answer and take what's left
+                                        rest.replace(atoken,""); // finally if there's no keyword, just get rid of answer token and take what's left
+                    const keyword = rest.replace(atoken, '').replace(answer, '').replace(ktoken, '').trim();
+                    const fillInFlashcard = (img?: Doc) => {
+                        newDoc[DocData][this.frontKey] = this.textCreator('question', question, img);
+                        newDoc[DocData][this.backKey] = this.textCreator('answer', answer);
+                        collectionArr.push(newDoc);
+                    };
+                    return keyword && keyword !== 'none' ? this.fetchImages(keyword).then(img => fillInFlashcard(img)) : fillInFlashcard();
                 });
-            }
-
-            collectionArr.push(newDoc);
-        }
-        this.createFlashcardPile(collectionArr, true);
+            Promise.all(promises).then(() => this.createFlashcardPile(collectionArr, true));
+        });
     };
 
     /**
      * Calls GPT for each flashcard type.
      */
-    askGPT = async (callType: GPTCallType): Promise<string | undefined> => {
-        const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
-        const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_0']).text)?.Text);
+    askGPT = async (callType: GPTCallType) => {
+        const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text);
+        const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.backKey]).text)?.Text);
         const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
-        this._loading = true;
+        this.loading = true;
+        let res = '';
 
-        if (callType == GPTCallType.CHATCARD) {
-            if (StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text) === '') {
-                this._loading = false;
-                return;
-            }
-        }
-        try {
-            const res = await gptAPICall(callType == GPTCallType.QUIZ ? queryText : questionText, callType);
-            runInAction(() => {
+        if (callType !== GPTCallType.CHATCARD || StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text) !== '') {
+            try {
+                res = await gptAPICall(callType == GPTCallType.QUIZ ? queryText : questionText, callType);
                 if (!res) {
                     console.error('GPT call failed');
-                    return;
-                }
-                if (callType == GPTCallType.CHATCARD) {
-                    DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
-                } else if (callType == GPTCallType.QUIZ) {
-                    this._frontSide = true;
-                    this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
-                } else if (callType === GPTCallType.FLASHCARD) {
-                    this._loading = false;
-                    return res;
-                }
-                this._loading = false;
-            });
-            return res;
-        } catch (err) {
-            console.error('GPT call failed', err);
+                } else
+                    switch (callType) {
+                        case GPTCallType.CHATCARD:
+                            DocCast(this.dataDoc[this.backKey])[DocData].text = res;
+                            break;
+                        case GPTCallType.QUIZ:
+                            runInAction(() => {
+                                this._renderSide = this.frontKey;
+                                this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
+                            });
+                            break;
+                        case GPTCallType.FLASHCARD:
+                        default:
+                    }
+            } catch (err) {
+                console.error('GPT call failed', err);
+            }
         }
-        this._loading = false;
+        this.loading = false;
+        return res;
     };
     layoutWidth = () => NumCast(this.layoutDoc.width, 200);
     layoutHeight = () => NumCast(this.layoutDoc.height, 200);
@@ -517,11 +519,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         const c = this.DocumentView?.().ContentDiv?.getElementsByTagName('img');
         if (c?.length === 0) this.askGPT(GPTCallType.CHATCARD);
         if (c) {
-            this._loading = true;
+            this.loading = true;
             for (const i of c) {
                 if (i.className !== 'ProseMirror-separator') this.getImageDesc(i.src);
             }
-            this._loading = false;
+            this.loading = false;
         }
     };
 
@@ -531,7 +533,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * @param phonemes
      */
     askGPTPhonemes = async (phonemes: string) => {
-        const sentence = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
+        const sentence = StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text);
         const phon6 = 'huː ɑɹ juː tədeɪ';
         const phon4 = 'kamo estas hɔi';
         const promptEng =
@@ -557,17 +559,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             this.convertAbr() +
             ' speech and they are not allophones of the same phoneme and they are far away from each on the ipa vowel chat and that pronunciation is not normal for the meaning of the word, note this difference and explain how it is supposed to sound. Just so you know, "i" sounds like "ee" as in "bee", not "ih" as an "lick". Interpret "ɹ" as the same as "r". Interpret "ʌ" as the same as "ə". Do not make "θ" and "f" interchangable. Do not make "n" and "ɲ" interchangable. Do not make "e" and "i" interchangable. If "ɚ", "ɔː", and "ɔ" are options for pronunciation, do not choose "ɚ". Ignore differences with colons. Ignore redundant letters and words and sounds and the splitting of words; do not mention this since there could be repeated words in the sentence. Provide a response like this: "Lets work on improving the pronunciation of "coffee." You said "cawffee," which is close, but we need to adjust the vowel sound. In American English, "coffee" is pronounced /ˈkɔːfi/, with a long "aw" sound. Try saying "kah-fee." Your intonation is good, but try putting a bit more stress on "like" in the sentence "I would like a coffee with milk." This will make your speech sound more natural. Keep practicing, and lets try saying the whole sentence again!"';
 
-        switch (this.recognition.lang) {
-            case 'en-US':
-                this._outputValue = await gptAPICall(promptEng, GPTCallType.PRONUNCIATION);
-                break;
-            case 'es-ES':
-                this._outputValue = await gptAPICall(promptSpa, GPTCallType.PRONUNCIATION);
-                break;
-            default:
-                this._outputValue = await gptAPICall(promptAll, GPTCallType.PRONUNCIATION);
-                break;
-        }
+        switch (this._recognition.lang) {
+            case 'en-US': this._outputValue = await gptAPICall(promptEng, GPTCallType.PRONUNCIATION); break;
+            case 'es-ES': this._outputValue = await gptAPICall(promptSpa, GPTCallType.PRONUNCIATION); break;
+            default:      this._outputValue = await gptAPICall(promptAll, GPTCallType.PRONUNCIATION); break;
+        } // prettier-ignore
     };
 
     /**
@@ -603,8 +599,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 _height: 150,
                 title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
             });
-            imageSnapshot.x = this.layoutDoc.x;
-            imageSnapshot.y = this.layoutDoc.y;
             return imageSnapshot;
         } catch (error) {
             console.log(error);
@@ -616,7 +610,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             const hrefBase64 = await imageUrlToBase64(u);
             const response = await gptImageLabel(hrefBase64, 'Answer the following question as a short flashcard response. Do not include a label.' + (this.dataDoc.text as RichTextField)?.Text);
 
-            DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = response;
+            DocCast(this.dataDoc[this.backKey])[DocData].text = response;
         } catch (error) {
             console.log('Error', error);
         }
@@ -624,11 +618,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     @action
     flipFlashcard = () => {
-        this._frontSide = !this._frontSide;
+        this._renderSide = this._renderSide === this.frontKey ? this.backKey : this.frontKey;
     };
 
-    hoverFlip = (side: boolean) => {
-        if (this.revealOp === 'hover') this._frontSide = side;
+    @action
+    hoverFlip = (side: string) => {
+        if (this.revealOp === flashcardRevealOp.HOVER) this._renderSide = side;
     };
 
     testForTextFields = (whichSlot: string) => {
@@ -638,8 +633,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         const altText = RTFCast(this.Document[this.fieldKey + '_alternate'])?.Text.trim();
         const layoutTemplateString =
             slotHasText ? FormattedTextBox.LayoutString(whichSlot):
-            whichSlot.endsWith('1') ? (subjectText !== undefined ? FormattedTextBox.LayoutString(this.fieldKey) : undefined) :
-                                       altText !== undefined     ? FormattedTextBox.LayoutString(this.fieldKey + '_alternate'): undefined; // prettier-ignore
+            whichSlot === this.frontKey ? (subjectText !== undefined ? FormattedTextBox.LayoutString(this.fieldKey) : undefined) :
+                                          altText !== undefined     ? FormattedTextBox.LayoutString(this.fieldKey + '_alternate'): undefined; // prettier-ignore
 
         // A bit hacky to try out the concept of using GPT to fill in flashcards
         //   If the second slot doesn't have anything in it, but the fieldKey slot has text (e.g., this.text is a string)
@@ -647,8 +642,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         // eg., this.text_alternate is
         //     "((Provide a one sentence definition for (this) that doesn't use any word in (this.excludeWords) ))"
         //     where (this) is replaced by the text in the fieldKey slot abd this.excludeWords is repalced by the conetnts of the excludeWords field
-        // The GPT call will put the "answer"  in the second slot of the comparison (eg., text_2)
-        if (whichSlot.endsWith('2') && !layoutTemplateString?.includes(whichSlot)) {
+        // The GPT call will put the "answer"  in the second slot of the comparison (eg., text_0)
+        if (whichSlot === this.backKey && !layoutTemplateString?.includes(whichSlot)) {
             const queryText = altText?.replace('(this)', subjectText); // TODO: this should be done in Doc.setField but it doesn't know about the fieldKey ...
             if (queryText?.match(/\(\(.*\)\)/)) {
                 Doc.SetField(this.Document, whichSlot, ':=' + queryText, false); // make the second slot be a computed field on the data doc that calls ChatGpt
@@ -656,7 +651,16 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
         return layoutTemplateString;
     };
-
+    textCreator = (title: string, text: string, img?: Doc) => {
+        const newDoc = Docs.Create.TextDocument(this.textToRtf(text, img), {
+            title, //
+            _layout_autoHeight: true,
+            _layout_centered: true,
+            text_align: 'center',
+            _layout_fitWidth: true,
+        });
+        return newDoc;
+    };
     childActiveFunc = () => this._childActive;
 
     contentScreenToLocalXf = () => this._props.ScreenToLocalTransform().scale(this._props.NativeDimScaling?.() || 1);
@@ -688,8 +692,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         LayoutTemplateString={layoutString}
                         Document={layoutString ? this.Document : targetDoc}
                         containerViewPath={this._props.docViewPath}
-                        moveDocument={whichSlot.endsWith('1') ? this.moveDoc1 : this.moveDoc2}
-                        removeDocument={whichSlot.endsWith('1') ? this.remDoc1 : this.remDoc2}
+                        moveDocument={whichSlot === this.frontKey ? this.moveDocFront : this.moveDocBack}
+                        removeDocument={whichSlot === this.frontKey ? this.remDocFront : this.remDocBack}
                         NativeWidth={returnZero}
                         NativeHeight={returnZero}
                         ScreenToLocalTransform={this.contentScreenToLocalXf}
@@ -701,7 +705,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         hideLinkButton
                         pointerEvents={this._childActive ? undefined : returnNone}
                     />
-                    {!this.Document._layout_isFlashcard ? clearButton(whichSlot) : null}
+                    {!this.isFlashcard ? clearButton(whichSlot) : null}
                 </>
             ) : (
                 <div className="placeholder">
@@ -709,67 +713,56 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 </div>
             );
         };
-        const displayBox = (which: string, index: number, cover: number) => (
+        const displayBox = (which: string, cover: number) => (
             <div
-                className={`${index === 0 ? 'before' : 'after'}Box-cont`}
+                className={`${which === this.frontKey ? 'before' : 'after'}Box-cont`}
                 key={which}
                 style={{ width: this._props.PanelWidth() }}
                 onPointerDown={e => {
                     this.registerSliding(e, cover);
-                    this.Document._layout_isFlashcard && this.activateContent();
+                    this.isFlashcard && this.activateContent();
                 }}
-                ref={ele => this.createDropTarget(ele, which, index)}>
+                ref={ele => this.createDropTarget(ele, which)}>
                 {!this._isEmpty ? displayDoc(which) : null}
             </div>
         );
 
-        if (this.Document._layout_isFlashcard) {
-            const side = this._frontSide ? 1 : 0;
+        if (this.isFlashcard) {
             const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-            const textCreator = (which: number, title: string, text: string) => {
-                const newDoc = Docs.Create.TextDocument(this.textToRtf(text), {
-                    title, //
-                    _layout_autoHeight: true,
-                    _layout_centered: true,
-                    text_align: 'center',
-                    _layout_fitWidth: true,
-                });
-                this.addDoc(newDoc, this.fieldKey + '_' + which);
-                return newDoc;
-            };
 
             // add text box to each side when comparison box is first created
-            if (!this.dataDoc[this.fieldKey + '_0'] && !this._isEmpty) {
-                textCreator(0, 'answer', dataSplit[1]);
+            if (!this.dataDoc[this.backKey] && !this._isEmpty) {
+                this.dataDoc[this.backKey] = this.textCreator('answer', dataSplit[1]);
             }
 
-            if (!this.dataDoc[this.fieldKey + '_1'] && !this._isEmpty) {
-                const question = textCreator(1, 'question', dataSplit[0] || 'hint: Enter a topic, select this document and click the stack button to have GPT create a deck of cards');
-                Doc.SelectOnLoad = dataSplit[0] ? undefined : question;
+            if (!this.dataDoc[this.frontKey] && !this._isEmpty) {
+                const question = this.textCreator('question', dataSplit[0] || 'hint: Enter a topic, select this document and click the stack button to have GPT create a deck of cards');
+                this.dataDoc[this.frontKey] = question;
+                !dataSplit[0] && (question[DocData].text_placeholder = true);
             }
 
             if (DocCast(this.Document.embedContainer).practiceMode === practiceMode.QUIZ) {
-                const text = StrCast(RTFCast(DocCast(this.dataDoc[this.fieldKey + '_1']).text)?.Text);
+                const text = StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text);
                 return (
                     <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`}>
                         <p style={{ color: 'white', padding: 10 }}>{text}</p>
                         <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
                         <div className="input-box">
                             <textarea
-                                value={this._frontSide ? this._outputValue : this._inputValue}
+                                value={this._renderSide ? this._outputValue : this._inputValue}
                                 onChange={this.handleInputChange}
                                 onScroll={e => {
                                     e.stopPropagation();
                                     e.preventDefault();
                                 }}
                                 placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
-                                readOnly={this._frontSide}></textarea>
+                                readOnly={this._renderSide === this.frontKey}></textarea>
 
-                            {this._loading ? (
+                            {!this.loading ? null : (
                                 <div className="loading-spinner">
                                     <ReactLoading type="spin" height={30} width={30} color={'blue'} />
                                 </div>
-                            ) : null}
+                            )}
                         </div>
                         <div>
                             <div className="submit-button">
@@ -785,8 +778,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                 <button className="submit-buttonpronunciation" onClick={this.evaluatePronunciation}>
                                     Evaluate Pronunciation
                                 </button>
-                                <button className="submit-buttonsubmit" type="button" onClick={this._frontSide ? this.handleRenderClick : this.handleRenderGPTClick}>
-                                    {this._frontSide ? 'Redo the Question' : 'Submit'}
+                                <button className="submit-buttonsubmit" type="button" onClick={this._renderSide === this.frontKey ? this.flipFlashcard : this.handleRenderGPTClick}>
+                                    {this._renderSide === this.frontKey ? 'Redo the Question' : 'Submit'}
                                 </button>
                             </div>
                         </div>
@@ -798,11 +791,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             return (
                 <div
                     className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
-                    style={{ display: 'flex', flexDirection: 'column' }}
-                    onMouseEnter={() => this.hoverFlip(true)}
-                    onMouseLeave={() => this.hoverFlip(false)}>
-                    {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
-                    {this._loading ? (
+                    onMouseEnter={() => this.hoverFlip(this.backKey)}
+                    onMouseLeave={() => this.hoverFlip(this.frontKey)}>
+                    {displayBox(this._renderSide, this._props.PanelWidth() - 3)}
+                    {this.loading ? (
                         <div className="loading-spinner">
                             <ReactLoading type="spin" height={30} width={30} color={'blue'} />
                         </div>
@@ -814,9 +806,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         // render a comparison box that compares items side by side
         return (
             <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}` /* change className to easily disable/enable pointer events in CSS */}>
-                {displayBox(`${this.fieldKey}_2`, 1, this._props.PanelWidth() - 3)}
+                {displayBox(this.backKey, this._props.PanelWidth() - 3)}
                 <div className="clip-div" style={{ width: this.clipWidth + '%', transition: this._animating, background: StrCast(this.layoutDoc._backgroundColor, 'gray') }}>
-                    {displayBox(`${this.fieldKey}_1`, 0, 0)}
+                    {displayBox(this.frontKey, 0)}
                 </div>
 
                 <div
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index f7aba7542..c052a2823 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -576,15 +576,6 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
             !Doc.noviceMode && templateDoc && appearanceItems.push({ description: 'Open Template   ', event: () => this._props.addDocTab(templateDoc, OpenWhere.addRight), icon: 'eye' });
             !appearance && appearanceItems.length && cm.addItem({ description: 'Appearance...', subitems: appearanceItems, icon: 'compass' });
 
-            // creates menu for the user to select how to reveal the flashcards
-            // if (this.Document._layout_isFlashcard) {
-            //     const revealOptions = cm.findByDescription('Reveal Options');
-            //     const revealItems: ContextMenuProps[] = revealOptions && 'subitems' in revealOptions ? revealOptions.subitems : [];
-            //     revealItems.push({ description: 'Hover', event: () => { this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'hover'; }, icon: 'hand-point-up' }); // prettier-ignore
-            //     revealItems.push({ description: 'Flip', event: () => { this.layoutDoc[`_${this._props.fieldKey}_revealOp`] = 'flip'; }, icon: 'rotate' }); // prettier-ignore
-            //     !revealOptions && cm.addItem({ description: 'Reveal Options', addDivider: false, noexpand: true, subitems: revealItems, icon: 'layer-group' });
-            // }
-
             if (this._props.bringToFront) {
                 const zorders = cm.findByDescription('ZOrder...');
                 const zorderItems = zorders?.subitems ?? [];
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index c57307974..bf19a2f82 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -360,6 +360,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
                         // if no template, or there's text that didn't come from the layout template, write it to the document. (if this is driven by a template, then this overwrites the template text which is intended)
                         if (force || ((this._finishingLink || this._props.isContentActive() || this._inDrop) && (textChange || removeSelection(newJson) !== removeSelection(prevData?.Data)))) {
                             textChange && (dataDoc[this.fieldKey + '_modificationDate'] = new DateField(new Date(Date.now())));
+                            textChange && (dataDoc[this.fieldKey + '_placeholder'] = undefined);
                             const numstring = NumCast(dataDoc[this.fieldKey], null);
                             dataDoc[this.fieldKey] =
                                 numstring !== undefined ? Number(newText) : newText || (DocCast(dataDoc.proto)?.[this.fieldKey] === undefined && this.layoutDoc[this.fieldKey] === undefined) ? new RichTextField(newJson, newText) : undefined;
@@ -1330,6 +1331,14 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
         this._disposers.selected = reaction(
             () => this._props.rootSelected?.() || this._props.isContentActive(),
             action(selected => {
+                if (selected && this.dataDoc[this.fieldKey + '_placeholder']) {
+                    setTimeout(() => {
+                        selectAll(this._editorView!.state, (tx: Transaction) => {
+                            this._editorView?.dispatch(tx);
+                            this._editorView!.focus();
+                        });
+                    });
+                }
                 this.prepareForTyping();
                 if (FormattedTextBox._globalHighlights.has('Bold Text')) {
                     this.layoutDoc[DocCss] = this.layoutDoc[DocCss] + 1; // css change happens outside of mobx/react, so this will notify anyone interested in the layout that it has changed
-- 
cgit v1.2.3-70-g09d2


From 76abb174684f2cd231a0dd9f6b71484c16e0498a Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Fri, 11 Oct 2024 15:55:19 -0400
Subject: fixes for quiz mode - comparisonbox renderSide fixes. scrolling
 doesn't propagate out of carousel or card views.   fix for text with image
 Doc - now gets saved to UPDATE_CACHE working  set.

---
 .../views/collections/CollectionCardDeckView.tsx   |   6 ++
 .../views/collections/CollectionCarousel3DView.tsx |   6 ++
 .../views/collections/CollectionCarouselView.tsx   |   6 ++
 src/client/views/nodes/ComparisonBox.tsx           | 114 +++++++++++----------
 .../nodes/formattedText/DashDocCommentView.tsx     |   4 +-
 src/fields/Doc.ts                                  |  13 +++
 src/server/GarbageCollector.ts                     |   3 -
 7 files changed, 95 insertions(+), 57 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/collections/CollectionCardDeckView.tsx b/src/client/views/collections/CollectionCardDeckView.tsx
index 286df30aa..14ce9d2af 100644
--- a/src/client/views/collections/CollectionCardDeckView.tsx
+++ b/src/client/views/collections/CollectionCardDeckView.tsx
@@ -46,6 +46,7 @@ export class CollectionCardView extends CollectionSubView() {
     private _dropDisposer?: DragManager.DragDropDisposer;
     private _disposers: { [key: string]: IReactionDisposer } = {};
     private _textToDoc = new Map<string, Doc>();
+    private _oldWheel: HTMLElement | null = null;
     private _dropped = false; // set when a card doc has just moved and the drop method has been called - prevents the pointerUp method from hiding doc decorations (which needs to be done when clicking on a card to animate it to front/center)
     private _clickScript = () => ScriptField.MakeScript('scriptContext._curDoc=this', { scriptContext: 'any' })!;
 
@@ -66,6 +67,10 @@ export class CollectionCardView extends CollectionSubView() {
         if (ele) {
             this._dropDisposer = DragManager.MakeDropTarget(ele, this.onInternalDrop.bind(this), this.layoutDoc);
         }
+        this._oldWheel?.removeEventListener('wheel', this.onPassiveWheel);
+        this._oldWheel = ele;
+        // prevent wheel events from passively propagating up through containers and prevents containers from preventDefault which would block scrolling
+        ele?.addEventListener('wheel', this.onPassiveWheel, { passive: false });
     };
     /**
      * Callback to ensure gpt's text versions of the child docs are updated
@@ -621,6 +626,7 @@ export class CollectionCardView extends CollectionSubView() {
             );
         });
     }
+    onPassiveWheel = (e: WheelEvent) => e.stopPropagation();
 
     contentScreenToLocalXf = () => this._props.ScreenToLocalTransform().scale(this._props.NativeDimScaling?.() || 1);
     docViewProps = (): DocumentViewProps => ({
diff --git a/src/client/views/collections/CollectionCarousel3DView.tsx b/src/client/views/collections/CollectionCarousel3DView.tsx
index f2ba90c78..05be376ca 100644
--- a/src/client/views/collections/CollectionCarousel3DView.tsx
+++ b/src/client/views/collections/CollectionCarousel3DView.tsx
@@ -22,6 +22,7 @@ const { CAROUSEL3D_CENTER_SCALE, CAROUSEL3D_SIDE_SCALE, CAROUSEL3D_TOP } = requi
 @observer
 export class CollectionCarousel3DView extends CollectionSubView() {
     private _dropDisposer?: DragManager.DragDropDisposer;
+    private _oldWheel: HTMLElement | null = null;
 
     constructor(props: SubCollectionViewProps) {
         super(props);
@@ -37,6 +38,10 @@ export class CollectionCarousel3DView extends CollectionSubView() {
         if (ele) {
             this._dropDisposer = DragManager.MakeDropTarget(ele, this.onInternalDrop.bind(this), this.layoutDoc);
         }
+        this._oldWheel?.removeEventListener('wheel', this.onPassiveWheel);
+        this._oldWheel = ele;
+        // prevent wheel events from passively propagating up through containers and prevents containers from preventDefault which would block scrolling
+        ele?.addEventListener('wheel', this.onPassiveWheel, { passive: false });
     };
 
     @computed get scrollSpeed() {
@@ -194,6 +199,7 @@ export class CollectionCarousel3DView extends CollectionSubView() {
         return this.panelWidth() * (1 - index);
     }
 
+    onPassiveWheel = (e: WheelEvent) => e.stopPropagation();
     curDoc = () => this.carouselItems[NumCast(this.layoutDoc._carousel_index)]?.layout;
     answered = (correct: boolean) => (!correct || !this.curDoc()) && this.changeSlide(1);
     docViewProps = () => ({
diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index aa447c7bf..ef66a2c83 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -17,6 +17,7 @@ import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
 export class CollectionCarouselView extends CollectionSubView() {
     private _dropDisposer?: DragManager.DragDropDisposer;
 
+    _oldWheel: HTMLElement | null = null;
     _fadeTimer: NodeJS.Timeout | undefined;
     @observable _last_index = this.carouselIndex;
     @observable _last_opacity = 1;
@@ -35,6 +36,10 @@ export class CollectionCarouselView extends CollectionSubView() {
         if (ele) {
             this._dropDisposer = DragManager.MakeDropTarget(ele, this.onInternalDrop.bind(this), this.layoutDoc);
         }
+        this._oldWheel?.removeEventListener('wheel', this.onPassiveWheel);
+        this._oldWheel = ele;
+        // prevent wheel events from passively propagating up through containers and prevents containers from preventDefault which would block scrolling
+        ele?.addEventListener('wheel', this.onPassiveWheel, { passive: false });
     };
 
     @computed get captionMarginX(){ return NumCast(this.layoutDoc.caption_xMargin, 50); } // prettier-ignore
@@ -91,6 +96,7 @@ export class CollectionCarouselView extends CollectionSubView() {
               : this._props.childDocumentsActive?.() === false || this.Document.childDocumentsActive === false
                 ? false
                 : undefined;
+    onPassiveWheel = (e: WheelEvent) => e.stopPropagation();
     renderDoc = (doc: Doc, showCaptions: boolean, overlayFunc?: (r: DocumentView | null) => void) => {
         return (
             <DocumentView
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index a57090e99..111fabca3 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -39,6 +39,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     public static LayoutString(fieldKey: string) {
         return FieldView.LayoutString(ComparisonBox, fieldKey);
     }
+    static qtoken = 'Question: ';
+    static ktoken = 'Keyword: ';
+    static atoken = 'Answer: ';
     private SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
     private _closeRef = React.createRef<HTMLDivElement>();
     private _disposers: { [key: string]: DragManager.DragDropDisposer | undefined } = {};
@@ -55,11 +58,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @observable private _childActive = false;
     @observable private _animating = '';
     @observable private _listening = false;
-    @observable private _renderSide = this.fieldKey;
+    @observable private _renderSide = this.frontKey;
     @observable private _recognition = new this.SpeechRecognition();
 
     @computed get isFlashcard()   { return BoolCast(this.Document.layout_isFlashcard); } // prettier-ignore
-    @computed get frontKey()      { return this._props.fieldKey; } // prettier-ignore
+    @computed get frontKey()      { return this._props.fieldKey + '_front'; } // prettier-ignore
     @computed get backKey()       { return this._props.fieldKey + '_back'; } // prettier-ignore
     @computed get revealOpKey()   { return `_${this._props.fieldKey}_revealOp`; } // prettier-ignore
     @computed get clipHeightKey() { return `_${this._props.fieldKey}_clipHeight`; } // prettier-ignore
@@ -124,7 +127,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                 </div>
                             </Tooltip>
                         )}
-                        {DocCast(this.Document.embedContainer)?.type_collection !== CollectionViewType.Freeform ? null : (
+                        {DocCast(this.Document.embedContainer)?.type_collection !== CollectionViewType.Freeform || this._renderSide === this.backKey ? null : (
                             <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
                                 <div className="comparisonBox-button" onClick={this.gptFlashcardPile}>
                                     <FontAwesomeIcon icon="layer-group" size="xl" />
@@ -150,9 +153,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         if (phonTrans) {
             this._inputValue = StrCast(phonTrans);
             this.askGPTPhonemes(this._inputValue);
+            this._renderSide = this.backKey;
+            this._outputValue = '';
         } else if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
-        this._renderSide = this.backKey;
-        this._outputValue = '';
     };
 
     onPointerMove = ({ movementX }: PointerEvent) => {
@@ -444,38 +447,41 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             }),
             text
         );
-    /**
-     * Transfers the content of flashcards into a flashcard pile.
-     */
-    gptFlashcardPile = async () => {
-        this.askGPT(GPTCallType.STACK).then(text => {
-            const [qtoken, ktoken, atoken] = ['Question: ', 'Keyword: ', 'Answer: '];
-            const collectionArr: Doc[] = [];
-            const promises = text
-                .split(qtoken)
+
+    createFlashcard = (tuple: string, useDoc?: Doc) => {
+        const [ktoken, atoken] = [ComparisonBox.ktoken, ComparisonBox.atoken];
+        const newDoc = useDoc ?? Docs.Create.ComparisonDocument('', { _layout_isFlashcard: true, _width: 300, _height: 300 });
+        const question = (tuple.includes(ktoken) ? tuple.split(ktoken)[0] : tuple).split(atoken)[0];
+        const rest = tuple.replace(question, '');
+        // prettier-ignore
+        const answer = rest.startsWith(ktoken) ?     // if keyword comes first, 
+                            tuple.includes(atoken) ? tuple.split(atoken)[1] : "" : //if tuple includes answer, split at answer and take what's left, otherwise there's no answer
+                        rest.includes(ktoken) ?      // otherwise if keyword is present it must come after answer, 
+                            rest.split(ktoken)[0].split(atoken)[1] :  // split at keyword and take what comes first and split that at answer and take what's left
+                            rest.replace(atoken,""); // finally if there's no keyword, just get rid of answer token and take what's left
+        const keyword = rest.replace(atoken, '').replace(answer, '').replace(ktoken, '').trim();
+        const fillInFlashcard = (img?: Doc) => {
+            newDoc[DocData][this.frontKey] = this.textCreator('question', question, img);
+            newDoc[DocData][this.backKey] = this.textCreator('answer', answer);
+            return newDoc;
+        };
+        return keyword && keyword !== 'none' ? this.fetchImages(keyword).then(img => fillInFlashcard(img)) : fillInFlashcard();
+    };
+
+    createFlashcardDeck = (text: string) => {
+        Promise.all(
+            text
+                .split(ComparisonBox.qtoken)
                 .filter(t => t)
-                .map(tuple => {
-                    const newDoc = Docs.Create.ComparisonDocument('', { _layout_isFlashcard: true, _width: 300, _height: 300 });
-                    const question = (tuple.includes(ktoken) ? tuple.split(ktoken)[0] : tuple).split(atoken)[0];
-                    const rest = tuple.replace(question, '');
-                    // prettier-ignore
-                    const answer = rest.startsWith(ktoken) ?     // if keyword comes first, 
-                                        tuple.includes(atoken) ? tuple.split(atoken)[1] : "" : //if tuple includes answer, split at answer and take what's left, otherwise there's no answer
-                                    rest.includes(ktoken) ?      // otherwise if keyword is present it must come after answer, 
-                                        rest.split(ktoken)[0].split(atoken)[1] :  // split at keyword and take what comes first and split that at answer and take what's left
-                                        rest.replace(atoken,""); // finally if there's no keyword, just get rid of answer token and take what's left
-                    const keyword = rest.replace(atoken, '').replace(answer, '').replace(ktoken, '').trim();
-                    const fillInFlashcard = (img?: Doc) => {
-                        newDoc[DocData][this.frontKey] = this.textCreator('question', question, img);
-                        newDoc[DocData][this.backKey] = this.textCreator('answer', answer);
-                        collectionArr.push(newDoc);
-                    };
-                    return keyword && keyword !== 'none' ? this.fetchImages(keyword).then(img => fillInFlashcard(img)) : fillInFlashcard();
-                });
-            Promise.all(promises).then(() => this.createFlashcardPile(collectionArr, true));
-        });
+                .map(tuple => this.createFlashcard(tuple))
+        ).then(docs => this.createFlashcardPile(docs, true));
     };
 
+    /**
+     * queries GPT about a topic and then creates a flashcard deck from the results.
+     */
+    gptFlashcardPile = () => this.askGPT(GPTCallType.STACK).then(this.createFlashcardDeck);
+
     /**
      * Calls GPT for each flashcard type.
      */
@@ -498,7 +504,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             break;
                         case GPTCallType.QUIZ:
                             runInAction(() => {
-                                this._renderSide = this.frontKey;
+                                this._renderSide = this.backKey;
                                 this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
                             });
                             break;
@@ -728,20 +734,24 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         );
 
         if (this.isFlashcard) {
-            const dataSplit = StrCast(this.dataDoc.data).includes('Keyword: ') ? StrCast(this.dataDoc.data).split('Keyword: ') : StrCast(this.dataDoc.data).split('Answer: ');
-
-            // add text box to each side when comparison box is first created
-            if (!this.dataDoc[this.backKey] && !this._isEmpty) {
-                this.dataDoc[this.backKey] = this.textCreator('answer', dataSplit[1]);
+            if (this.dataDoc.data) {
+                if (!this.dataDoc[this.backKey] || !this.dataDoc[this.frontKey]) this.createFlashcard(StrCast(this.dataDoc.data), this.Document);
+            } else {
+                // add text box to each side when comparison box is first created
+                if (!this.dataDoc[this.backKey] && !this._isEmpty) {
+                    const answer = this.textCreator('answer', 'answer here');
+                    this.dataDoc[this.backKey] = answer;
+                    answer[DocData].text_placeholder = true;
+                }
+
+                if (!this.dataDoc[this.frontKey] && !this._isEmpty) {
+                    const question = this.textCreator('question', 'hint: Enter a topic, select this document and click the stack button to have GPT create a deck of cards');
+                    this.dataDoc[this.frontKey] = question;
+                    question[DocData].text_placeholder = true;
+                }
             }
 
-            if (!this.dataDoc[this.frontKey] && !this._isEmpty) {
-                const question = this.textCreator('question', dataSplit[0] || 'hint: Enter a topic, select this document and click the stack button to have GPT create a deck of cards');
-                this.dataDoc[this.frontKey] = question;
-                !dataSplit[0] && (question[DocData].text_placeholder = true);
-            }
-
-            if (DocCast(this.Document.embedContainer).practiceMode === practiceMode.QUIZ) {
+            if (DocCast(this.Document.embedContainer)?.practiceMode === practiceMode.QUIZ) {
                 const text = StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text);
                 return (
                     <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`}>
@@ -749,15 +759,15 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
                         <div className="input-box">
                             <textarea
-                                value={this._renderSide ? this._outputValue : this._inputValue}
+                                value={this._renderSide === this.backKey ? this._outputValue : this._inputValue}
                                 onChange={this.handleInputChange}
                                 onScroll={e => {
                                     e.stopPropagation();
                                     e.preventDefault();
                                 }}
                                 placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
-                                readOnly={this._renderSide === this.frontKey}></textarea>
-
+                                readOnly={this._renderSide === this.backKey}
+                            />
                             {!this.loading ? null : (
                                 <div className="loading-spinner">
                                     <ReactLoading type="spin" height={30} width={30} color={'blue'} />
@@ -778,8 +788,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                                 <button className="submit-buttonpronunciation" onClick={this.evaluatePronunciation}>
                                     Evaluate Pronunciation
                                 </button>
-                                <button className="submit-buttonsubmit" type="button" onClick={this._renderSide === this.frontKey ? this.flipFlashcard : this.handleRenderGPTClick}>
-                                    {this._renderSide === this.frontKey ? 'Redo the Question' : 'Submit'}
+                                <button className="submit-buttonsubmit" type="button" onClick={this._renderSide === this.backKey ? this.flipFlashcard : this.handleRenderGPTClick}>
+                                    {this._renderSide === this.backKey ? 'Redo the Question' : 'Submit'}
                                 </button>
                             </div>
                         </div>
diff --git a/src/client/views/nodes/formattedText/DashDocCommentView.tsx b/src/client/views/nodes/formattedText/DashDocCommentView.tsx
index 0304ddc86..967f4aa5b 100644
--- a/src/client/views/nodes/formattedText/DashDocCommentView.tsx
+++ b/src/client/views/nodes/formattedText/DashDocCommentView.tsx
@@ -68,7 +68,7 @@ export class DashDocCommentViewInternal extends React.Component<IDashDocCommentV
                 expand && this._dashDoc.then(async dashDoc => dashDoc instanceof Doc && Doc.linkFollowHighlight(dashDoc));
                 try {
                     this.props.view.dispatch(this.props.view.state.tr.setSelection(TextSelection.create(this.props.view.state.tr.doc, (this.props.getPos() ?? 0) + (expand ? 2 : 1))));
-                } catch (err) {
+                } catch {
                     /* empty */
                 }
             }, 0);
@@ -95,7 +95,7 @@ export class DashDocCommentViewInternal extends React.Component<IDashDocCommentV
         setTimeout(() => {
             try {
                 this.props.view.dispatch(state.tr.setSelection(TextSelection.create(state.tr.doc, this.props.getPos() + 2)));
-            } catch (err) {
+            } catch {
                 /* empty */
             }
         }, 0);
diff --git a/src/fields/Doc.ts b/src/fields/Doc.ts
index 81241f9fe..45dfe233f 100644
--- a/src/fields/Doc.ts
+++ b/src/fields/Doc.ts
@@ -960,6 +960,19 @@ export namespace Doc {
                         }
                     } else if (field instanceof PrefetchProxy) {
                         Doc.FindReferences(field.value, references, system);
+                    } else if (field instanceof RichTextField) {
+                        const re = /"docId"\s*:\s*"(.*?)"/g;
+                        let match: string[] | null;
+                        while ((match = re.exec(field.Data)) !== null) {
+                            const urlString = match[1];
+                            if (urlString) {
+                                const rdoc = DocServer.GetCachedRefField(urlString);
+                                if (rdoc) {
+                                    references.add(rdoc);
+                                    Doc.FindReferences(rdoc, references, system);
+                                }
+                            }
+                        }
                     }
                 } else if (field instanceof Promise) {
                     // eslint-disable-next-line no-debugger
diff --git a/src/server/GarbageCollector.ts b/src/server/GarbageCollector.ts
index 041f65592..74e8c288a 100644
--- a/src/server/GarbageCollector.ts
+++ b/src/server/GarbageCollector.ts
@@ -1,7 +1,4 @@
 /* eslint-disable no-await-in-loop */
-/* eslint-disable no-continue */
-/* eslint-disable no-cond-assign */
-/* eslint-disable no-restricted-syntax */
 import * as fs from 'fs';
 import * as path from 'path';
 import { Database } from './database';
-- 
cgit v1.2.3-70-g09d2


From d7770e94876540a81bae06d233b6196a91650325 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Fri, 11 Oct 2024 16:20:09 -0400
Subject: added some commenting and code tweaks to ComparisonBox

---
 src/client/views/nodes/ComparisonBox.tsx | 98 +++++++++++++++-----------------
 src/fields/RichTextField.ts              | 23 ++++++++
 2 files changed, 68 insertions(+), 53 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 111fabca3..672008968 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -34,6 +34,22 @@ import { FormattedTextBox } from './formattedText/FormattedTextBox';
 
 const API_URL = 'https://api.unsplash.com/search/photos';
 
+/**
+ * This view serves two distinct functions depending on the metadata field layout_isFlashcard
+ *     1) it provides a before/after animated sliding transition between two Docs
+ *     2) it provides a question/answer switch between two Docs (flashcard)
+ *
+ * In either case, the two docs are stored in the <fieldKey>_front and <fieldKey>_back fields
+ *
+ * In the case of the flashcard, there is an icon that allows the user to choose between a
+ * hover and a flip action to switch between cards.  The transition is stored in the 'revealOp' field.
+ * In addition, if a flashcard is created without data in the front/back fields, this will
+ * create Text documents with placeholder text indicating to the user how to fill in the cards.
+ * One option is to allow the user to enter a topic and, by clicking on the flashcard stack button,
+ * convert the comparision box into a stack of comparison boxes filled in by GPT about the topic.
+ *
+ */
+
 @observer
 export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
     public static LayoutString(fieldKey: string) {
@@ -129,7 +145,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         )}
                         {DocCast(this.Document.embedContainer)?.type_collection !== CollectionViewType.Freeform || this._renderSide === this.backKey ? null : (
                             <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
-                                <div className="comparisonBox-button" onClick={this.gptFlashcardPile}>
+                                <div className="comparisonBox-button" onClick={() => this.askGPT(GPTCallType.STACK).then(this.createFlashcardDeck)}>
                                     <FontAwesomeIcon icon="layer-group" size="xl" />
                                 </div>
                             </Tooltip>
@@ -404,50 +420,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return response.data.transcription;
     };
 
-    createFlashcardPile(collectionArr: Doc[], gpt: boolean) {
-        const newCol = Docs.Create.CarouselDocument(collectionArr, {
-            _width: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 250) + 50,
-            _height: NumCast(this.layoutDoc['_' + this._props.fieldKey + '_width'], 200) + 50,
-            _layout_fitWidth: false,
-            _layout_autoHeight: true,
-            _xMargin: 5,
-            _yMargin: 5,
-            x: NumCast(this.layoutDoc.x),
-            y: NumCast(this.layoutDoc.y) + 50,
-        });
-
-        if (gpt) {
-            this._props.DocumentView?.()._props.addDocument?.(newCol);
-            this._props.removeDocument?.(this.Document);
-        } else {
-            this._props.addDocument?.(newCol);
-            this._props.removeDocument?.(this.Document);
-            Doc.SetContainer(this.Document, newCol);
-        }
-    }
-
-    textToRtf = (text: string, img?: Doc) =>
-        new RichTextField(
-            JSON.stringify({
-                // this is a RichText json that has the question text placed above a related image
-                doc: {
-                    type: 'doc',
-                    content: [
-                        {
-                            type: 'paragraph',
-                            attrs: { align: 'center', color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
-                            content: [
-                                ...(text ? [{ type: 'text', text }] : []), //
-                                ...(img ? [{ type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: img[Id] } }] : []),
-                            ],
-                        },
-                    ],
-                },
-                selection: { type: 'text', anchor: 2, head: 2 },
-            }),
-            text
-        );
-
+    /**
+     * Creates a flashcard (or fills in flashcard data to a specified Doc) from a control string containing a question and answer
+     * @param tuple string containing Question:,  Answer: and optionally a Keyword:
+     * @param useDoc doc to fill in instead of creating a Doc
+     * @returns the resulting flashcard Doc
+     */
     createFlashcard = (tuple: string, useDoc?: Doc) => {
         const [ktoken, atoken] = [ComparisonBox.ktoken, ComparisonBox.atoken];
         const newDoc = useDoc ?? Docs.Create.ComparisonDocument('', { _layout_isFlashcard: true, _width: 300, _height: 300 });
@@ -465,22 +443,36 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             newDoc[DocData][this.backKey] = this.textCreator('answer', answer);
             return newDoc;
         };
-        return keyword && keyword !== 'none' ? this.fetchImages(keyword).then(img => fillInFlashcard(img)) : fillInFlashcard();
+        return keyword && keyword.toLowerCase() !== 'none' ? this.fetchImages(keyword).then(img => fillInFlashcard(img)) : fillInFlashcard();
     };
 
+    /**
+     * Create a carousel of flashcards from a GPT response string where questions and answers are given in a format loosely defined by:
+     * Question: ...  Answer:  ...  Keyword: ...
+     * Note that Keyword or Answer may not be present, or their orders may be reversed.
+     */
     createFlashcardDeck = (text: string) => {
         Promise.all(
             text
                 .split(ComparisonBox.qtoken)
                 .filter(t => t)
                 .map(tuple => this.createFlashcard(tuple))
-        ).then(docs => this.createFlashcardPile(docs, true));
-    };
+        ).then(docs => {
+            const newCol = Docs.Create.CarouselDocument(docs, {
+                _width: NumCast(this.layoutDoc._width, 250) + 50,
+                _height: NumCast(this.layoutDoc._height, 200) + 50,
+                _layout_fitWidth: false,
+                _layout_autoHeight: true,
+                _xMargin: 5,
+                _yMargin: 5,
+                x: NumCast(this.layoutDoc.x),
+                y: NumCast(this.layoutDoc.y),
+            });
 
-    /**
-     * queries GPT about a topic and then creates a flashcard deck from the results.
-     */
-    gptFlashcardPile = () => this.askGPT(GPTCallType.STACK).then(this.createFlashcardDeck);
+            this._props.DocumentView?.()._props.addDocument?.(newCol);
+            this._props.removeDocument?.(this.Document);
+        });
+    };
 
     /**
      * Calls GPT for each flashcard type.
@@ -658,7 +650,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return layoutTemplateString;
     };
     textCreator = (title: string, text: string, img?: Doc) => {
-        const newDoc = Docs.Create.TextDocument(this.textToRtf(text, img), {
+        const newDoc = Docs.Create.TextDocument(RichTextField.textToRtf(text, img?.[Id]), {
             title, //
             _layout_autoHeight: true,
             _layout_centered: true,
diff --git a/src/fields/RichTextField.ts b/src/fields/RichTextField.ts
index 613bb0fd1..dc636031a 100644
--- a/src/fields/RichTextField.ts
+++ b/src/fields/RichTextField.ts
@@ -48,4 +48,27 @@ export class RichTextField extends ObjectField {
             ''
         );
     }
+
+    public static textToRtf(text: string, imgDocId?: string) {
+        return new RichTextField(
+            JSON.stringify({
+                // this is a RichText json that has the question text placed above a related image
+                doc: {
+                    type: 'doc',
+                    content: [
+                        {
+                            type: 'paragraph',
+                            attrs: { align: 'center', color: null, id: null, indent: null, inset: null, lineSpacing: null, paddingBottom: null, paddingTop: null },
+                            content: [
+                                ...(text ? [{ type: 'text', text }] : []), //
+                                ...(imgDocId ? [{ type: 'dashDoc', attrs: { width: '200px', height: '200px', title: 'dashDoc', float: 'unset', hidden: false, docId: imgDocId } }] : []),
+                            ],
+                        },
+                    ],
+                },
+                selection: { type: 'text', anchor: 2, head: 2 },
+            }),
+            text
+        );
+    }
 }
-- 
cgit v1.2.3-70-g09d2


From bb8fe2933154c6db70cfe5da1e890535bc9012d4 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Fri, 11 Oct 2024 20:21:33 -0400
Subject: fixed verticalalign of text boxes on load when existing text was
 there.  fixe scrolling of vertical align textboxes when fitwidth is set. 
 added flashcard contextmenu to comparisonbox and

---
 src/client/views/StyleProvider.tsx                 |   3 +-
 src/client/views/nodes/ComparisonBox.tsx           | 217 ++++++++++-----------
 src/client/views/nodes/DocumentView.tsx            |  21 +-
 .../views/nodes/formattedText/FormattedTextBox.tsx |  18 +-
 4 files changed, 115 insertions(+), 144 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/StyleProvider.tsx b/src/client/views/StyleProvider.tsx
index 02e0a34d8..8859f6464 100644
--- a/src/client/views/StyleProvider.tsx
+++ b/src/client/views/StyleProvider.tsx
@@ -54,7 +54,6 @@ export function styleFromLayoutString(doc: Doc, props: FieldViewProps, scale: nu
 }
 
 export function border(doc: Doc, pw: number, ph: number, rad: number = 0, inset: number = 0) {
-    if (!rad) rad = 0;
     const width = pw * inset;
     const height = ph * inset;
 
@@ -218,7 +217,7 @@ export function DefaultStyleProvider(doc: Opt<Doc>, props: Opt<FieldViewProps &
             const radiusRatio = borderRadius / docWidth;
             const radius = radiusRatio * ((2 * borderWidth) + docWidth);
 
-            const borderPath = doc && border(doc, NumCast(doc._width), NumCast(doc._height), radius, -ratio/2 ?? 0);
+            const borderPath = doc && border(doc, NumCast(doc._width), NumCast(doc._height), radius, -ratio/2);
                 return !borderPath
                     ? null
                     : {
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 672008968..0582bc996 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -15,7 +15,7 @@ import { BoolCast, DocCast, NumCast, RTFCast, StrCast, toList } from '../../../f
 import { nullAudio } from '../../../fields/URLField';
 import { GPTCallType, gptAPICall, gptImageLabel } from '../../apis/gpt/GPT';
 import { DocUtils, FollowLinkScript } from '../../documents/DocUtils';
-import { CollectionViewType, DocumentType } from '../../documents/DocumentTypes';
+import { DocumentType } from '../../documents/DocumentTypes';
 import { Docs } from '../../documents/Documents';
 import { DragManager } from '../../util/DragManager';
 import { dropActionType } from '../../util/DropActionTypes';
@@ -31,6 +31,7 @@ import './ComparisonBox.scss';
 import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FormattedTextBox } from './formattedText/FormattedTextBox';
+import { CollectionFreeFormView } from '../collections/collectionFreeForm';
 
 const API_URL = 'https://api.unsplash.com/search/photos';
 
@@ -55,17 +56,16 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     public static LayoutString(fieldKey: string) {
         return FieldView.LayoutString(ComparisonBox, fieldKey);
     }
+    private SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+
     static qtoken = 'Question: ';
     static ktoken = 'Keyword: ';
     static atoken = 'Answer: ';
-    private SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+    private _slideTiming = 200;
+    private _sideBtnWidth = 35;
     private _closeRef = React.createRef<HTMLDivElement>();
     private _disposers: { [key: string]: DragManager.DragDropDisposer | undefined } = {};
     private _reactDisposer: IReactionDisposer | undefined;
-    constructor(props: FieldViewProps) {
-        super(props);
-        makeObservable(this);
-    }
 
     @observable private _inputValue = '';
     @observable private _outputValue = '';
@@ -77,6 +77,47 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @observable private _renderSide = this.frontKey;
     @observable private _recognition = new this.SpeechRecognition();
 
+    constructor(props: FieldViewProps) {
+        super(props);
+        makeObservable(this);
+    }
+
+    componentDidMount() {
+        this._props.setContentViewBox?.(this);
+        this._reactDisposer = reaction(
+            () => this._props.isSelected(), // when this reaction should update
+            selected => {
+                if (selected && this.isFlashcard) this.activateContent();
+                !selected && (this._childActive = false);
+            }, // what it should update to
+            { fireImmediately: true }
+        );
+    }
+
+    componentWillUnmount() {
+        this._reactDisposer?.();
+    }
+
+    protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string) => {
+        this._disposers[fieldKey]?.();
+        if (ele) {
+            this._disposers[fieldKey] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
+        }
+    };
+
+    private internalDrop = undoable((e: Event, dropEvent: DragManager.DropEvent, fieldKey: string) => {
+        if (dropEvent.complete.docDragData) {
+            const { droppedDocuments } = dropEvent.complete.docDragData;
+            const added = dropEvent.complete.docDragData.moveDocument?.(droppedDocuments, this.Document, (doc: Doc | Doc[]) => this.addDoc(toList(doc).lastElement(), fieldKey));
+            Doc.SetContainer(droppedDocuments.lastElement(), this.dataDoc);
+            !added && e.preventDefault();
+            e.stopPropagation(); // prevent parent Doc from registering new position so that it snaps back into place
+            // this.childActive = false;
+            return added;
+        }
+        return undefined;
+    }, 'internal drop');
+
     @computed get isFlashcard()   { return BoolCast(this.Document.layout_isFlashcard); } // prettier-ignore
     @computed get frontKey()      { return this._props.fieldKey + '_front'; } // prettier-ignore
     @computed get backKey()       { return this._props.fieldKey + '_back'; } // prettier-ignore
@@ -112,8 +153,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             </Tooltip>
         );
     }
-
-    _sideBtnWidth = 35;
     /**
      * How much the content of the view is being scaled based on its nesting and its fit-to-width settings
      */
@@ -131,35 +170,24 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return SnappingManager.HideDecorations ? null : (
             <div className="comparisonBox-bottomMenu" style={{ transform: `scale(${this.uiBtnScaling})` }}>
                 {this.revealOp === flashcardRevealOp.HOVER || !this._props.isSelected() ? null : this.overlayAlternateIcon}
-                {!this._props.isSelected() ? null : (
-                    <>
-                        {this._renderSide === this.frontKey ? null : (
-                            <Tooltip
-                                title={
-                                    <div className="dash-tooltip">Ask GPT to create an answer for the question on the front</div> // prettier-ignore
-                                }>
-                                <div className="comparisonBox-button" onPointerDown={() => this.askGPT(GPTCallType.CHATCARD)}>
-                                    <FontAwesomeIcon icon="lightbulb" size="xl" />
-                                </div>
-                            </Tooltip>
-                        )}
-                        {DocCast(this.Document.embedContainer)?.type_collection !== CollectionViewType.Freeform || this._renderSide === this.backKey ? null : (
-                            <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
-                                <div className="comparisonBox-button" onClick={() => this.askGPT(GPTCallType.STACK).then(this.createFlashcardDeck)}>
-                                    <FontAwesomeIcon icon="layer-group" size="xl" />
-                                </div>
-                            </Tooltip>
-                        )}
-                    </>
+                {!this._props.isSelected() || this._renderSide === this.frontKey ? null : (
+                    <Tooltip title={<div className="dash-tooltip">Ask GPT to create an answer for the question on the front</div>}>
+                        <div className="comparisonBox-button" onPointerDown={() => this.askGPT(GPTCallType.CHATCARD)}>
+                            <FontAwesomeIcon icon="lightbulb" size="xl" />
+                        </div>
+                    </Tooltip>
+                )}
+                {!this._props.isSelected() || this._renderSide === this.backKey || CollectionFreeFormView.from(this.DocumentView?.()) ? null : (
+                    <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
+                        <div className="comparisonBox-button" onClick={() => this.askGPT(GPTCallType.STACK).then(this.createFlashcardDeck)}>
+                            <FontAwesomeIcon icon="layer-group" size="xl" />
+                        </div>
+                    </Tooltip>
                 )}
             </div>
         );
     }
 
-    @action handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
-        this._inputValue = e.target.value;
-    };
-
     @action activateContent = () => {
         this._childActive = true;
     };
@@ -182,42 +210,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return false;
     };
 
-    componentDidMount() {
-        this._props.setContentViewBox?.(this);
-        this._reactDisposer = reaction(
-            () => this._props.isSelected(), // when this reaction should update
-            selected => {
-                if (selected && this.isFlashcard) this.activateContent();
-                !selected && (this._childActive = false);
-            }, // what it should update to
-            { fireImmediately: true }
-        );
-    }
-
-    componentWillUnmount() {
-        this._reactDisposer?.();
-    }
-
-    protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string) => {
-        this._disposers[fieldKey]?.();
-        if (ele) {
-            this._disposers[fieldKey] = DragManager.MakeDropTarget(ele, (e, dropEvent) => this.internalDrop(e, dropEvent, fieldKey), this.layoutDoc);
-        }
-    };
-
-    private internalDrop = undoable((e: Event, dropEvent: DragManager.DropEvent, fieldKey: string) => {
-        if (dropEvent.complete.docDragData) {
-            const { droppedDocuments } = dropEvent.complete.docDragData;
-            const added = dropEvent.complete.docDragData.moveDocument?.(droppedDocuments, this.Document, (doc: Doc | Doc[]) => this.addDoc(toList(doc).lastElement(), fieldKey));
-            Doc.SetContainer(droppedDocuments.lastElement(), this.dataDoc);
-            !added && e.preventDefault();
-            e.stopPropagation(); // prevent parent Doc from registering new position so that it snaps back into place
-            // this.childActive = false;
-            return added;
-        }
-        return undefined;
-    }, 'internal drop');
-
     getAnchor = (addAsAnnotation: boolean, pinProps?: PinProps) => {
         const anchor = Docs.Create.ConfigDocument({
             title: 'CompareAnchor:' + this.Document.title,
@@ -296,17 +288,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 false,
                 undefined,
                 action(() => {
-                    if (this._childActive) return;
-                    this._animating = 'all 200ms';
-                    // on click, animate slider movement to the targetWidth
-                    this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
-
-                    setTimeout(
-                        action(() => {
-                            this._animating = '';
-                        }),
-                        200
-                    );
+                    if (!this._childActive) {
+                        this._animating = `all ${this._slideTiming}ms`; // on click, animate slider movement to the targetWidth
+                        this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
+                        setTimeout(  action(() => {this._animating = '';  }), this._slideTiming); // prettier-ignore
+                    }
                 })
             );
         }
@@ -381,17 +367,16 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * Gets the transcription of an audio recording by sending the
      * recording to backend.
      */
-    pushInfo = async () => {
-        const audio = {
-            file: DocCast(this.Document.audio)[DocData].url,
-        };
-        const response = await axios.post('http://localhost:105/recognize/', audio, {
-            headers: {
-                'Content-Type': 'application/json',
-            },
-        });
-        this.Document.phoneticTranscription = response.data.transcription;
-    };
+    pushInfo = () =>
+        axios
+            .post(
+                'http://localhost:105/recognize/', //
+                { file: DocCast(this.Document.audio)[DocData].url },
+                { headers: { 'Content-Type': 'application/json' } }
+            )
+            .then(response => {
+                this.Document.phoneticTranscription = response.data.transcription;
+            });
 
     /**
      * Extracts the id of the youtube video url.
@@ -408,17 +393,14 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * Gets the transcript of a youtube video by sending the video url to the backend.
      * @returns transcription of youtube recording
      */
-    youtubeUpload = async () => {
-        const audio = {
-            file: this.getYouTubeVideoId(StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text)),
-        };
-        const response = await axios.post('http://localhost:105/youtube/', audio, {
-            headers: {
-                'Content-Type': 'application/json',
-            },
-        });
-        return response.data.transcription;
-    };
+    youtubeUpload = async () =>
+        axios
+            .post(
+                'http://localhost:105/youtube/', //
+                { file: this.getYouTubeVideoId(StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text)) },
+                { headers: { 'Content-Type': 'application/json' } }
+            )
+            .then(response => response.data.transcription);
 
     /**
      * Creates a flashcard (or fills in flashcard data to a specified Doc) from a control string containing a question and answer
@@ -478,15 +460,16 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * Calls GPT for each flashcard type.
      */
     askGPT = async (callType: GPTCallType) => {
-        const questionText = 'Question: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text);
-        const rubricText = ' Rubric: ' + StrCast(RTFCast(DocCast(this.dataDoc[this.backKey]).text)?.Text);
-        const queryText = questionText + ' UserAnswer: ' + this._inputValue + '. ' + rubricText;
+        const frontText = RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text;
+        const backText = RTFCast(DocCast(this.dataDoc[this.backKey]).text)?.Text;
+        const questionText = 'Question: ' + frontText;
+        const queryText = questionText + (callType == GPTCallType.QUIZ ? ' UserAnswer: ' + this._inputValue + '. ' + ' Rubric: ' + backText : '');
         this.loading = true;
         let res = '';
 
-        if (callType !== GPTCallType.CHATCARD || StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text) !== '') {
+        if (callType !== GPTCallType.CHATCARD || frontText) {
             try {
-                res = await gptAPICall(callType == GPTCallType.QUIZ ? queryText : questionText, callType);
+                res = await gptAPICall(queryText, callType);
                 if (!res) {
                     console.error('GPT call failed');
                 } else
@@ -624,6 +607,15 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         if (this.revealOp === flashcardRevealOp.HOVER) this._renderSide = side;
     };
 
+    flashcardContextMenu = () => {
+        const appearance = ContextMenu.Instance.findByDescription('Appearance...');
+        const appearanceItems = appearance?.subitems ?? [];
+        if (this.Document._layout_isFlashcard) {
+            appearanceItems.push({ description: 'Create ChatCard', event: () => this.askGPT(GPTCallType.CHATCARD), icon: 'id-card' });
+        }
+        !appearance && ContextMenu.Instance.addItem({ description: 'Appearance...', subitems: appearanceItems, icon: 'eye' });
+    };
+
     testForTextFields = (whichSlot: string) => {
         const slotData = Doc.Get(this.dataDoc, whichSlot, true);
         const slotHasText = slotData instanceof RichTextField || typeof slotData === 'string';
@@ -752,17 +744,15 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         <div className="input-box">
                             <textarea
                                 value={this._renderSide === this.backKey ? this._outputValue : this._inputValue}
-                                onChange={this.handleInputChange}
-                                onScroll={e => {
-                                    e.stopPropagation();
-                                    e.preventDefault();
-                                }}
+                                onChange={action(e => {
+                                    this._inputValue = e.target.value;
+                                })}
                                 placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
                                 readOnly={this._renderSide === this.backKey}
                             />
                             {!this.loading ? null : (
                                 <div className="loading-spinner">
-                                    <ReactLoading type="spin" height={30} width={30} color={'blue'} />
+                                    <ReactLoading type="spin" height={30} width={30} color='blue' />
                                 </div>
                             )}
                         </div>
@@ -793,12 +783,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             return (
                 <div
                     className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
+                    onContextMenu={this.flashcardContextMenu}
                     onMouseEnter={() => this.hoverFlip(this.backKey)}
                     onMouseLeave={() => this.hoverFlip(this.frontKey)}>
                     {displayBox(this._renderSide, this._props.PanelWidth() - 3)}
                     {this.loading ? (
                         <div className="loading-spinner">
-                            <ReactLoading type="spin" height={30} width={30} color={'blue'} />
+                            <ReactLoading type="spin" height={30} width={30} color="blue" />
                         </div>
                     ) : null}
                     {this.flashcardMenu}
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index c052a2823..a343b9a39 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -16,12 +16,11 @@ import { List } from '../../../fields/List';
 import { PrefetchProxy } from '../../../fields/Proxy';
 import { listSpec } from '../../../fields/Schema';
 import { ScriptField } from '../../../fields/ScriptField';
-import { BoolCast, Cast, DocCast, ImageCast, NumCast, RTFCast, ScriptCast, StrCast } from '../../../fields/Types';
+import { BoolCast, Cast, DocCast, ImageCast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
 import { AudioField } from '../../../fields/URLField';
 import { GetEffectiveAcl, TraceMobx } from '../../../fields/util';
 import { AudioAnnoState } from '../../../server/SharedMediaTypes';
 import { DocServer } from '../../DocServer';
-import { GPTCallType, gptAPICall } from '../../apis/gpt/GPT';
 import { DocUtils, FollowLinkScript } from '../../documents/DocUtils';
 import { CollectionViewType, DocumentType } from '../../documents/DocumentTypes';
 import { Docs } from '../../documents/Documents';
@@ -492,21 +491,6 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
         input.click();
     };
 
-    askGPT = async (): Promise<string | undefined> => {
-        const queryText = RTFCast(DocCast(this.dataDoc[this.props.fieldKey + '_1']).text)?.Text;
-        try {
-            const res = await gptAPICall('Question: ' + StrCast(queryText), GPTCallType.CHATCARD);
-            if (!res) {
-                console.error('GPT call failed');
-                return;
-            }
-            DocCast(this.dataDoc[this.props.fieldKey + '_0'])[DocData].text = res;
-            console.log(res);
-        } catch (err) {
-            console.error('GPT call failed', err);
-        }
-    };
-
     onContextMenu = (e?: React.MouseEvent, pageX?: number, pageY?: number) => {
         if (this._props.dontSelect?.()) return;
         if (e && this.layoutDoc.layout_hideContextMenu && Doc.noviceMode) {
@@ -569,9 +553,6 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
                 appearanceItems.splice(0, 0, { description: 'Open in Lightbox', event: () => DocumentView.SetLightboxDoc(this.Document), icon: 'external-link-alt' });
             }
             appearanceItems.push({ description: 'Pin', event: () => this._props.pinToPres(this.Document, {}), icon: 'map-pin' });
-            if (this.Document._layout_isFlashcard) {
-                appearanceItems.push({ description: 'Create ChatCard', event: () => this.askGPT(), icon: 'id-card' });
-            }
 
             !Doc.noviceMode && templateDoc && appearanceItems.push({ description: 'Open Template   ', event: () => this._props.addDocTab(templateDoc, OpenWhere.addRight), icon: 'eye' });
             !appearance && appearanceItems.length && cm.addItem({ description: 'Appearance...', subitems: appearanceItems, icon: 'compass' });
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 36f06aaf2..29be8d285 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -1515,20 +1515,20 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
                 clipboardTextSerializer: this.clipboardTextSerializer,
                 handlePaste: this.handlePaste,
             });
-            const { state, dispatch } = this._editorView;
+            const { state } = this._editorView;
             if (!rtfField) {
                 const dataDoc = Doc.IsDelegateField(DocCast(this.layoutDoc.proto), this.fieldKey) ? DocCast(this.layoutDoc.proto) : this.dataDoc;
                 const startupText = Field.toString(dataDoc[fieldKey] as FieldType);
-                if (startupText) {
-                    dispatch(state.tr.insertText(startupText));
-                }
-                const textAlign = StrCast(this.dataDoc.text_align, StrCast(Doc.UserDoc().textAlign, 'left'));
-                if (textAlign && textAlign !== 'left') {
+                const textAlign = StrCast(this.dataDoc.text_align, StrCast(Doc.UserDoc().textAlign)) || 'left';
+                if (textAlign !== 'left') {
                     selectAll(this._editorView.state, tr => {
-                        this._editorView!.dispatch(tr.replaceSelectionWith(state.schema.nodes.paragraph.create({ align: textAlign })));
+                        this._editorView?.dispatch(tr.replaceSelectionWith(state.schema.nodes.paragraph.create({ align: textAlign })));
                     });
-                    this.tryUpdateDoc(true);
                 }
+                if (startupText) {
+                    this._editorView?.dispatch(this._editorView.state.tr.insertText(startupText));
+                }
+                this.tryUpdateDoc(true);
             }
             this._editorView.TextView = this;
         }
@@ -2147,7 +2147,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
                         onScroll={this.onScroll}
                         onDrop={this.ondrop}>
                         <div
-                            className={`formattedTextBox-inner${rounded} ${this.layoutDoc._layout_centered && this.scrollHeight < NumCast(this.layoutDoc._height) ? 'centered' : ''} ${this.layoutDoc.hCentering}`}
+                            className={`formattedTextBox-inner${rounded} ${this.layoutDoc._layout_centered && this.scrollHeight <= (this._props.fitWidth?.(this.Document) ? this._props.PanelHeight() : NumCast(this.layoutDoc._height)) ? 'centered' : ''} ${this.layoutDoc.hCentering}`}
                             ref={this.createDropTarget}
                             style={{
                                 padding: StrCast(this.layoutDoc._textBoxPadding),
-- 
cgit v1.2.3-70-g09d2


From 737efc3e6cada537536c7bc5e46f5b57970da276 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Fri, 11 Oct 2024 22:01:50 -0400
Subject: Lots of cleanup in comparisonBox to get rid of duplicated code and
 siimplify long functions.  Utility functions were added to ComparisonBox to
 simplify menu functions, and to FormattedTextBox to simplify creating
 centered text views.

---
 src/client/apis/gpt/GPT.ts                         |   8 +-
 src/client/documents/Documents.ts                  |   1 +
 src/client/views/nodes/ComparisonBox.tsx           | 526 ++++++++++-----------
 .../views/nodes/formattedText/FormattedTextBox.tsx |  20 +
 src/client/views/pdf/AnchorMenu.tsx                |  34 +-
 src/fields/util.ts                                 |   1 -
 6 files changed, 287 insertions(+), 303 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index 66c49abc7..8a2c91269 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -5,8 +5,8 @@ enum GPTCallType {
     SUMMARY = 'summary',
     COMPLETION = 'completion',
     EDIT = 'edit',
-    CHATCARD = 'chatcard',
-    FLASHCARD = 'flashcard',
+    CHATCARD = 'chatcard', // a single flashcard style response to a question
+    FLASHCARD = 'flashcard', // a set of flashcard qustion/answer responses to a topic
     QUIZ = 'quiz',
     SORT = 'sort',
     DESCRIBE = 'describe',
@@ -38,7 +38,6 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
     // newest model: gpt-4
     summary: { model: 'gpt-4-turbo', maxTokens: 256, temp: 0.5, prompt: 'Summarize the text given in simpler terms.' },
     edit: { model: 'gpt-4-turbo', maxTokens: 256, temp: 0.5, prompt: 'Reword the text.' },
-    flashcard: { model: 'gpt-4-turbo', maxTokens: 512, temp: 0.5, prompt: 'Make flashcards out of this text with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ' },
     stack: {
         model: 'gpt-4o',
         maxTokens: 2048,
@@ -66,6 +65,7 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
         prompt: "The user is going to give you a list of descriptions. Each one is separated by `======` on either side. Descriptions will vary in length, so make sure to only separate when you see `======`. Sort them by the user's specifications. Make sure each description is only in the list once. Each item should be separated by `======`. Immediately afterward, surrounded by `------` on BOTH SIDES, provide some insight into your reasoning for the way you sorted (and mention nothing about the formatting details given in this description). It is VERY important that you format it exactly as described, ensuring the proper number of `=` and `-` (6 of each) and NO commas",
     },
     describe: { model: 'gpt-4-vision-preview', maxTokens: 2048, temp: 0, prompt: 'Describe these images in 3-5 words' },
+    flashcard: { model: 'gpt-4-turbo', maxTokens: 512, temp: 0.5, prompt: 'Make flashcards out of this text with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ' },
     chatcard: { model: 'gpt-4-turbo', maxTokens: 512, temp: 0.5, prompt: 'Answer the following question as a short flashcard response. Do not include a label.' },
     quiz: {
         model: 'gpt-4-turbo',
@@ -127,7 +127,7 @@ let lastResp = '';
  */
 const gptAPICall = async (inputTextIn: string, callType: GPTCallType, prompt?: string, dontCache?: boolean) => {
     const inputText = [GPTCallType.SUMMARY, GPTCallType.FLASHCARD, GPTCallType.QUIZ, GPTCallType.STACK].includes(callType) ? inputTextIn + '.' : inputTextIn;
-    const opts: GPTCallOpts = callTypeMap[callType];
+    const opts = callTypeMap[callType];
     if (lastCall === inputText && dontCache !== true) return lastResp;
     try {
         lastCall = inputText;
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index 0d7e0b20e..f71b9f879 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -305,6 +305,7 @@ export class DocumentOptions {
     _text_fontFamily?: string;
     _text_fontWeight?: string;
     text_align?: STRt = new StrInfo('horizontal text alignment default');
+    text_placeholder?: BOOLt = new BoolInfo('makes the text act like a placeholder and automatically select when the text box is selected');
     fontSize?: string;
     _pivotField?: string; // field key used to determine headings for sections in stacking, masonry, pivot views
 
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 0582bc996..80ef126dc 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -9,7 +9,6 @@ import { imageUrlToBase64, returnFalse, returnNone, returnTrue, returnZero, setu
 import { emptyFunction } from '../../../Utils';
 import { Doc, Opt } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
-import { Id } from '../../../fields/FieldSymbols';
 import { RichTextField } from '../../../fields/RichTextField';
 import { BoolCast, DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
 import { nullAudio } from '../../../fields/URLField';
@@ -26,21 +25,22 @@ import { ViewBoxAnnotatableComponent } from '../DocComponent';
 import { PinDocView, PinProps } from '../PinFuncs';
 import { StyleProp } from '../StyleProp';
 import { flashcardRevealOp, practiceMode } from '../collections/FlashcardPracticeUI';
+import { CollectionFreeFormView } from '../collections/collectionFreeForm';
 import '../pdf/GPTPopup/GPTPopup.scss';
 import './ComparisonBox.scss';
 import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FormattedTextBox } from './formattedText/FormattedTextBox';
-import { CollectionFreeFormView } from '../collections/collectionFreeForm';
 
 const API_URL = 'https://api.unsplash.com/search/photos';
 
 /**
- * This view serves two distinct functions depending on the metadata field layout_isFlashcard
+ * This view serves three distinct functions depending on the metadata field layout_isFlashcard
  *     1) it provides a before/after animated sliding transition between two Docs
  *     2) it provides a question/answer switch between two Docs (flashcard)
+ *     3) it provides a quiz view that displays a question and a user answer that can be "scored" by GPT
  *
- * In either case, the two docs are stored in the <fieldKey>_front and <fieldKey>_back fields
+ * In each case, the two docs are stored in the <fieldKey>_front and <fieldKey>_back fields
  *
  * In the case of the flashcard, there is an icon that allows the user to choose between a
  * hover and a flip action to switch between cards.  The transition is stored in the 'revealOp' field.
@@ -49,6 +49,9 @@ const API_URL = 'https://api.unsplash.com/search/photos';
  * One option is to allow the user to enter a topic and, by clicking on the flashcard stack button,
  * convert the comparision box into a stack of comparison boxes filled in by GPT about the topic.
  *
+ * Quiz mode is activated when the parent collection has its 'quiz' field set when it renders a flashcard.
+ * NOTE: this should probably be changed to passing down a prop to the flashcard telling it to render as a quiz.
+ *
  */
 
 @observer
@@ -56,6 +59,54 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     public static LayoutString(fieldKey: string) {
         return FieldView.LayoutString(ComparisonBox, fieldKey);
     }
+    /**
+     * Creates a flashcard (or fills in flashcard data to a specified Doc) from a control string containing a question and answer
+     * @param tuple string containing Question:,  Answer: and optionally a Keyword:
+     * @param useDoc doc to fill in instead of creating a Doc
+     * @returns the resulting flashcard Doc
+     */
+    public static createFlashcard(tuple: string, frontKey: string, backKey: string, useDoc?: Doc) {
+        const [ktoken, atoken] = [ComparisonBox.ktoken, ComparisonBox.atoken];
+        const newDoc = useDoc ?? Docs.Create.ComparisonDocument('', { _layout_isFlashcard: true, _width: 300, _height: 300 });
+        const question = (tuple.includes(ktoken) ? tuple.split(ktoken)[0] : tuple).split(atoken)[0];
+        const rest = tuple.replace(question, '');
+        // prettier-ignore
+        const answer = rest.startsWith(ktoken) ?     // if keyword comes first, 
+                            tuple.includes(atoken) ? tuple.split(atoken)[1] : "" : //if tuple includes answer, split at answer and take what's left, otherwise there's no answer
+                        rest.includes(ktoken) ?      // otherwise if keyword is present it must come after answer, 
+                            rest.split(ktoken)[0].split(atoken)[1] :  // split at keyword and take what comes first and split that at answer and take what's left
+                            rest.replace(atoken,""); // finally if there's no keyword, just get rid of answer token and take what's left
+        const keyword = rest.replace(atoken, '').replace(answer, '').replace(ktoken, '').trim();
+        const fillInFlashcard = (img?: Doc) => {
+            newDoc[DocData][frontKey] = FormattedTextBox.centeredTextCreator('question', question, img);
+            newDoc[DocData][backKey] = FormattedTextBox.centeredTextCreator('answer', answer);
+            return newDoc;
+        };
+        return keyword && keyword.toLowerCase() !== 'none' ? ComparisonBox.fetchImages(keyword).then(img => fillInFlashcard(img)) : fillInFlashcard();
+    }
+
+    /**
+     * Create a carousel of flashcards from a GPT response string where questions and answers are given in a format loosely defined by:
+     * Question: ...  Answer:  ...  Keyword: ...
+     * Note that Keyword or Answer may not be present, or their orders may be reversed.
+     */
+    public static createFlashcardDeck(text: string, width: number, height: number, front: string, back: string) {
+        return Promise.all(
+            text
+                .split(ComparisonBox.qtoken)
+                .filter(t => t)
+                .map(tuple => ComparisonBox.createFlashcard(tuple, front, back))
+        ).then(docs => {
+            return Docs.Create.CarouselDocument(docs, {
+                _width: width,
+                _height: height,
+                _layout_fitWidth: false,
+                _layout_autoHeight: true,
+                _xMargin: 5,
+                _yMargin: 5,
+            });
+        });
+    }
     private SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
 
     static qtoken = 'Question: ';
@@ -118,9 +169,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return undefined;
     }, 'internal drop');
 
+    @computed get isQuizMode()    { return DocCast(this.Document.embedContainer)?.practiceMode === practiceMode.QUIZ; } // prettier-ignore
     @computed get isFlashcard()   { return BoolCast(this.Document.layout_isFlashcard); } // prettier-ignore
     @computed get frontKey()      { return this._props.fieldKey + '_front'; } // prettier-ignore
     @computed get backKey()       { return this._props.fieldKey + '_back'; } // prettier-ignore
+    @computed get frontText()     { return RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text; } // prettier-ignore
+    @computed get backText()      { return RTFCast(DocCast(this.dataDoc[this.backKey]).text)?.Text; } // prettier-ignore
     @computed get revealOpKey()   { return `_${this._props.fieldKey}_revealOp`; } // prettier-ignore
     @computed get clipHeightKey() { return `_${this._props.fieldKey}_clipHeight`; } // prettier-ignore
     @computed get clipWidthKey()  { return `_${this._props.fieldKey}_clipWidth`;  } // prettier-ignore
@@ -177,9 +231,19 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                         </div>
                     </Tooltip>
                 )}
-                {!this._props.isSelected() || this._renderSide === this.backKey || CollectionFreeFormView.from(this.DocumentView?.()) ? null : (
+                {!this._props.isSelected() || this._renderSide === this.backKey || !CollectionFreeFormView.from(this.DocumentView?.()) || (this.dataDoc[this.backKey] && !DocCast(this.dataDoc[this.backKey])?.text_placeholder) ? null : (
                     <Tooltip title={<div className="dash-tooltip">Create new flashcard stack based on text</div>}>
-                        <div className="comparisonBox-button" onClick={() => this.askGPT(GPTCallType.STACK).then(this.createFlashcardDeck)}>
+                        <div
+                            className="comparisonBox-button"
+                            onClick={() =>
+                                this.askGPT(GPTCallType.STACK).then(async text => {
+                                    const newCol = await ComparisonBox.createFlashcardDeck(text, NumCast(this.layoutDoc._width, 250) + 50, NumCast(this.layoutDoc._height, 200), this.frontKey, this.backKey);
+                                    newCol.x = NumCast(this.layoutDoc.x);
+                                    newCol.y = NumCast(this.layoutDoc.y);
+                                    this._props.DocumentView?.()._props.addDocument?.(newCol);
+                                    this._props.removeDocument?.(this.Document);
+                                })
+                            }>
                             <FontAwesomeIcon icon="layer-group" size="xl" />
                         </div>
                     </Tooltip>
@@ -397,124 +461,51 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         axios
             .post(
                 'http://localhost:105/youtube/', //
-                { file: this.getYouTubeVideoId(StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text)) },
+                { file: this.getYouTubeVideoId(this.frontText) },
                 { headers: { 'Content-Type': 'application/json' } }
             )
             .then(response => response.data.transcription);
 
-    /**
-     * Creates a flashcard (or fills in flashcard data to a specified Doc) from a control string containing a question and answer
-     * @param tuple string containing Question:,  Answer: and optionally a Keyword:
-     * @param useDoc doc to fill in instead of creating a Doc
-     * @returns the resulting flashcard Doc
-     */
-    createFlashcard = (tuple: string, useDoc?: Doc) => {
-        const [ktoken, atoken] = [ComparisonBox.ktoken, ComparisonBox.atoken];
-        const newDoc = useDoc ?? Docs.Create.ComparisonDocument('', { _layout_isFlashcard: true, _width: 300, _height: 300 });
-        const question = (tuple.includes(ktoken) ? tuple.split(ktoken)[0] : tuple).split(atoken)[0];
-        const rest = tuple.replace(question, '');
-        // prettier-ignore
-        const answer = rest.startsWith(ktoken) ?     // if keyword comes first, 
-                            tuple.includes(atoken) ? tuple.split(atoken)[1] : "" : //if tuple includes answer, split at answer and take what's left, otherwise there's no answer
-                        rest.includes(ktoken) ?      // otherwise if keyword is present it must come after answer, 
-                            rest.split(ktoken)[0].split(atoken)[1] :  // split at keyword and take what comes first and split that at answer and take what's left
-                            rest.replace(atoken,""); // finally if there's no keyword, just get rid of answer token and take what's left
-        const keyword = rest.replace(atoken, '').replace(answer, '').replace(ktoken, '').trim();
-        const fillInFlashcard = (img?: Doc) => {
-            newDoc[DocData][this.frontKey] = this.textCreator('question', question, img);
-            newDoc[DocData][this.backKey] = this.textCreator('answer', answer);
-            return newDoc;
-        };
-        return keyword && keyword.toLowerCase() !== 'none' ? this.fetchImages(keyword).then(img => fillInFlashcard(img)) : fillInFlashcard();
-    };
-
-    /**
-     * Create a carousel of flashcards from a GPT response string where questions and answers are given in a format loosely defined by:
-     * Question: ...  Answer:  ...  Keyword: ...
-     * Note that Keyword or Answer may not be present, or their orders may be reversed.
-     */
-    createFlashcardDeck = (text: string) => {
-        Promise.all(
-            text
-                .split(ComparisonBox.qtoken)
-                .filter(t => t)
-                .map(tuple => this.createFlashcard(tuple))
-        ).then(docs => {
-            const newCol = Docs.Create.CarouselDocument(docs, {
-                _width: NumCast(this.layoutDoc._width, 250) + 50,
-                _height: NumCast(this.layoutDoc._height, 200) + 50,
-                _layout_fitWidth: false,
-                _layout_autoHeight: true,
-                _xMargin: 5,
-                _yMargin: 5,
-                x: NumCast(this.layoutDoc.x),
-                y: NumCast(this.layoutDoc.y),
-            });
-
-            this._props.DocumentView?.()._props.addDocument?.(newCol);
-            this._props.removeDocument?.(this.Document);
-        });
-    };
-
     /**
      * Calls GPT for each flashcard type.
      */
     askGPT = async (callType: GPTCallType) => {
-        const frontText = RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text;
-        const backText = RTFCast(DocCast(this.dataDoc[this.backKey]).text)?.Text;
-        const questionText = 'Question: ' + frontText;
-        const queryText = questionText + (callType == GPTCallType.QUIZ ? ' UserAnswer: ' + this._inputValue + '. ' + ' Rubric: ' + backText : '');
+        const questionText = 'Question: ' + this.frontText;
+        const queryText = questionText + (callType == GPTCallType.QUIZ ? ' UserAnswer: ' + this._inputValue + '. ' + ' Rubric: ' + this.backText : '');
+
         this.loading = true;
-        let res = '';
-
-        if (callType !== GPTCallType.CHATCARD || frontText) {
-            try {
-                res = await gptAPICall(queryText, callType);
-                if (!res) {
-                    console.error('GPT call failed');
-                } else
-                    switch (callType) {
-                        case GPTCallType.CHATCARD:
-                            DocCast(this.dataDoc[this.backKey])[DocData].text = res;
-                            break;
-                        case GPTCallType.QUIZ:
-                            runInAction(() => {
-                                this._renderSide = this.backKey;
-                                this._outputValue = res.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
-                            });
-                            break;
-                        case GPTCallType.FLASHCARD:
-                        default:
-                    }
-            } catch (err) {
-                console.error('GPT call failed', err);
-            }
-        }
+        const res = !this.frontText
+            ? ''
+            : await gptAPICall(queryText, callType).then(
+                  action(resp => {
+                      switch (resp && callType) {
+                          case GPTCallType.CHATCARD:
+                              DocCast(this.dataDoc[this.backKey])[DocData].text = resp;
+                              break;
+                          case GPTCallType.QUIZ:
+                              this._renderSide = this.backKey;
+                              this._outputValue = resp.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
+                              break;
+                          case GPTCallType.FLASHCARD:
+                          default:
+                      }
+                      return resp;
+                  })
+              );
         this.loading = false;
+        if (!res) console.error('GPT call failed');
         return res;
     };
     layoutWidth = () => NumCast(this.layoutDoc.width, 200);
     layoutHeight = () => NumCast(this.layoutDoc.height, 200);
 
-    findImageTags = async () => {
-        const c = this.DocumentView?.().ContentDiv?.getElementsByTagName('img');
-        if (c?.length === 0) this.askGPT(GPTCallType.CHATCARD);
-        if (c) {
-            this.loading = true;
-            for (const i of c) {
-                if (i.className !== 'ProseMirror-separator') this.getImageDesc(i.src);
-            }
-            this.loading = false;
-        }
-    };
-
     /**
      * Ask GPT for advice on how to improve speech by comparing the phonetic transcription of
      * a users audio recording with the phonetic transcription of their intended sentence.
      * @param phonemes
      */
     askGPTPhonemes = async (phonemes: string) => {
-        const sentence = StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text);
+        const sentence = this.frontText;
         const phon6 = 'huː ɑɹ juː tədeɪ';
         const phon4 = 'kamo estas hɔi';
         const promptEng =
@@ -567,24 +558,20 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * @param selection
      * @returns Image Document
      */
-    fetchImages = async (selection: string) => {
+    public static async fetchImages(selection: string) {
         try {
             const { data } = await axios.get(`${API_URL}?query=${selection}&page=1&per_page=${1}&client_id=Q4zruu6k6lum2kExiGhLNBJIgXDxD6NNj0SRHH_XXU0`);
             const imageSnapshot = Docs.Create.ImageDocument(data.results[0].urls.small, {
-                _nativeWidth: Doc.NativeWidth(this.layoutDoc),
-                _nativeHeight: Doc.NativeHeight(this.layoutDoc),
-                x: NumCast(this.layoutDoc.x),
-                y: NumCast(this.layoutDoc.y),
                 onClick: FollowLinkScript(),
                 _width: 150,
                 _height: 150,
-                title: '--snapshot' + NumCast(this.layoutDoc._layout_currentTimecode) + ' image-',
+                title: selection,
             });
             return imageSnapshot;
         } catch (error) {
             console.log(error);
         }
-    };
+    }
 
     getImageDesc = async (u: string) => {
         try {
@@ -610,9 +597,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     flashcardContextMenu = () => {
         const appearance = ContextMenu.Instance.findByDescription('Appearance...');
         const appearanceItems = appearance?.subitems ?? [];
-        if (this.Document._layout_isFlashcard) {
-            appearanceItems.push({ description: 'Create ChatCard', event: () => this.askGPT(GPTCallType.CHATCARD), icon: 'id-card' });
-        }
+        appearanceItems.push({ description: 'Create ChatCard', event: () => this.askGPT(GPTCallType.CHATCARD), icon: 'id-card' });
         !appearance && ContextMenu.Instance.addItem({ description: 'Appearance...', subitems: appearanceItems, icon: 'eye' });
     };
 
@@ -641,181 +626,174 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
         return layoutTemplateString;
     };
-    textCreator = (title: string, text: string, img?: Doc) => {
-        const newDoc = Docs.Create.TextDocument(RichTextField.textToRtf(text, img?.[Id]), {
-            title, //
-            _layout_autoHeight: true,
-            _layout_centered: true,
-            text_align: 'center',
-            _layout_fitWidth: true,
-        });
-        return newDoc;
-    };
     childActiveFunc = () => this._childActive;
 
     contentScreenToLocalXf = () => this._props.ScreenToLocalTransform().scale(this._props.NativeDimScaling?.() || 1);
-    render() {
-        const clearButton = (which: string) => (
-            <Tooltip title={<div className="dash-tooltip">remove</div>}>
-                <div
-                    ref={this._closeRef}
-                    className={`clear-button ${which}`}
-                    onPointerDown={e => this.closeDown(e, which)} // prevent triggering slider movement in registerSliding
-                >
-                    <FontAwesomeIcon className={`clear-button ${which}`} icon="times" size="xs" />
-                </div>
-            </Tooltip>
-        );
-        const displayDoc = (whichSlot: string) => {
-            const whichDoc = DocCast(this.dataDoc[whichSlot]);
-            const targetDoc = DocCast(whichDoc?.annotationOn, whichDoc);
-            const layoutString = targetDoc ? '' : this.testForTextFields(whichSlot);
-
-            return targetDoc || layoutString ? (
-                <>
-                    <DocumentView
-                        {...this._props}
-                        showTags={undefined}
-                        fitWidth={undefined} // set to returnTrue to make images fill the comparisonBox-- should be a user option
-                        ignoreUsePath={layoutString ? true : undefined}
-                        renderDepth={this.props.renderDepth + 1}
-                        LayoutTemplateString={layoutString}
-                        Document={layoutString ? this.Document : targetDoc}
-                        containerViewPath={this._props.docViewPath}
-                        moveDocument={whichSlot === this.frontKey ? this.moveDocFront : this.moveDocBack}
-                        removeDocument={whichSlot === this.frontKey ? this.remDocFront : this.remDocBack}
-                        NativeWidth={returnZero}
-                        NativeHeight={returnZero}
-                        ScreenToLocalTransform={this.contentScreenToLocalXf}
-                        isContentActive={this.childActiveFunc}
-                        isDocumentActive={returnFalse}
-                        dontSelect={returnTrue}
-                        whenChildContentsActiveChanged={this.whenChildContentsActiveChanged}
-                        styleProvider={this._childActive ? this._props.styleProvider : this.docStyleProvider}
-                        hideLinkButton
-                        pointerEvents={this._childActive ? undefined : returnNone}
-                    />
-                    {!this.isFlashcard ? clearButton(whichSlot) : null}
-                </>
-            ) : (
-                <div className="placeholder">
-                    <FontAwesomeIcon className="upload-icon" icon="cloud-upload-alt" size="lg" />
-                </div>
-            );
-        };
-        const displayBox = (which: string, cover: number) => (
+
+    clearButton = (which: string) => (
+        <Tooltip title={<div className="dash-tooltip">remove</div>}>
             <div
-                className={`${which === this.frontKey ? 'before' : 'after'}Box-cont`}
-                key={which}
-                style={{ width: this._props.PanelWidth() }}
-                onPointerDown={e => {
-                    this.registerSliding(e, cover);
-                    this.isFlashcard && this.activateContent();
-                }}
-                ref={ele => this.createDropTarget(ele, which)}>
-                {!this._isEmpty ? displayDoc(which) : null}
+                ref={this._closeRef}
+                className={`clear-button ${which}`}
+                onPointerDown={e => this.closeDown(e, which)} // prevent triggering slider movement in registerSliding
+            >
+                <FontAwesomeIcon className={`clear-button ${which}`} icon="times" size="xs" />
+            </div>
+        </Tooltip>
+    );
+    displayDoc = (whichSlot: string) => {
+        const whichDoc = DocCast(this.dataDoc[whichSlot]);
+        const targetDoc = DocCast(whichDoc?.annotationOn, whichDoc);
+        const layoutString = targetDoc ? '' : this.testForTextFields(whichSlot);
+
+        return targetDoc || layoutString ? (
+            <>
+                <DocumentView
+                    {...this._props}
+                    showTags={undefined}
+                    fitWidth={undefined} // set to returnTrue to make images fill the comparisonBox-- should be a user option
+                    ignoreUsePath={layoutString ? true : undefined}
+                    renderDepth={this.props.renderDepth + 1}
+                    LayoutTemplateString={layoutString}
+                    Document={layoutString ? this.Document : targetDoc}
+                    containerViewPath={this._props.docViewPath}
+                    moveDocument={whichSlot === this.frontKey ? this.moveDocFront : this.moveDocBack}
+                    removeDocument={whichSlot === this.frontKey ? this.remDocFront : this.remDocBack}
+                    NativeWidth={returnZero}
+                    NativeHeight={returnZero}
+                    ScreenToLocalTransform={this.contentScreenToLocalXf}
+                    isContentActive={this.childActiveFunc}
+                    isDocumentActive={returnFalse}
+                    dontSelect={returnTrue}
+                    whenChildContentsActiveChanged={this.whenChildContentsActiveChanged}
+                    styleProvider={this._childActive ? this._props.styleProvider : this.docStyleProvider}
+                    hideLinkButton
+                    pointerEvents={this._childActive ? undefined : returnNone}
+                />
+                {!this.isFlashcard ? this.clearButton(whichSlot) : null}
+            </>
+        ) : (
+            <div className="placeholder">
+                <FontAwesomeIcon className="upload-icon" icon="cloud-upload-alt" size="lg" />
             </div>
         );
+    };
 
-        if (this.isFlashcard) {
-            if (this.dataDoc.data) {
-                if (!this.dataDoc[this.backKey] || !this.dataDoc[this.frontKey]) this.createFlashcard(StrCast(this.dataDoc.data), this.Document);
-            } else {
-                // add text box to each side when comparison box is first created
-                if (!this.dataDoc[this.backKey] && !this._isEmpty) {
-                    const answer = this.textCreator('answer', 'answer here');
-                    this.dataDoc[this.backKey] = answer;
-                    answer[DocData].text_placeholder = true;
-                }
-
-                if (!this.dataDoc[this.frontKey] && !this._isEmpty) {
-                    const question = this.textCreator('question', 'hint: Enter a topic, select this document and click the stack button to have GPT create a deck of cards');
-                    this.dataDoc[this.frontKey] = question;
-                    question[DocData].text_placeholder = true;
-                }
-            }
-
-            if (DocCast(this.Document.embedContainer)?.practiceMode === practiceMode.QUIZ) {
-                const text = StrCast(RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text);
-                return (
-                    <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`}>
-                        <p style={{ color: 'white', padding: 10 }}>{text}</p>
-                        <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
-                        <div className="input-box">
-                            <textarea
-                                value={this._renderSide === this.backKey ? this._outputValue : this._inputValue}
-                                onChange={action(e => {
-                                    this._inputValue = e.target.value;
-                                })}
-                                placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
-                                readOnly={this._renderSide === this.backKey}
-                            />
-                            {!this.loading ? null : (
-                                <div className="loading-spinner">
-                                    <ReactLoading type="spin" height={30} width={30} color='blue' />
-                                </div>
-                            )}
-                        </div>
-                        <div>
-                            <div className="submit-button">
-                                <div className="submit-buttonschema-header-button" onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, false)}>
-                                    <FontAwesomeIcon color="white" icon="caret-down" />
-                                </div>
-                                <button className="submit-buttonrecord" onClick={this._listening ? this.stopListening : this.startListening} style={{ background: this._listening ? 'lightgray' : '' }}>
-                                    {<FontAwesomeIcon icon="microphone" size="lg" />}
-                                </button>
-                                <div className="submit-buttonschema-header-button" onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, true)} style={{ left: '50px', zIndex: '100' }}>
-                                    <FontAwesomeIcon color="white" icon="caret-down" />
-                                </div>
-                                <button className="submit-buttonpronunciation" onClick={this.evaluatePronunciation}>
-                                    Evaluate Pronunciation
-                                </button>
-                                <button className="submit-buttonsubmit" type="button" onClick={this._renderSide === this.backKey ? this.flipFlashcard : this.handleRenderGPTClick}>
-                                    {this._renderSide === this.backKey ? 'Redo the Question' : 'Submit'}
-                                </button>
-                            </div>
-                        </div>
+    displayBox = (which: string, cover: number) => (
+        <div
+            className={`${which === this.frontKey ? 'before' : 'after'}Box-cont`}
+            key={which}
+            style={{ width: this._props.PanelWidth() }}
+            onPointerDown={e => {
+                this.registerSliding(e, cover);
+                this.isFlashcard && this.activateContent();
+            }}
+            ref={ele => this.createDropTarget(ele, which)}>
+            {!this._isEmpty ? this.displayDoc(which) : null}
+        </div>
+    );
+
+    /* renders front(qustion) and back(answer) at the same time, then on user input replaces the answer with a GPT analysis of the answer */
+    renderAsQuiz = (text: string) => (
+        <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`}>
+            <p style={{ color: 'white', padding: 10 }}>{text}</p>
+            <p style={{ display: text === '' ? 'flex' : 'none', color: 'white', marginLeft: '10px' }}>Return to all flashcards and add text to both sides. </p>
+            <div className="input-box">
+                <textarea
+                    value={this._renderSide === this.backKey ? this._outputValue : this._inputValue}
+                    onChange={action(e => {
+                        this._inputValue = e.target.value;
+                    })}
+                    placeholder={!this.layoutDoc[`_${this._props.fieldKey}_usePath`] ? 'Enter a response for GPT to evaluate.' : ''}
+                    readOnly={this._renderSide === this.backKey}
+                />
+                {!this.loading ? null : (
+                    <div className="loading-spinner">
+                        <ReactLoading type="spin" height={30} width={30} color="blue" />
+                    </div>
+                )}
+            </div>
+            <div>
+                <div className="submit-button">
+                    <div className="submit-buttonschema-header-button" onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, false)}>
+                        <FontAwesomeIcon color="white" icon="caret-down" />
                     </div>
-                );
+                    <button className="submit-buttonrecord" onClick={this._listening ? this.stopListening : this.startListening} style={{ background: this._listening ? 'lightgray' : '' }}>
+                        {<FontAwesomeIcon icon="microphone" size="lg" />}
+                    </button>
+                    <div className="submit-buttonschema-header-button" onPointerDown={e => this.openContextMenu(e.clientX, e.clientY, true)} style={{ left: '50px', zIndex: '100' }}>
+                        <FontAwesomeIcon color="white" icon="caret-down" />
+                    </div>
+                    <button className="submit-buttonpronunciation" onClick={this.evaluatePronunciation}>
+                        Evaluate Pronunciation
+                    </button>
+                    <button className="submit-buttonsubmit" type="button" onClick={this._renderSide === this.backKey ? this.flipFlashcard : this.handleRenderGPTClick}>
+                        {this._renderSide === this.backKey ? 'Redo the Question' : 'Submit'}
+                    </button>
+                </div>
+            </div>
+        </div>
+    );
+
+    // if flashcard is rendered that has no data, then add some placeholders for question and answer
+    addPlaceholdersForEmptyFlashcard = () => {
+        if (this.dataDoc.data) {
+            if (!this.dataDoc[this.backKey] || !this.dataDoc[this.frontKey]) ComparisonBox.createFlashcard(StrCast(this.dataDoc.data), this.frontKey, this.backKey, this.Document);
+        } else {
+            // add text box to each side when comparison box is first created
+            if (!this.dataDoc[this.backKey] && !this._isEmpty) {
+                this.dataDoc[this.backKey] = FormattedTextBox.centeredTextCreator('answer', 'answer here', undefined, true);
             }
 
-            // render a normal flashcard when not a QuizCard
-            return (
-                <div
-                    className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
-                    onContextMenu={this.flashcardContextMenu}
-                    onMouseEnter={() => this.hoverFlip(this.backKey)}
-                    onMouseLeave={() => this.hoverFlip(this.frontKey)}>
-                    {displayBox(this._renderSide, this._props.PanelWidth() - 3)}
-                    {this.loading ? (
-                        <div className="loading-spinner">
-                            <ReactLoading type="spin" height={30} width={30} color="blue" />
-                        </div>
-                    ) : null}
-                    {this.flashcardMenu}
-                </div>
-            );
+            if (!this.dataDoc[this.frontKey] && !this._isEmpty) {
+                this.dataDoc[this.frontKey] = FormattedTextBox.centeredTextCreator('question', 'hint: Enter a topic, select this document and click the stack button to have GPT create a deck of cards', undefined, true);
+            }
         }
-        // render a comparison box that compares items side by side
-        return (
-            <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}` /* change className to easily disable/enable pointer events in CSS */}>
-                {displayBox(this.backKey, this._props.PanelWidth() - 3)}
-                <div className="clip-div" style={{ width: this.clipWidth + '%', transition: this._animating, background: StrCast(this.layoutDoc._backgroundColor, 'gray') }}>
-                    {displayBox(this.frontKey, 0)}
-                </div>
+    };
 
-                <div
-                    className="slide-bar"
-                    style={{
-                        left: `calc(${this.clipWidth + '%'} - 0.5px)`,
-                        cursor: this.clipWidth < 5 ? 'e-resize' : this.clipWidth / 100 > (this._props.PanelWidth() - 5) / this._props.PanelWidth() ? 'w-resize' : undefined,
-                    }}
-                    onPointerDown={e => !this._isAnyChildContentActive && this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
-                >
-                    <div className="slide-handle" />
+    renderAsFlashcard = () => (
+        <div
+            className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
+            onContextMenu={this.flashcardContextMenu}
+            onMouseEnter={() => this.hoverFlip(this.backKey)}
+            onMouseLeave={() => this.hoverFlip(this.frontKey)}>
+            {this.displayBox(this._renderSide, this._props.PanelWidth() - 3)}
+            {this.loading ? (
+                <div className="loading-spinner">
+                    <ReactLoading type="spin" height={30} width={30} color="blue" />
                 </div>
+            ) : null}
+            {this.flashcardMenu}
+        </div>
+    );
+
+    // render a comparison box that compares items side by side
+    renderAsBeforeAfter = () => (
+        <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}` /* change className to easily disable/enable pointer events in CSS */}>
+            {this.displayBox(this.backKey, this._props.PanelWidth() - 3)}
+            <div className="clip-div" style={{ width: this.clipWidth + '%', transition: this._animating, background: StrCast(this.layoutDoc._backgroundColor, 'gray') }}>
+                {this.displayBox(this.frontKey, 0)}
             </div>
-        );
+
+            <div
+                className="slide-bar"
+                style={{
+                    left: `calc(${this.clipWidth + '%'} - 0.5px)`,
+                    cursor: this.clipWidth < 5 ? 'e-resize' : this.clipWidth / 100 > (this._props.PanelWidth() - 5) / this._props.PanelWidth() ? 'w-resize' : undefined,
+                }}
+                onPointerDown={e => !this._isAnyChildContentActive && this.registerSliding(e, this._props.PanelWidth() / 2)} /* if clicked, return slide-bar to center */
+            >
+                <div className="slide-handle" />
+            </div>
+        </div>
+    );
+
+    render() {
+        this.isFlashcard && this.addPlaceholdersForEmptyFlashcard();
+        return this.isFlashcard ? 
+                    this.isQuizMode ? this.renderAsQuiz(this.frontText) :
+                                      this.renderAsFlashcard() : 
+                    this.renderAsBeforeAfter(); // prettier-ignore
     }
 }
 
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 29be8d285..9d3a899f5 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -76,6 +76,26 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
     public static LayoutString(fieldStr: string) {
         return FieldView.LayoutString(FormattedTextBox, fieldStr);
     }
+    /**
+     * Creates a text box where the supplied text (and optional iimage) will be vertically
+     * and horizontally centered.  If text_placeholder is set to true, then the text will be
+     * treated as placeholder text and automatically selected when the text box is selected.
+     * @param title name of text box
+     * @param text text to display in textbox
+     * @param img optional image to add to text box
+     * @param text_placeholder makes the text automatially select
+     * @returns
+     */
+    public static centeredTextCreator(title: string, text: string, img?: Doc, text_placeholder?: boolean) {
+        return Docs.Create.TextDocument(RichTextField.textToRtf(text, img?.[Id]), {
+            title, //
+            _layout_autoHeight: true,
+            _layout_centered: true,
+            text_align: 'center',
+            text_placeholder,
+            _layout_fitWidth: true,
+        });
+    }
     public static MakeConfig(rules?: RichTextRules, props?: FormattedTextBoxProps) {
         return {
             schema,
diff --git a/src/client/views/pdf/AnchorMenu.tsx b/src/client/views/pdf/AnchorMenu.tsx
index 7243473e0..5ab9b556c 100644
--- a/src/client/views/pdf/AnchorMenu.tsx
+++ b/src/client/views/pdf/AnchorMenu.tsx
@@ -10,7 +10,6 @@ import { emptyFunction, unimplementedFunction } from '../../../Utils';
 import { Doc, Opt } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
 import { GPTCallType, gptAPICall } from '../../apis/gpt/GPT';
-import { Docs } from '../../documents/Documents';
 import { SettingsManager } from '../../util/SettingsManager';
 import { undoBatch } from '../../util/UndoManager';
 import { AntimodeMenu, AntimodeMenuProps } from '../AntimodeMenu';
@@ -19,6 +18,7 @@ import { DocumentView } from '../nodes/DocumentView';
 import { DrawingOptions, SmartDrawHandler } from '../smartdraw/SmartDrawHandler';
 import './AnchorMenu.scss';
 import { GPTPopup, GPTPopupMode } from './GPTPopup/GPTPopup';
+import { ComparisonBox } from '../nodes/ComparisonBox';
 
 @observer
 export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
@@ -117,29 +117,15 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
      */
 
     transferToFlashcard = (text: string, x: number, y: number) => {
-        // put each question generated by GPT on the front of the flashcard
-        const senArr = text.trim().split('Question:');
-        const collectionArr: Doc[] = [];
-        for (let i = 1; i < senArr.length; i++) {
-            const newDoc = Docs.Create.ComparisonDocument(senArr[i], { _layout_isFlashcard: true, _width: 300, _height: 300 });
-            newDoc.text = senArr[i];
-
-            collectionArr.push(newDoc);
-        }
-        // create a new carousel collection of these flashcards
-        const newCol = Docs.Create.CarouselDocument(collectionArr, {
-            _width: 250,
-            _height: 200,
-            _layout_fitWidth: false,
-            _layout_autoHeight: true,
-        });
-
-        newCol.x = x;
-        newCol.y = y;
-        newCol.zIndex = 1000;
-
-        this.addToCollection?.(newCol);
-        this._loading = false;
+        ComparisonBox.createFlashcardDeck(text, 250, 200, 'data_front', 'data_back').then(
+            action(newCol => {
+                newCol.x = x;
+                newCol.y = y;
+                newCol.zIndex = 1000;
+                this.addToCollection?.(newCol);
+                this._loading = false;
+            })
+        );
     };
 
     /**
diff --git a/src/fields/util.ts b/src/fields/util.ts
index 60eadcdfd..33764aca5 100644
--- a/src/fields/util.ts
+++ b/src/fields/util.ts
@@ -227,7 +227,6 @@ function getEffectiveAcl(target: Doc | ListImpl<FieldType>, user?: string): symb
  * @param allowUpgrade whether permissions can be made less restrictive
  * @param layoutOnly just sets the layout doc's ACL (unless the data doc has no entry for the ACL, in which case it will be set as well)
  */
-// eslint-disable-next-line default-param-last
 export function distributeAcls(key: string, acl: SharingPermissions, target: Doc, visited: Doc[] = [], allowUpgrade?: boolean, layoutOnly = false) {
     const selfKey = `acl_${normalizeEmail(ClientUtils.CurrentUserEmail())}`;
     if (!target || visited.includes(target) || key === selfKey) return;
-- 
cgit v1.2.3-70-g09d2


From 29b83f023442c313ca5cf95f70f6430f101060e6 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Mon, 14 Oct 2024 19:55:32 -0400
Subject: reorganized comparisonBox related components -- moved stuff down into
 Docs.Crete and CurrentUserUtils.  changed Doc.Copy to copy Doc's in fields
 tagged with cloneOnCopy.  Changed ComparisonBox to support hover for slide or
 flip views. Fixed pointerEfvents for hover in comparisonBox

---
 src/client/documents/DocUtils.ts                   |   2 -
 src/client/documents/Documents.ts                  |  43 ++++-
 src/client/util/CurrentUserUtils.ts                |   4 +-
 .../views/collections/CollectionCarousel3DView.tsx |  33 ++--
 .../views/collections/CollectionCarouselView.tsx   |  58 +++---
 src/client/views/collections/CollectionSubView.tsx |   2 +-
 src/client/views/collections/CollectionView.tsx    |   6 +-
 .../views/collections/FlashcardPracticeUI.tsx      |  36 ++--
 src/client/views/nodes/ComparisonBox.scss          |   3 +-
 src/client/views/nodes/ComparisonBox.tsx           | 196 +++++++++++----------
 .../views/nodes/formattedText/FormattedTextBox.tsx |  20 ---
 src/fields/Doc.ts                                  |   2 +-
 12 files changed, 223 insertions(+), 182 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/documents/DocUtils.ts b/src/client/documents/DocUtils.ts
index 5f54f9d0a..19f3c89ef 100644
--- a/src/client/documents/DocUtils.ts
+++ b/src/client/documents/DocUtils.ts
@@ -103,7 +103,6 @@ export namespace DocUtils {
                       return false;
                   }
                   const facetKeys = Object.keys(filterFacets).filter(fkey => fkey !== 'cookies' && fkey !== ClientUtils.noDragDocsFilter.split(Doc.FilterSep)[0]);
-                  // eslint-disable-next-line no-restricted-syntax
                   for (const facetKey of facetKeys) {
                       const facet = filterFacets[facetKey];
 
@@ -288,7 +287,6 @@ export namespace DocUtils {
         return doc;
     }
     export function AssignDocField(doc: Doc, field: string, creator: (reqdOpts: DocumentOptions, items?: Doc[]) => Doc, reqdOpts: DocumentOptions, items?: Doc[], scripts?: { [key: string]: string }, funcs?: { [key: string]: string }) {
-        // eslint-disable-next-line no-return-assign
         return DocUtils.AssignScripts(DocUtils.AssignOpts(DocCast(doc[field]), reqdOpts, items) ?? (doc[field] = creator(reqdOpts, items)), scripts, funcs);
     }
 
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index f71b9f879..99af1f1a9 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -18,6 +18,7 @@ import { PointData } from '../../pen-gestures/GestureTypes';
 import { DocServer } from '../DocServer';
 import { dropActionType } from '../util/DropActionTypes';
 import { CollectionViewType, DocumentType } from './DocumentTypes';
+import { Id } from '../../fields/FieldSymbols';
 
 class EmptyBox {
     public static LayoutString() {
@@ -360,6 +361,7 @@ export class DocumentOptions {
     isFolder?: BOOLt = new BoolInfo('is document a tree view folder');
     _isTimelineLabel?: BOOLt = new BoolInfo('is document a timeline label');
     _isLightbox?: BOOLt = new BoolInfo('whether a collection acts as a lightbox by opening lightbox links by hiding all other documents in collection besides link target');
+    cloneOnCopy?: BOOLt = new BoolInfo('if this Doc is a field of another Doc, then it should be copied when the other Doc is copied');
 
     mapPin?: DOCt = new DocInfo('pin associated with a config anchor', false);
     config_latitude?: NUMt = new NumInfo('latitude of a map', false);
@@ -420,6 +422,12 @@ export class DocumentOptions {
     flexGap?: NUMt = new NumInfo('Linear view flex gap');
     flexDirection?: 'unset' | 'row' | 'column' | 'row-reverse' | 'column-reverse';
 
+    // Comparison
+    data_revealOp?: STRt = new StrInfo("visual reveal type for front and back of comparison - 'slide' or 'flip' ");
+    data_revealOp_hover?: BOOLt = new BoolInfo('reveal back of comparison manually or by hovering');
+    data_front?: DOCt = new DocInfo('contents of front of flashcard/comparison');
+    data_back?: DOCt = new DocInfo('contents of back of flashcard/comparison');
+
     link?: string;
     link_description?: string; // added for links
     link_relationship?: string; // type of relatinoship a link represents
@@ -784,8 +792,39 @@ export namespace Docs {
             return InstanceFromProto(Prototypes.get(DocumentType.SCREENSHOT), '', options);
         }
 
-        export function ComparisonDocument(text: string, options: DocumentOptions = { title: 'Comparison Box' }) {
-            return InstanceFromProto(Prototypes.get(DocumentType.COMPARISON), text, options);
+        export function ComparisonDocument(title: string, options: DocumentOptions) {
+            return InstanceFromProto(Prototypes.get(DocumentType.COMPARISON), '', options);
+        }
+        /**
+         * Creates a text box where the supplied text (and optional iimage) will be vertically
+         * and horizontally centered.  If text_placeholder is set to true, then the text will be
+         * treated as placeholder text and automatically selected when the text box is selected.
+         * @param title name of text box
+         * @param text text to display in text box
+         * @param opts metadata fields to set on text box
+         * @param img optional image to add to text box
+         * @returns
+         */
+        export function CenteredTextCreator(title: string, text: string, opts: DocumentOptions, img?: Doc) {
+            return TextDocument(RichTextField.textToRtf(text, img?.[Id]), {
+                title, //
+                _layout_autoHeight: true,
+                _layout_centered: true,
+                text_align: 'center',
+                _layout_fitWidth: true,
+                ...opts,
+            });
+        }
+
+        export function FlashcardDocument(title: string, front?: Doc, back?: Doc, options: DocumentOptions = { title: 'Flashcard' }) {
+            return InstanceFromProto(Prototypes.get(DocumentType.COMPARISON), '', {
+                data_front: front ?? CenteredTextCreator('question', 'hint: Enter a topic, select this document and click the stack button to have GPT create a deck of cards', { text_placeholder: true, cloneOnCopy: true }, undefined),
+                data_back: back ?? CenteredTextCreator('answer', 'answer here', { text_placeholder: true, cloneOnCopy: true }, undefined),
+                _layout_fitWidth: true,
+                _layout_isFlashcard: true,
+                title,
+                ...options,
+            });
         }
         export function DiagramDocument(options: DocumentOptions = { title: '' }) {
             return InstanceFromProto(Prototypes.get(DocumentType.DIAGRAM), undefined, options);
diff --git a/src/client/util/CurrentUserUtils.ts b/src/client/util/CurrentUserUtils.ts
index 798cdf5a9..555ccdd88 100644
--- a/src/client/util/CurrentUserUtils.ts
+++ b/src/client/util/CurrentUserUtils.ts
@@ -369,14 +369,14 @@ pie title Minerals in my tap water
                           creator:(opts:DocumentOptions)=> Doc // how to create the empty thing if it doesn't exist
               }[] = [
             {key: "Note",       creator: opts => Docs.Create.TextDocument("", opts),        opts: { _width: 200, _layout_autoHeight: true }},
-            {key: "Flashcard",  creator: opts => Docs.Create.ComparisonDocument("", opts),  opts: { _layout_isFlashcard: true, _layout_fitWidth: true, _width: 300, _height: 300}},
+            {key: "Flashcard",  creator: opts => Docs.Create.FlashcardDocument("", undefined, undefined, opts),opts: { _width: 300, _height: 300}},
             {key: "Image",      creator: opts => Docs.Create.ImageDocument("", opts),       opts: { _width: 400, _height:400 }},
             {key: "Equation",   creator: opts => Docs.Create.EquationDocument("",opts),     opts: { _width: 300, _height: 35, }},
             {key: "Noteboard",  creator: opts => Docs.Create.NoteTakingDocument([], opts),  opts: { _width: 250, _height: 200, _layout_fitWidth: true}},
             {key: "Simulation", creator: opts => Docs.Create.SimulationDocument(opts),      opts: { _width: 300, _height: 300, }},
             {key: "Collection", creator: opts => Docs.Create.FreeformDocument([], opts),    opts: { _width: 150, _height: 100, _layout_fitWidth: true }},
             {key: "Webpage",    creator: opts => Docs.Create.WebDocument("",opts),          opts: { _width: 400, _height: 512, _nativeWidth: 850, data_useCors: true, }},
-            {key: "Comparison", creator: opts => Docs.Create.ComparisonDocument("",opts),   opts: { _width: 300, _height: 300 }},
+            {key: "Comparison", creator: opts => Docs.Create.ComparisonDocument("", opts),  opts: { _width: 300, _height: 300 }},
             {key: "Diagram",    creator: Docs.Create.DiagramDocument,                       opts: { _width: 300, _height: 300, _type_collection: CollectionViewType.Freeform, layout_diagramEditor: CollectionView.LayoutString("data") }, scripts: { onPaint: `toggleDetail(documentView, "diagramEditor","")`}},
             {key: "Audio",      creator: opts => Docs.Create.AudioDocument(nullAudio, opts),opts: { _width: 200, _height: 100, }},
             {key: "Audio",      creator: opts => Docs.Create.AudioDocument(nullAudio, opts),opts: { _width: 200, _height: 100, _layout_fitWidth: true, }},
diff --git a/src/client/views/collections/CollectionCarousel3DView.tsx b/src/client/views/collections/CollectionCarousel3DView.tsx
index 05be376ca..e9ace733e 100644
--- a/src/client/views/collections/CollectionCarousel3DView.tsx
+++ b/src/client/views/collections/CollectionCarousel3DView.tsx
@@ -15,6 +15,7 @@ import { DocumentView } from '../nodes/DocumentView';
 import { FocusViewOptions } from '../nodes/FocusViewOptions';
 import './CollectionCarousel3DView.scss';
 import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
+import { computedFn } from 'mobx-utils';
 
 // eslint-disable-next-line @typescript-eslint/no-require-imports
 const { CAROUSEL3D_CENTER_SCALE, CAROUSEL3D_SIDE_SCALE, CAROUSEL3D_TOP } = require('../global/globalCssVariables.module.scss');
@@ -53,18 +54,22 @@ export class CollectionCarousel3DView extends CollectionSubView() {
 
     centerScale = Number(CAROUSEL3D_CENTER_SCALE);
     sideScale = Number(CAROUSEL3D_SIDE_SCALE);
-    panelWidth = () => this._props.PanelWidth() / 3;
-    panelHeight = () => this._props.PanelHeight() * this.sideScale;
+    panelWidth = () => this._props.PanelWidth() / 3 / this.nativeScaling();
+    panelHeight = () => (this._props.PanelHeight() * this.sideScale) / this.nativeScaling();
     onChildDoubleClick = () => ScriptCast(this.layoutDoc.onChildDoubleClick);
     isContentActive = () => this._props.isSelected() || this._props.isContentActive() || this._props.isAnyChildContentActive();
-    isChildContentActive = () =>
-        this._props.isContentActive?.() === false
-            ? false
-            : this._props.isDocumentActive?.() && (this._props.childDocumentsActive?.() || BoolCast(this.Document.childDocumentsActive))
-              ? true
-              : this._props.childDocumentsActive?.() === false || this.Document.childDocumentsActive === false
+    isChildContentActive = computedFn(
+        (doc: Doc) => () =>
+            this._props.isContentActive?.() === false
                 ? false
-                : undefined;
+                : this._props.isDocumentActive?.() && (this._props.childDocumentsActive?.() || BoolCast(this.Document.childDocumentsActive))
+                  ? true
+                  : this._props.isContentActive?.() && this.curDoc() === doc
+                    ? true
+                    : this._props.childDocumentsActive?.() === false || this.Document.childDocumentsActive === false
+                      ? false
+                      : undefined
+    );
     contentScreenToLocalXf = () => this._props.ScreenToLocalTransform().scale(this._props.NativeDimScaling?.() || 1);
     childScreenLeftToLocal = () =>
         this.contentScreenToLocalXf()
@@ -110,7 +115,7 @@ export class CollectionCarousel3DView extends CollectionSubView() {
                 LayoutTemplateString={this._props.childLayoutString}
                 focus={this.focus}
                 ScreenToLocalTransform={dxf}
-                isContentActive={this.isChildContentActive}
+                isContentActive={this.isChildContentActive(child)}
                 isDocumentActive={this._props.childDocumentsActive?.() || this.Document._childDocumentsActive ? this._props.isDocumentActive : this.isContentActive}
                 PanelWidth={this.panelWidth}
                 PanelHeight={this.panelHeight}
@@ -125,7 +130,6 @@ export class CollectionCarousel3DView extends CollectionSubView() {
     }
 
     changeSlide = (direction: number) => {
-        DocumentView.DeselectAll();
         this.layoutDoc._carousel_index = !this.curDoc() ? 0 : (NumCast(this.layoutDoc._carousel_index) + direction + this.carouselItems.length) % (this.carouselItems.length || 1);
     };
 
@@ -205,9 +209,10 @@ export class CollectionCarousel3DView extends CollectionSubView() {
     docViewProps = () => ({
         ...this._props, //
         isDocumentActive: this._props.childDocumentsActive?.() ? this._props.isDocumentActive : this._props.isContentActive,
-        isContentActive: this.isChildContentActive,
+        isContentActive: this._props.isContentActive,
         ScreenToLocalTransform: this.contentScreenToLocalXf,
     });
+    nativeScaling = () => this._props.NativeDimScaling?.() || 1;
     render() {
         return (
             <div
@@ -216,6 +221,10 @@ export class CollectionCarousel3DView extends CollectionSubView() {
                 style={{
                     background: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.BackgroundColor) as string,
                     color: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.Color) as string,
+                    transformOrigin: 'top left',
+                    transform: `scale(${this.nativeScaling()})`,
+                    width: `${100 / this.nativeScaling()}%`,
+                    height: `${100 / this.nativeScaling()}%`,
                 }}>
                 <div className="carousel-wrapper" style={{ transform: `translateX(${this.translateX}px)` }}>
                     {this.content}
diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index ef66a2c83..ff587b199 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -58,18 +58,12 @@ export class CollectionCarouselView extends CollectionSubView() {
     /**
      * Goes to the next Doc in the stack subject to the currently selected filter option.
      */
-    advance = (e?: React.MouseEvent) => {
-        e?.stopPropagation();
-        this.move(1);
-    };
+    advance = () => this.move(1);
 
     /**
      * Goes to the previous Doc in the stack subject to the currently selected filter option.
      */
-    goback = (e: React.MouseEvent) => {
-        e.stopPropagation();
-        this.move(-1);
-    };
+    goback = () => this.move(-1);
 
     curDoc = () => this.carouselItems[this.carouselIndex]?.layout;
 
@@ -78,24 +72,23 @@ export class CollectionCarouselView extends CollectionSubView() {
         const childValue = doc?.['caption_' + property] ? this._props.styleProvider?.(doc, captionProps, property) : undefined;
         return childValue ?? this._props.styleProvider?.(this.layoutDoc, captionProps, property);
     };
-    contentPanelWidth = () => this._props.PanelWidth() - 2 * NumCast(this.layoutDoc.xMargin);
-    contentPanelHeight = () => this._props.PanelHeight() - (StrCast(this.layoutDoc._layout_showCaption) ? 50 : 0) - 2 * NumCast(this.layoutDoc.yMargin);
+    contentPanelWidth = () => (this._props.PanelWidth() - 2 * NumCast(this.layoutDoc.xMargin)) / this.nativeScaling();
+    contentPanelHeight = () => (this._props.PanelHeight() - (StrCast(this.layoutDoc._layout_showCaption) ? 50 : 0) - 2 * NumCast(this.layoutDoc.yMargin)) / this.nativeScaling();
     onContentDoubleClick = () => ScriptCast(this.layoutDoc.onChildDoubleClick);
     onContentClick = () => ScriptCast(this.layoutDoc.onChildClick);
     captionWidth = () => this._props.PanelWidth() - 2 * this.captionMarginX;
     contentScreenToLocalXf = () =>
         this._props
-            .ScreenToLocalTransform()
-            .translate(-NumCast(this.layoutDoc.xMargin), -NumCast(this.layoutDoc.yMargin))
-            .scale(this._props.NativeDimScaling?.() || 1);
+            .ScreenToLocalTransform() //
+            .translate(-NumCast(this.layoutDoc.xMargin) / this.nativeScaling(), -NumCast(this.layoutDoc.yMargin) / this.nativeScaling());
     isChildContentActive = () =>
         this._props.isContentActive?.() === false
             ? false
-            : this._props.isDocumentActive?.() && (this._props.childDocumentsActive?.() || BoolCast(this.Document.childDocumentsActive))
+            : this._props.isContentActive()
               ? true
               : this._props.childDocumentsActive?.() === false || this.Document.childDocumentsActive === false
                 ? false
-                : undefined;
+                : undefined; // prettier-ignore
     onPassiveWheel = (e: WheelEvent) => e.stopPropagation();
     renderDoc = (doc: Doc, showCaptions: boolean, overlayFunc?: (r: DocumentView | null) => void) => {
         return (
@@ -202,6 +195,8 @@ export class CollectionCarouselView extends CollectionSubView() {
         );
     }
 
+    nativeScaling = () => this._props.NativeDimScaling?.() || 1;
+
     docViewProps = () => ({
         ...this._props, //
         isDocumentActive: this._props.childDocumentsActive?.() ? this._props.isDocumentActive : this._props.isContentActive,
@@ -212,20 +207,25 @@ export class CollectionCarouselView extends CollectionSubView() {
 
     render() {
         return (
-            <div
-                className="collectionCarouselView-outer"
-                ref={this.createDashEventsTarget}
-                style={{
-                    background: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.BackgroundColor) as string,
-                    color: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.Color) as string,
-                    width: `calc(100% - ${NumCast(this.layoutDoc._xMargin)}px)`,
-                    height: `calc(100% - ${NumCast(this.layoutDoc._yMargin)}px)`,
-                    left: NumCast(this.layoutDoc._xMargin),
-                    top: NumCast(this.layoutDoc._yMargin),
-                }}>
-                {this.content}
-                {this.flashCardUI(this.curDoc, this.docViewProps, this.answered)}
-                {this.navButtons}
+            <div>
+                <div
+                    className="collectionCarouselView-outer"
+                    ref={this.createDashEventsTarget}
+                    style={{
+                        background: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.BackgroundColor) as string,
+                        color: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.Color) as string,
+                        left: NumCast(this.layoutDoc._xMargin),
+                        top: NumCast(this.layoutDoc._yMargin),
+                        transformOrigin: 'top left',
+                        transform: `scale(${this.nativeScaling()})`,
+                        width: `calc(${100 / this.nativeScaling()}% - ${(2 * NumCast(this.layoutDoc._xMargin)) / this.nativeScaling()}px)`,
+                        height: `calc(${100 / this.nativeScaling()}% - ${(2 * NumCast(this.layoutDoc._yMargin)) / this.nativeScaling()}px)`,
+                        position: 'relative',
+                    }}>
+                    {this.content}
+                    {this.flashCardUI(this.curDoc, this.docViewProps, this.answered)}
+                    {this.navButtons}
+                </div>
             </div>
         );
     }
diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx
index f85b0b433..ab5b70a85 100644
--- a/src/client/views/collections/CollectionSubView.tsx
+++ b/src/client/views/collections/CollectionSubView.tsx
@@ -523,7 +523,7 @@ export function CollectionSubView<X>() {
         /**
          * How much the content of the collection is being scaled based on its nesting and its fit-to-width settings
          */
-        @computed get contentScaling() { return this.ScreenToLocalBoxXf().Scale * (this._props.NativeDimScaling?.() ?? 1); } // prettier-ignore
+        @computed get contentScaling() { return this.ScreenToLocalBoxXf().Scale; } // prettier-ignore
         /**
          * The maximum size a UI widget can be in collection coordinates based on not wanting the widget to visually obscure too much of the collection
          * This takes the desired screen space size and converts into collection coordinates.  It then returns the smaller of the converted
diff --git a/src/client/views/collections/CollectionView.tsx b/src/client/views/collections/CollectionView.tsx
index 7418d4360..6f0833a22 100644
--- a/src/client/views/collections/CollectionView.tsx
+++ b/src/client/views/collections/CollectionView.tsx
@@ -83,7 +83,7 @@ export class CollectionView extends ViewBoxAnnotatableComponent<CollectionViewPr
         return viewField;
     }
 
-    screenToLocalTransform = () => (this._props.renderDepth ? this.ScreenToLocalBoxXf() : this.ScreenToLocalBoxXf().scale(this._props.PanelWidth() / this.bodyPanelWidth()));
+    screenToLocalTransform = this.ScreenToLocalBoxXf;
     // prettier-ignore
     private renderSubView = (type: CollectionViewType | undefined, props: SubCollectionViewProps) => {
         TraceMobx();
@@ -202,8 +202,6 @@ export class CollectionView extends ViewBoxAnnotatableComponent<CollectionViewPr
         }
     };
 
-    bodyPanelWidth = () => this._props.PanelWidth();
-
     childLayoutTemplate = () => this._props.childLayoutTemplate?.() || Cast(this.Document.childLayoutTemplate, Doc, null);
     isContentActive = () => this._isContentActive;
 
@@ -221,7 +219,7 @@ export class CollectionView extends ViewBoxAnnotatableComponent<CollectionViewPr
             removeDocument: this.removeDocument,
             isContentActive: this.isContentActive,
             isAnyChildContentActive: this.isAnyChildContentActive,
-            PanelWidth: this.bodyPanelWidth,
+            PanelWidth: this._props.PanelWidth,
             PanelHeight: this._props.PanelHeight,
             ScreenToLocalTransform: this.screenToLocalTransform,
             childLayoutTemplate: this.childLayoutTemplate,
diff --git a/src/client/views/collections/FlashcardPracticeUI.tsx b/src/client/views/collections/FlashcardPracticeUI.tsx
index 45e040653..79eb7f107 100644
--- a/src/client/views/collections/FlashcardPracticeUI.tsx
+++ b/src/client/views/collections/FlashcardPracticeUI.tsx
@@ -1,7 +1,7 @@
 import { IconProp } from '@fortawesome/fontawesome-svg-core';
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { Tooltip } from '@mui/material';
-import { IconButton, MultiToggle, Type } from 'browndash-components';
+import { MultiToggle, Type } from 'browndash-components';
 import { computed, makeObservable } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
@@ -25,8 +25,8 @@ enum practiceVal {
 }
 
 export enum flashcardRevealOp {
-    HOVER = 'hover',
     FLIP = 'flip',
+    SLIDE = 'slide',
 }
 
 interface PracticeUIProps {
@@ -153,20 +153,28 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
                     selectedItems={this.practiceMode}
                     onSelectionChange={(val: (string | number) | (string | number)[]) => togglePracticeMode(val as practiceMode)}
                 />
-                <IconButton
-                    tooltip="hover over card to reveal answer"
-                    type={Type.TERT}
-                    text={StrCast(this._props.layoutDoc.revealOp)}
+                <MultiToggle
+                    tooltip="How to reveal flashcard answer"
+                    type={Type.PRIM}
                     color={SnappingManager.userColor}
                     background={SnappingManager.userVariantColor}
-                    icon={<FontAwesomeIcon color={SnappingManager.userColor} icon={this._props.layoutDoc.revealOp === flashcardRevealOp.HOVER ? 'hand-point-up' : 'question'} size="sm" />}
-                    label={StrCast(this._props.layoutDoc.revealOp)}
-                    onPointerDown={e =>
-                        setupMoveUpEvents(this, e, returnFalse, emptyFunction, () => {
-                            this._props.layoutDoc.revealOp = this._props.layoutDoc.revealOp === flashcardRevealOp.HOVER ? flashcardRevealOp.FLIP : flashcardRevealOp.HOVER;
-                            this._props.layoutDoc.childDocumentsActive = this._props.layoutDoc.revealOp === 'hover' ? true : undefined;
-                        })
-                    }
+                    multiSelect={false}
+                    isToggle={false}
+                    toggleStatus={!!this.practiceMode}
+                    label={StrCast(this._props.layoutDoc.revealOp, flashcardRevealOp.FLIP)}
+                    items={[
+                        ['reveal', StrCast(this._props.layoutDoc.revealOp) === flashcardRevealOp.SLIDE ? 'expand' : 'question', StrCast(this._props.layoutDoc.revealOp, flashcardRevealOp.FLIP)],
+                        ['trigger', this._props.layoutDoc.revealOp_hover ? 'hand-point-up' : 'hand', this._props.layoutDoc.revealOp_hover ? 'show on hover' : 'show on click'],
+                    ].map(([item, icon, tooltip]) => ({
+                        icon: <FontAwesomeIcon className={`FlashcardPracticeUI-${item}`} color={setColor(item as practiceMode)} icon={icon as IconProp} size="sm" />,
+                        tooltip: tooltip,
+                        val: item,
+                    }))}
+                    selectedItems={this._props.layoutDoc.revealOp_hover ? ['reveal', 'trigger'] : 'reveal'}
+                    onSelectionChange={(val: (string | number) | (string | number)[]) => {
+                        if (val === 'reveal') this._props.layoutDoc.revealOp = this._props.layoutDoc.revealOp === flashcardRevealOp.SLIDE ? flashcardRevealOp.FLIP : flashcardRevealOp.SLIDE;
+                        if (val === 'trigger') this._props.layoutDoc.revealOp_hover = !this._props.layoutDoc.revealOp_hover;
+                    }}
                 />
             </div>
         );
diff --git a/src/client/views/nodes/ComparisonBox.scss b/src/client/views/nodes/ComparisonBox.scss
index c328ef4bf..d1cc48051 100644
--- a/src/client/views/nodes/ComparisonBox.scss
+++ b/src/client/views/nodes/ComparisonBox.scss
@@ -246,8 +246,7 @@
     pointer-events: none;
 }
 
-.comparisonBox-interactive {
-    pointer-events: unset;
+.comparisonBox-slide {
     cursor: ew-resize;
 
     .slide-bar {
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 80ef126dc..38ce5f2f7 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -35,22 +35,21 @@ import { FormattedTextBox } from './formattedText/FormattedTextBox';
 const API_URL = 'https://api.unsplash.com/search/photos';
 
 /**
- * This view serves three distinct functions depending on the metadata field layout_isFlashcard
- *     1) it provides a before/after animated sliding transition between two Docs
- *     2) it provides a question/answer switch between two Docs (flashcard)
- *     3) it provides a quiz view that displays a question and a user answer that can be "scored" by GPT
+ * This view serves two distinct functions depending on the revealOp field ('slide' or 'flip)
+ *     1) ('slide') - provides a before/after animated sliding transition between two Docs
+ *     2) ('flip') - provides a question/answer flip between two Docs
+ * And a third function that overrides the first two if the doc's container has its 'practiceMode' set to 'quiz'
+ *     3) ('quiz') - it provides a quiz view that displays a question and a user answer that can be "scored" by GPT
+ *     NOTE: this should probably be changed to passing down a prop to the flashcard telling it to render as a quiz.
  *
  * In each case, the two docs are stored in the <fieldKey>_front and <fieldKey>_back fields
  *
- * In the case of the flashcard, there is an icon that allows the user to choose between a
- * hover and a flip action to switch between cards.  The transition is stored in the 'revealOp' field.
- * In addition, if a flashcard is created without data in the front/back fields, this will
- * create Text documents with placeholder text indicating to the user how to fill in the cards.
- * One option is to allow the user to enter a topic and, by clicking on the flashcard stack button,
- * convert the comparision box into a stack of comparison boxes filled in by GPT about the topic.
+ * For 'flip' and 'slide', the trigger can either be clicking, or hovering as determined by the revealOp_hover field.
+ * For 'quiz' the data of both Docs are shown in a single-view quiz display.
  *
- * Quiz mode is activated when the parent collection has its 'quiz' field set when it renders a flashcard.
- * NOTE: this should probably be changed to passing down a prop to the flashcard telling it to render as a quiz.
+ * Users can create a stack of flashcards all at once (only) from an empty flashcard by entering a topic into the front card
+ * and clicking on the flashcard stack button.  This will convert the comparision box into a stack of comparison boxes
+ * filled in by GPT about the topic.
  *
  */
 
@@ -67,7 +66,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      */
     public static createFlashcard(tuple: string, frontKey: string, backKey: string, useDoc?: Doc) {
         const [ktoken, atoken] = [ComparisonBox.ktoken, ComparisonBox.atoken];
-        const newDoc = useDoc ?? Docs.Create.ComparisonDocument('', { _layout_isFlashcard: true, _width: 300, _height: 300 });
         const question = (tuple.includes(ktoken) ? tuple.split(ktoken)[0] : tuple).split(atoken)[0];
         const rest = tuple.replace(question, '');
         // prettier-ignore
@@ -78,9 +76,14 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             rest.replace(atoken,""); // finally if there's no keyword, just get rid of answer token and take what's left
         const keyword = rest.replace(atoken, '').replace(answer, '').replace(ktoken, '').trim();
         const fillInFlashcard = (img?: Doc) => {
-            newDoc[DocData][frontKey] = FormattedTextBox.centeredTextCreator('question', question, img);
-            newDoc[DocData][backKey] = FormattedTextBox.centeredTextCreator('answer', answer);
-            return newDoc;
+            const front = Docs.Create.CenteredTextCreator('question', question, {}, img);
+            const back = Docs.Create.CenteredTextCreator('answer', answer, {});
+            if (useDoc) {
+                useDoc[DocData][frontKey] = front;
+                useDoc[DocData][backKey] = back;
+                return useDoc;
+            }
+            return Docs.Create.FlashcardDocument('flashcard', front, back, { _width: 300, _height: 300 });
         };
         return keyword && keyword.toLowerCase() !== 'none' ? ComparisonBox.fetchImages(keyword).then(img => fillInFlashcard(img)) : fillInFlashcard();
     }
@@ -98,6 +101,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 .map(tuple => ComparisonBox.createFlashcard(tuple, front, back))
         ).then(docs => {
             return Docs.Create.CarouselDocument(docs, {
+                title: 'flashcard deck',
                 _width: width,
                 _height: height,
                 _layout_fitWidth: false,
@@ -116,12 +120,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     private _sideBtnWidth = 35;
     private _closeRef = React.createRef<HTMLDivElement>();
     private _disposers: { [key: string]: DragManager.DragDropDisposer | undefined } = {};
-    private _reactDisposer: IReactionDisposer | undefined;
+    private _reactDisposer: { [key: string]: IReactionDisposer } = {};
 
     @observable private _inputValue = '';
     @observable private _outputValue = '';
     @observable private _loading = false;
-    @observable private _isEmpty = false;
     @observable private _childActive = false;
     @observable private _animating = '';
     @observable private _listening = false;
@@ -135,18 +138,28 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     componentDidMount() {
         this._props.setContentViewBox?.(this);
-        this._reactDisposer = reaction(
-            () => this._props.isSelected(), // when this reaction should update
+        this._reactDisposer.select = reaction(
+            () => this._props.isSelected(),
             selected => {
-                if (selected && this.isFlashcard) this.activateContent();
+                if (selected && this.revealOp !== flashcardRevealOp.SLIDE) this.activateContent();
                 !selected && (this._childActive = false);
             }, // what it should update to
             { fireImmediately: true }
         );
+        this._reactDisposer.hover = reaction(
+            () => this._props.isContentActive(),
+            hover => {
+                if (!hover) {
+                    this.revealOp === flashcardRevealOp.FLIP && this.animateFlipping(this.frontKey);
+                    this.revealOp === flashcardRevealOp.SLIDE && this.animateSliding(this._props.PanelWidth() - 3);
+                }
+            }, // what it should update to
+            { fireImmediately: true }
+        );
     }
 
     componentWillUnmount() {
-        this._reactDisposer?.();
+        Object.values(this._reactDisposer).forEach(disposer => disposer?.());
     }
 
     protected createDropTarget = (ele: HTMLDivElement | null, fieldKey: string) => {
@@ -169,7 +182,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         return undefined;
     }, 'internal drop');
 
-    @computed get isQuizMode()    { return DocCast(this.Document.embedContainer)?.practiceMode === practiceMode.QUIZ; } // prettier-ignore
+    @computed get containerDoc()  { return this._props.docViewPath().slice(-2)[0]?.Document; } // prettier-ignore
+    @computed get isQuizMode()    { return this.containerDoc?.practiceMode === practiceMode.QUIZ; } // prettier-ignore
     @computed get isFlashcard()   { return BoolCast(this.Document.layout_isFlashcard); } // prettier-ignore
     @computed get frontKey()      { return this._props.fieldKey + '_front'; } // prettier-ignore
     @computed get backKey()       { return this._props.fieldKey + '_back'; } // prettier-ignore
@@ -178,10 +192,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @computed get revealOpKey()   { return `_${this._props.fieldKey}_revealOp`; } // prettier-ignore
     @computed get clipHeightKey() { return `_${this._props.fieldKey}_clipHeight`; } // prettier-ignore
     @computed get clipWidthKey()  { return `_${this._props.fieldKey}_clipWidth`;  } // prettier-ignore
-    @computed get clipWidth()     { return NumCast(this.layoutDoc[this.clipWidthKey], 50); } // prettier-ignore
+    @computed get clipWidth()     { return NumCast(this.layoutDoc[this.clipWidthKey], this.isFlashcard ? 100: 50); } // prettier-ignore
     @computed get clipHeight()    { return NumCast(this.layoutDoc[this.clipHeightKey], 200);  } // prettier-ignore
-    @computed get revealOp()      { return StrCast(this.layoutDoc[this.revealOpKey], StrCast(this._props.docViewPath().slice(-2)[0]?.Document.revealOp)); } // prettier-ignore
-    set revealOp(value:string)    { this.layoutDoc[this.revealOpKey] = value; } // prettier-ignore
+    @computed get revealOp()      { return StrCast(this.layoutDoc[this.revealOpKey], StrCast(this.containerDoc?.revealOp, this.isFlashcard ? flashcardRevealOp.FLIP : flashcardRevealOp.SLIDE)) as flashcardRevealOp; } // prettier-ignore
+    @computed get revealOpHover() { return BoolCast(this.layoutDoc[this.revealOpKey+"_hover"], BoolCast(this.containerDoc?.revealOp_hover)); } // prettier-ignore
     @computed get loading()       { return this._loading; } // prettier-ignore
     set loading(value)            { runInAction(() => { this._loading = value; })} // prettier-ignore
 
@@ -193,13 +207,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     onPointerDown={e =>
                         setupMoveUpEvents(e.target, e, returnFalse, emptyFunction, () => {
                             if (!this.revealOp || this.revealOp === flashcardRevealOp.FLIP) {
-                                this.flipFlashcard();
+                                this.animateFlipping();
                             }
                         })
                     }
                     style={{
-                        background: this.revealOp === flashcardRevealOp.HOVER ? 'gray' : this._renderSide === this.backKey ? 'white' : 'black',
-                        color: this.revealOp === flashcardRevealOp.HOVER ? 'black' : this._renderSide === this.backKey ? 'black' : 'white',
+                        background: this.revealOpHover ? 'gray' : this._renderSide === this.backKey ? 'white' : 'black',
+                        color: this.revealOpHover ? 'black' : this._renderSide === this.backKey ? 'black' : 'white',
                         display: 'inline-block',
                     }}>
                     <FontAwesomeIcon icon="turn-up" size="xl" />
@@ -223,7 +237,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @computed get flashcardMenu() {
         return SnappingManager.HideDecorations ? null : (
             <div className="comparisonBox-bottomMenu" style={{ transform: `scale(${this.uiBtnScaling})` }}>
-                {this.revealOp === flashcardRevealOp.HOVER || !this._props.isSelected() ? null : this.overlayAlternateIcon}
+                {this.revealOpHover || !this._props.isSelected() ? null : this.overlayAlternateIcon}
                 {!this._props.isSelected() || this._renderSide === this.frontKey ? null : (
                     <Tooltip title={<div className="dash-tooltip">Ask GPT to create an answer for the question on the front</div>}>
                         <div className="comparisonBox-button" onPointerDown={() => this.askGPT(GPTCallType.CHATCARD)}>
@@ -296,13 +310,11 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     moveDoc = (doc: Doc, addDocument: (document: Doc | Doc[]) => boolean, which: string) => this.remDoc(doc, which) && addDocument(doc);
     addDoc = (doc: Doc, which: string) => {
-        if (this.dataDoc[which] && !this._isEmpty) return false;
         this.dataDoc[which] = doc;
         return true;
     };
     remDoc = (doc: Doc, which: string) => {
         if (this.dataDoc[which] === doc) {
-            this._isEmpty = true;
             this.dataDoc[which] = undefined;
             return true;
         }
@@ -334,6 +346,26 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     moveDocBack = (docs: Doc | Doc[], targetCol: Doc | undefined, addDoc: (doc: Doc | Doc[]) => boolean) => toList(docs).reduce((res, doc: Doc) => res && this.moveDoc(doc, addDoc, this.backKey), true);
     remDocFront = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.frontKey), true);
     remDocBack = (docs: Doc | Doc[]) => toList(docs).reduce((res, doc) => res && this.remDoc(doc, this.backKey), true);
+    animateSliding = action((targetWidth: number) => {
+        this._animating = `all ${this._slideTiming}ms`; // on click, animate slider movement to the targetWidth
+        this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
+        setTimeout(action(() => {this._animating = '';  }), this._slideTiming); // prettier-ignore
+    });
+
+    _flipAnim: NodeJS.Timeout | undefined;
+    animateFlipping = action((side?: string) => {
+        if (side !== this._renderSide) {
+            this._renderSide = side ?? (this._renderSide === this.frontKey ? this.backKey : this.frontKey); // switches to new front
+            this._animating = '0'; // reveals old front on the bottom layer by making top layer transparent
+            setTimeout(
+                action(() => {
+                    this._animating = `all ${this._slideTiming * 5}ms`; // makes new front fade in
+                    clearTimeout(this._flipAnim);
+                    this._flipAnim = setTimeout(  action(() => { this._animating = '';  }), this._slideTiming * 5 ); // prettier-ignore
+                })
+            );
+        }
+    });
 
     registerSliding = (e: React.PointerEvent<HTMLDivElement>, targetWidth: number) => {
         if (e.button !== 2) {
@@ -351,13 +383,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 }),
                 false,
                 undefined,
-                action(() => {
-                    if (!this._childActive) {
-                        this._animating = `all ${this._slideTiming}ms`; // on click, animate slider movement to the targetWidth
-                        this.layoutDoc[this.clipWidthKey] = (targetWidth * 100) / this._props.PanelWidth();
-                        setTimeout(  action(() => {this._animating = '';  }), this._slideTiming); // prettier-ignore
-                    }
-                })
+                action(() => !this._childActive && this.animateSliding(targetWidth))
             );
         }
     };
@@ -584,16 +610,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         }
     };
 
-    @action
-    flipFlashcard = () => {
-        this._renderSide = this._renderSide === this.frontKey ? this.backKey : this.frontKey;
-    };
-
-    @action
-    hoverFlip = (side: string) => {
-        if (this.revealOp === flashcardRevealOp.HOVER) this._renderSide = side;
-    };
-
     flashcardContextMenu = () => {
         const appearance = ContextMenu.Instance.findByDescription('Appearance...');
         const appearanceItems = appearance?.subitems ?? [];
@@ -680,16 +696,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     };
 
     displayBox = (which: string, cover: number) => (
-        <div
-            className={`${which === this.frontKey ? 'before' : 'after'}Box-cont`}
-            key={which}
-            style={{ width: this._props.PanelWidth() }}
-            onPointerDown={e => {
-                this.registerSliding(e, cover);
-                this.isFlashcard && this.activateContent();
-            }}
-            ref={ele => this.createDropTarget(ele, which)}>
-            {!this._isEmpty ? this.displayDoc(which) : null}
+        <div className={`${which === this.frontKey ? 'before' : 'after'}Box-cont`} key={which} style={{ width: this._props.PanelWidth() }} onPointerDown={e => this.registerSliding(e, cover)} ref={ele => this.createDropTarget(ele, which)}>
+            {this.displayDoc(which)}
         </div>
     );
 
@@ -727,7 +735,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     <button className="submit-buttonpronunciation" onClick={this.evaluatePronunciation}>
                         Evaluate Pronunciation
                     </button>
-                    <button className="submit-buttonsubmit" type="button" onClick={this._renderSide === this.backKey ? this.flipFlashcard : this.handleRenderGPTClick}>
+                    <button className="submit-buttonsubmit" type="button" onClick={this._renderSide === this.backKey ? () => this.animateFlipping(this.frontKey) : this.handleRenderGPTClick}>
                         {this._renderSide === this.backKey ? 'Redo the Question' : 'Submit'}
                     </button>
                 </div>
@@ -736,40 +744,33 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     );
 
     // if flashcard is rendered that has no data, then add some placeholders for question and answer
-    addPlaceholdersForEmptyFlashcard = () => {
-        if (this.dataDoc.data) {
-            if (!this.dataDoc[this.backKey] || !this.dataDoc[this.frontKey]) ComparisonBox.createFlashcard(StrCast(this.dataDoc.data), this.frontKey, this.backKey, this.Document);
-        } else {
-            // add text box to each side when comparison box is first created
-            if (!this.dataDoc[this.backKey] && !this._isEmpty) {
-                this.dataDoc[this.backKey] = FormattedTextBox.centeredTextCreator('answer', 'answer here', undefined, true);
-            }
-
-            if (!this.dataDoc[this.frontKey] && !this._isEmpty) {
-                this.dataDoc[this.frontKey] = FormattedTextBox.centeredTextCreator('question', 'hint: Enter a topic, select this document and click the stack button to have GPT create a deck of cards', undefined, true);
-            }
-        }
-    };
-
-    renderAsFlashcard = () => (
+    // addPlaceholdersForEmptyFlashcard = () => {
+    //     if (this.dataDoc.data) {
+    //         if (!this.dataDoc[this.backKey] || !this.dataDoc[this.frontKey]) ComparisonBox.createFlashcard(StrCast(this.dataDoc.data), this.frontKey, this.backKey, this.Document);
+    //     }
+    // };
+
+    // render a button that flips between front and back
+    renderAsFlip = () => (
         <div
-            className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`} /* change className to easily disable/enable pointer events in CSS */
-            onContextMenu={this.flashcardContextMenu}
-            onMouseEnter={() => this.hoverFlip(this.backKey)}
-            onMouseLeave={() => this.hoverFlip(this.frontKey)}>
-            {this.displayBox(this._renderSide, this._props.PanelWidth() - 3)}
-            {this.loading ? (
-                <div className="loading-spinner">
-                    <ReactLoading type="spin" height={30} width={30} color="blue" />
-                </div>
-            ) : null}
+            style={{ display: 'flex', pointerEvents: this.revealOpHover && this._props.isContentActive() ? 'unset' : undefined }} //
+            onMouseEnter={() => this.revealOpHover && this.animateFlipping(this.backKey)}
+            onMouseLeave={() => this.revealOpHover && this.animateFlipping(this.frontKey)}>
+            <div style={{ position: 'absolute', width: '100%', height: '100%', transition: this._animating === '0' ? undefined : this._animating, opacity: this._animating === '0' ? 1 : 0 }}>
+                {this.displayBox(this._renderSide === this.backKey ? this.frontKey : this.backKey, 0)}
+            </div>
+            <div style={{ position: 'absolute', width: '100%', height: '100%', transition: this._animating === '0' ? undefined : this._animating, opacity: this._animating === '0' ? 0 : 1 }}>{this.displayBox(this._renderSide, 0)}</div>
             {this.flashcardMenu}
         </div>
     );
 
-    // render a comparison box that compares items side by side
+    // render a slider that reveals front and back as slider is dragged horizonally
     renderAsBeforeAfter = () => (
-        <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}` /* change className to easily disable/enable pointer events in CSS */}>
+        <div
+            className="comparisonBox-slide"
+            style={{ display: 'flex', pointerEvents: this.revealOpHover && this._props.isContentActive() ? 'unset' : undefined }}
+            onMouseEnter={() => this.revealOpHover && this.animateSliding(0)}
+            onMouseLeave={() => this.revealOpHover && this.animateSliding(this._props.PanelWidth() - 3)}>
             {this.displayBox(this.backKey, this._props.PanelWidth() - 3)}
             <div className="clip-div" style={{ width: this.clipWidth + '%', transition: this._animating, background: StrCast(this.layoutDoc._backgroundColor, 'gray') }}>
                 {this.displayBox(this.frontKey, 0)}
@@ -789,11 +790,20 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     );
 
     render() {
-        this.isFlashcard && this.addPlaceholdersForEmptyFlashcard();
-        return this.isFlashcard ? 
-                    this.isQuizMode ? this.renderAsQuiz(this.frontText) :
-                                      this.renderAsFlashcard() : 
-                    this.renderAsBeforeAfter(); // prettier-ignore
+        const renderMode = new Map<flashcardRevealOp, () => JSX.Element>([
+            [flashcardRevealOp.FLIP, this.renderAsFlip],
+            [flashcardRevealOp.SLIDE, this.renderAsBeforeAfter]]); // prettier-ignore
+        if (this.isQuizMode) this.renderAsQuiz(this.frontText);
+        return (
+            <div className="comparisonBox" style={{ pointerEvents: this._props.isContentActive() ? 'unset' : undefined }} onContextMenu={this.flashcardContextMenu}>
+                {renderMode.get(this.revealOp)?.() ?? null}
+                {this.loading ? (
+                    <div className="loading-spinner">
+                        <ReactLoading type="spin" height={30} width={30} color="blue" />
+                    </div>
+                ) : null}
+            </div>
+        );
     }
 }
 
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 9d3a899f5..29be8d285 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -76,26 +76,6 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
     public static LayoutString(fieldStr: string) {
         return FieldView.LayoutString(FormattedTextBox, fieldStr);
     }
-    /**
-     * Creates a text box where the supplied text (and optional iimage) will be vertically
-     * and horizontally centered.  If text_placeholder is set to true, then the text will be
-     * treated as placeholder text and automatically selected when the text box is selected.
-     * @param title name of text box
-     * @param text text to display in textbox
-     * @param img optional image to add to text box
-     * @param text_placeholder makes the text automatially select
-     * @returns
-     */
-    public static centeredTextCreator(title: string, text: string, img?: Doc, text_placeholder?: boolean) {
-        return Docs.Create.TextDocument(RichTextField.textToRtf(text, img?.[Id]), {
-            title, //
-            _layout_autoHeight: true,
-            _layout_centered: true,
-            text_align: 'center',
-            text_placeholder,
-            _layout_fitWidth: true,
-        });
-    }
     public static MakeConfig(rules?: RichTextRules, props?: FormattedTextBoxProps) {
         return {
             schema,
diff --git a/src/fields/Doc.ts b/src/fields/Doc.ts
index 45dfe233f..6ec195910 100644
--- a/src/fields/Doc.ts
+++ b/src/fields/Doc.ts
@@ -1003,7 +1003,7 @@ export namespace Doc {
                     } else if (field instanceof ObjectField) {
                         const docAtKey = doc[key];
                         copy[key] =
-                            docAtKey instanceof Doc && key.includes('layout[')
+                            docAtKey instanceof Doc && (key.includes('layout[') || docAtKey.cloneOnCopy)
                                 ? new ProxyField(Doc.MakeCopy(docAtKey)) // copy the expanded render template
                                 : ObjectField.MakeCopy(field);
                     } else if (field instanceof Promise) {
-- 
cgit v1.2.3-70-g09d2


From 9779182e74e427d3a8a2004d0efd01fac8387d55 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Wed, 16 Oct 2024 17:31:12 -0400
Subject: major fixes to cardDeck view to simplify code and to make arch follow
 a true circle arc and to fix doc sizing when fitwidth/lightbox/etc.  fixes to
 flashcard UI for advancing to next Doc in cardView and carousel3D.

---
 src/client/documents/Documents.ts                  |   4 +-
 src/client/views/DocumentDecorations.tsx           |   4 +-
 .../views/collections/CollectionCardDeckView.scss  |  24 +-
 .../views/collections/CollectionCardDeckView.tsx   | 336 +++++++++++----------
 .../views/collections/CollectionCarousel3DView.tsx |   2 +-
 .../views/collections/CollectionCarouselView.tsx   |   2 +-
 .../views/collections/FlashcardPracticeUI.scss     |   6 +
 .../views/collections/FlashcardPracticeUI.tsx      |   6 +-
 src/client/views/global/globalScripts.ts           |  26 +-
 src/client/views/nodes/ComparisonBox.tsx           |  25 +-
 src/client/views/nodes/DocumentContentsView.tsx    |   1 -
 11 files changed, 230 insertions(+), 206 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index 99af1f1a9..e539e3c65 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -508,8 +508,8 @@ export class DocumentOptions {
     userBackgroundColor?: STRt = new StrInfo('background color associated with a Dash user (seen in header fields of shared documents)');
     userColor?: STRt = new StrInfo('color associated with a Dash user (seen in header fields of shared documents)');
 
-    cardSort?: STRt = new StrInfo('way cards are sorted in deck view');
-    cardSort_isDesc?: BOOLt = new BoolInfo('whether the cards are sorted ascending or descending');
+    card_sort?: STRt = new StrInfo('way cards are sorted in deck view');
+    card_sort_isDesc?: BOOLt = new BoolInfo('whether the cards are sorted ascending or descending');
 }
 
 export const DocOptions = new DocumentOptions();
diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx
index 62f2de776..5a48b6c62 100644
--- a/src/client/views/DocumentDecorations.tsx
+++ b/src/client/views/DocumentDecorations.tsx
@@ -10,7 +10,7 @@ import { lightOrDark, returnFalse, setupMoveUpEvents } from '../../ClientUtils';
 import { Utils, emptyFunction, numberValue } from '../../Utils';
 import { DateField } from '../../fields/DateField';
 import { Doc, DocListCast, Field, FieldType, HierarchyMapping, ReverseHierarchyMap } from '../../fields/Doc';
-import { AclAdmin, AclAugment, AclEdit, DocData } from '../../fields/DocSymbols';
+import { AclAdmin, AclAugment, AclEdit, Animation, DocData } from '../../fields/DocSymbols';
 import { Id } from '../../fields/FieldSymbols';
 import { InkField } from '../../fields/InkField';
 import { ScriptField } from '../../fields/ScriptField';
@@ -650,7 +650,7 @@ export class DocumentDecorations extends ObservableReactComponent<DocumentDecora
         this._forceRender;
         const { b, r, x, y } = this.Bounds;
         const seldocview = DocumentView.Selected().lastElement();
-        if (SnappingManager.IsDragging || r - x < 1 || x === Number.MAX_VALUE || !seldocview || SnappingManager.HideDecorations || isNaN(r) || isNaN(b) || isNaN(x) || isNaN(y)) {
+        if (SnappingManager.IsDragging || r - x < 1 || x === Number.MAX_VALUE || !seldocview || seldocview?.Document[Animation] || SnappingManager.HideDecorations || isNaN(r) || isNaN(b) || isNaN(x) || isNaN(y)) {
             setTimeout(
                 action(() => {
                     this._editingTitle = false;
diff --git a/src/client/views/collections/CollectionCardDeckView.scss b/src/client/views/collections/CollectionCardDeckView.scss
index 0637cd4e9..5283601bf 100644
--- a/src/client/views/collections/CollectionCardDeckView.scss
+++ b/src/client/views/collections/CollectionCardDeckView.scss
@@ -7,23 +7,31 @@
     background-color: white;
     overflow: hidden;
     display: flex;
+    .collectionCardView-inner {
+        display: flex;
+        transform-origin: top left;
+        align-items: center;
+    }
 
     button {
         border-radius: 50%;
     }
 }
 
-.card-wrapper {
-    display: grid;
-    grid-template-columns: repeat(10, 1fr);
+.collectionCardView-flashcardUI {
+    top: 0;
+    position: absolute;
+    width: 100%;
+    height: 100%;
     transform-origin: top left;
+}
 
-    position: absolute;
+.collectionCardView-cardwrapper {
+    display: grid;
+    grid-template-columns: repeat(10, 1fr);
+    transform-origin: left 50%;
     align-items: center;
-    justify-items: center;
-    justify-content: center;
-
-    transition: transform 0.3s cubic-bezier(0.455, 0.03, 0.515, 0.955);
+    z-index: 0; // so that setting z-index of active card doesn't make it land on top of things outside of the card-wrapper
 }
 
 .no-card-span {
diff --git a/src/client/views/collections/CollectionCardDeckView.tsx b/src/client/views/collections/CollectionCardDeckView.tsx
index 14ce9d2af..5faabacf4 100644
--- a/src/client/views/collections/CollectionCardDeckView.tsx
+++ b/src/client/views/collections/CollectionCardDeckView.tsx
@@ -5,7 +5,7 @@ import * as React from 'react';
 import { ClientUtils, DashColor, imageUrlToBase64, returnFalse, returnNever, returnZero } from '../../../ClientUtils';
 import { emptyFunction } from '../../../Utils';
 import { Doc } from '../../../fields/Doc';
-import { DocData } from '../../../fields/DocSymbols';
+import { Animation, DocData } from '../../../fields/DocSymbols';
 import { Id } from '../../../fields/FieldSymbols';
 import { List } from '../../../fields/List';
 import { ScriptField } from '../../../fields/ScriptField';
@@ -96,7 +96,7 @@ export class CollectionCardView extends CollectionSubView() {
                 if (isVis) {
                     this.openChatPopup();
                 } else {
-                    this.Document.cardSort = this.cardSort === cardSortings.Chat ? '' : this.Document.cardSort;
+                    this.Document.card_sort = this.cardSort === cardSortings.Chat ? '' : this.Document.card_sort;
                 }
             }
         );
@@ -119,7 +119,25 @@ export class CollectionCardView extends CollectionSubView() {
     }
 
     @computed get cardSort() {
-        return StrCast(this.Document.cardSort) as cardSortings;
+        return StrCast(this.Document.card_sort) as cardSortings;
+    }
+    /**
+     * Number of rows of cards to be rendered
+     */
+    @computed get numRows() {
+        return Math.ceil(this.sortedDocs.length / this._maxRowCount);
+    }
+    /**
+     * Circle arc size, in radians, to layout cards
+     */
+    @computed get archAngle() {
+        return NumCast(this.layoutDoc.card_arch, 90) * (Math.PI / 180) * (this.childCards.length < this._maxRowCount ? this.childCards.length / this._maxRowCount : 1);
+    }
+    /**
+     * Spacing card rows as a percent of Doc size.   100 means rows spread out to fill 100% of the Doc vertically.  Default is 60%
+     */
+    @computed get cardSpacing() {
+        return NumCast(this.layoutDoc.card_spacing, 60);
     }
 
     /**
@@ -137,6 +155,10 @@ export class CollectionCardView extends CollectionSubView() {
         return (this.childPanelWidth() * length) / this._props.PanelWidth();
     }
 
+    @computed get nativeScaling() {
+        return this._props.NativeDimScaling?.() || 1;
+    }
+
     /**
      * When in quiz mode, randomly selects a document
      */
@@ -145,70 +167,17 @@ export class CollectionCardView extends CollectionSubView() {
         this._curDoc = this.childDocs[randomIndex];
     });
 
-    /**
-     * Number of rows of cards to be rendered
-     */
-    @computed get numRows() {
-        return Math.ceil(this.sortedDocs.length / this._maxRowCount);
-    }
-
-    @action
-    setHoveredNodeIndex = (index: number) => {
+    setHoveredNodeIndex = action((index: number) => {
         if (!SnappingManager.IsDragging) this._hoveredNodeIndex = index;
-    };
+    });
 
     isSelected = (doc: Doc) => this._docRefs.get(doc)?.IsSelected;
-    childPanelWidth = () => NumCast(this.layoutDoc.childPanelWidth, this._props.PanelWidth() / 2);
+    childPanelWidth = () => NumCast(this.layoutDoc.childPanelWidth, Math.max(150, this._props.PanelWidth() / (this.childCards.length > this._maxRowCount ? this._maxRowCount : this.childCards.length) / this.nativeScaling));
     childPanelHeight = () => this._props.PanelHeight() * this.fitContentScale;
     onChildDoubleClick = () => ScriptCast(this.layoutDoc.onChildDoubleClick);
     isContentActive = () => this._props.isSelected() || this._props.isContentActive() || this.isAnyChildContentActive();
     isAnyChildContentActive = this._props.isAnyChildContentActive;
 
-    /**
-     * Returns the degree to rotate a card dependind on the amount of cards in their row and their index in said row
-     * @param amCards
-     * @param index
-     * @returns
-     */
-    rotate = (amCards: number, index: number) => {
-        if (amCards == 1) return 0;
-
-        const possRotate = -30 + index * (30 / ((amCards - (amCards % 2)) / 2));
-        if (amCards % 2 === 0) {
-            if (possRotate === 0) {
-                return possRotate + Math.abs(-30 + (index - 1) * (30 / (amCards / 2)));
-            }
-            if (index > (amCards + 1) / 2) {
-                const stepMag = Math.abs(-30 + (amCards / 2 - 1) * (30 / ((amCards - (amCards % 2)) / 2)));
-                return possRotate + stepMag;
-            }
-        }
-
-        return possRotate;
-    };
-    /**
-     * Returns the degree to which a card should be translated in the y direction for the arch effect
-     */
-    translateY = (amCards: number, index: number, realIndex: number) => {
-        const evenOdd = amCards % 2;
-        const apex = (amCards - evenOdd) / 2;
-        const Magnitude = this.childPanelWidth() / 2; // 400
-        const stepMag = Magnitude / 2 / ((amCards - evenOdd) / 2) + Math.abs((apex - index) * 25);
-
-        let rowOffset = 0;
-        if (realIndex > this._maxRowCount - 1) {
-            rowOffset = Magnitude * ((realIndex - (realIndex % this._maxRowCount)) / this._maxRowCount);
-        }
-        if (evenOdd === 1 || index < apex - 1) {
-            return Math.abs(stepMag * (apex - index)) - rowOffset;
-        }
-        if (index === apex || index === apex - 1) {
-            return 0 - rowOffset;
-        }
-
-        return Math.abs(stepMag * (apex - index - 1)) - rowOffset;
-    };
-
     /**
      * When dragging a card, determines the index the card should be set to if dropped
      * @param mouseX mouse's x location
@@ -216,28 +185,27 @@ export class CollectionCardView extends CollectionSubView() {
      * @returns the card's new index
      */
     findCardDropIndex = (mouseX: number, mouseY: number) => {
-        const amCardsTotal = this.sortedDocs.length;
+        const cardCount = this.sortedDocs.length;
         let index = 0;
-        const cardWidth = amCardsTotal < this._maxRowCount ? this._props.PanelWidth() / amCardsTotal : this._props.PanelWidth() / this._maxRowCount;
+        const cardWidth = cardCount < this._maxRowCount ? this._props.PanelWidth() / cardCount : this._props.PanelWidth() / this._maxRowCount;
 
         // Calculate the adjusted X position accounting for the initial offset
         let adjustedX = mouseX;
 
-        const amRows = Math.ceil(amCardsTotal / this._maxRowCount);
-        const rowHeight = this._props.PanelHeight() / amRows;
+        const rowHeight = this._props.PanelHeight() / this.numRows;
         const currRow = Math.floor((mouseY - 100) / rowHeight); //rows start at 0
 
         if (adjustedX < 0) {
             return 0; // Before the first column
         }
 
-        if (amCardsTotal < this._maxRowCount) {
+        if (cardCount < this._maxRowCount) {
             index = Math.floor(adjustedX / cardWidth);
-        } else if (currRow != amRows - 1) {
+        } else if (currRow != this.numRows - 1) {
             index = Math.floor(adjustedX / cardWidth) + currRow * this._maxRowCount;
         } else {
-            const rowAmCards = amCardsTotal - currRow * this._maxRowCount;
-            const offset = ((this._maxRowCount - rowAmCards) / 2) * cardWidth;
+            const cardsInRow = cardCount - currRow * this._maxRowCount;
+            const offset = ((this._maxRowCount - cardsInRow) / 2) * cardWidth;
             adjustedX = mouseX - offset;
 
             index = Math.floor(adjustedX / cardWidth) + currRow * this._maxRowCount;
@@ -246,11 +214,14 @@ export class CollectionCardView extends CollectionSubView() {
     };
 
     /**
-     * Checks to see if a card is being dragged and calls the appropriate methods if so
+     * if pointer moves over cardDeck while dragging a Doc that is in the Deck or that can be dropped in the deck,
+     * then this sets the card index where the dragged card would be added.
      */
     @action
     onPointerMove = (x: number, y: number) => {
-        this._docDraggedIndex = DragManager.docsBeingDragged.length ? this.findCardDropIndex(x, y) : -1;
+        if (DragManager.docsBeingDragged.some(doc => this.sortedDocs.includes(doc)) || SnappingManager.CanEmbed) {
+            this._docDraggedIndex = this.findCardDropIndex(x, y);
+        }
     };
 
     /**
@@ -269,7 +240,7 @@ export class CollectionCardView extends CollectionSubView() {
                     const sorted = this.sortedDocs;
                     const originalIndex = sorted.findIndex(doc => doc === draggedDoc);
 
-                    this.Document.cardSort = '';
+                    this.Document.card_sort = '';
                     originalIndex !== -1 && sorted.splice(originalIndex, 1);
                     sorted.splice(dragIndex, 0, draggedDoc);
                     if (de.complete.docDragData.removeDocument?.(draggedDoc)) {
@@ -285,15 +256,6 @@ export class CollectionCardView extends CollectionSubView() {
         ''
     );
 
-    @computed get sortedDocs() {
-        return this.sort(
-            this.childCards.map(card => card.layout),
-            this.cardSort,
-            BoolCast(this.Document.cardSort_isDesc),
-            this._docDraggedIndex
-        );
-    }
-
     /**
      * Used to determine how to sort cards based on tags. The leftmost tags are given lower values while cards to the right are
      * given higher values. Decimals are used to determine placement for cards with multiple tags
@@ -341,6 +303,15 @@ export class CollectionCardView extends CollectionSubView() {
         return docs;
     };
 
+    @computed get sortedDocs() {
+        return this.sort(
+            this.childCards.map(card => card.layout),
+            this.cardSort,
+            BoolCast(this.Document.card_sort_isDesc),
+            this._docDraggedIndex
+        );
+    }
+
     isChildContentActive = computedFn(
         (doc: Doc) => () =>
             this._props.isContentActive?.() === false
@@ -359,74 +330,99 @@ export class CollectionCardView extends CollectionSubView() {
             Document={doc}
             NativeWidth={returnZero}
             NativeHeight={returnZero}
-            fitWidth={returnFalse}
-            onDoubleClickScript={this.onChildDoubleClick}
+            PanelWidth={this.childPanelWidth}
+            PanelHeight={this.childPanelHeight}
             renderDepth={this._props.renderDepth + 1}
             LayoutTemplate={this._props.childLayoutTemplate}
             LayoutTemplateString={this._props.childLayoutString}
             containerViewPath={this.childContainerViewPath}
             ScreenToLocalTransform={screenToLocalTransform} // makes sure the box wrapper thing is in the right spot
             isDocumentActive={this._props.childDocumentsActive?.() || this.Document._childDocumentsActive ? this._props.isDocumentActive : this.isContentActive}
-            PanelWidth={this.childPanelWidth}
-            PanelHeight={this.childPanelHeight}
+            isContentActive={this.isChildContentActive(doc)}
+            fitWidth={returnFalse}
             waitForDoubleClickToClick={returnNever}
             scriptContext={this}
+            onDoubleClickScript={this.onChildDoubleClick}
             onClickScript={this._curDoc === doc ? undefined : this._clickScript}
             dontCenter="y" // Don't center it vertically, because the grid it's in is already doing that and we don't want to do it twice.
             dragAction={(this.Document.childDragAction ?? this._props.childDragAction) as dropActionType}
             showTags={BoolCast(this.layoutDoc.showChildTags)}
             whenChildContentsActiveChanged={this._props.whenChildContentsActiveChanged}
-            isContentActive={this.isChildContentActive(doc)}
             dontHideOnDrag
         />
     );
 
     /**
      * Determines how many cards are in the row of a card at a specific index
-     * @param index
-     * @returns
+     * @param index numerical index of card in total list of all cards
+     * @returns number of cards in row that contains index
      */
-    overflowAmCardsCalc = (index: number) => {
-        if (this.sortedDocs.length < this._maxRowCount) {
-            return this.sortedDocs.length;
+    cardsInRowThatIncludesCardIndex = (index: number) => {
+        if (this.childCards.length < this._maxRowCount) {
+            return this.childCards.length;
         }
-        const totalCards = this.sortedDocs.length;
-        // if 9 or less
+        const totalCards = this.childCards.length;
         if (index < totalCards - (totalCards % this._maxRowCount)) {
             return this._maxRowCount;
         }
         return totalCards % this._maxRowCount;
     };
     /**
-     * Determines the index a card is in in a row
-     * @param realIndex
-     * @returns
+     * Determines the index a card is in in a row.  If the row is not full, then the cards
+     * are centered within the row (as if unrendered cards had been added to the start and end
+     * of the row) and the retuned index is the index the card in this virtual full row.
+     * @param index numerical index of card in total list of all cards
+     * @returns index of card in its row, normalized to a full size row
      */
-    overflowIndexCalc = (realIndex: number) => realIndex % this._maxRowCount;
+    centeredIndexOfCardInRow = (index: number) => {
+        const cardsInRow = this.cardsInRowThatIncludesCardIndex(index);
+        const lineIndex = index % this._maxRowCount;
+        if (cardsInRow === this._maxRowCount) return lineIndex;
+        return lineIndex + (this._maxRowCount - cardsInRow) / 2;
+    };
     /**
-     * Translates the cards in the second rows and beyond over to the right
-     * @param realIndex
-     * @param calcIndex
-     * @param calcRowCards
-     * @returns
+     * Returns the rotation of a card in radians based on its horizontal location (and thus m apping to a circle arc).
+     * The amount of rotation is goverend by the Doc's card_arch field which specifies, in degrees, the range of a circle
+     * arc that cards should cover -- by default, -45 to 45 degrees.
+     * @param index numerical index of card in total list of all cards
+     * @returns angle of rotation in radians
+     */
+    rotate = (index: number) => {
+        const cardsInRow = this.cardsInRowThatIncludesCardIndex(index);
+        const centeredIndexInRow = (cardsInRow < this._maxRowCount ? index + (this._maxRowCount - cardsInRow) / 2 : index) % this._maxRowCount;
+        const rowIndexMax = this._maxRowCount - 1;
+        return ((this.archAngle / 2) * (centeredIndexInRow - rowIndexMax / 2)) / (rowIndexMax / 2);
+    };
+    /**
+     * Provides a vertical adjustment to a card's grid position so that it will lie along an arch.
+     * @param index numerical index of card in total list of all cards
+     */
+    translateY = (index: number) => {
+        const Magnitude = ((this._props.PanelHeight() * this.fitContentScale) / 2) * Math.sqrt(((this.archAngle * (180 / Math.PI)) / 60) * 4);
+        return Magnitude * (1 - Math.sin(this.rotate(index) + Math.PI / 2) - (1 - Math.sin(this.archAngle / 2 + Math.PI / 2)) / 2);
+    };
+    /**
+     * When the card index is for a row (not the first row) that is not full, this returns a horizontal adjustment that centers the row
+     * @param index index of card from start of deck
+     * @param cardsInRow number of cards in the row containing the indexed card
+     * @returns horizontal pixel translation
      */
-    translateOverflowX = (realIndex: number, calcRowCards: number) => (realIndex < this._maxRowCount ? 0 : (this._maxRowCount - calcRowCards) * (this.childPanelWidth() / 2));
+    horizontalAdjustmentForPartialRows = (index: number, cardsInRow: number) => (index < this._maxRowCount ? 0 : (this._maxRowCount - cardsInRow) * (this.childPanelWidth() / 2));
 
     /**
-     * Determines how far to translate a card in the y direction depending on its index and if it's selected
+     * Adjusts the vertical placement of the card from its grid position so that it will either line on a
+     * circular arc if the card isn't active, or so that it will be centered otherwise.
      * @param isActive whether the card is focused for interaction
-     * @param realIndex index of card from start of deck
-     * @param amCards ??
-     * @param calcRowIndex index of card from start of row
-     * @returns Y translation of card
+     * @param index index of card from start of deck
+     * @returns vertical pixel translation
      */
-    calculateTranslateY = (isActive: boolean, realIndex: number, amCards: number, calcRowIndex: number) => {
-        const rowHeight = (this._props.PanelHeight() * this.fitContentScale) / this.numRows;
-        const rowIndex = Math.trunc(realIndex / this._maxRowCount);
+    adjustCardYtoFitArch = (isActive: boolean, index: number) => {
+        const rowHeight = this._props.PanelHeight() / this.numRows;
+        const rowIndex = Math.floor(index / this._maxRowCount);
         const rowToCenterShift = this.numRows / 2 - rowIndex;
-        if (isActive) return rowToCenterShift * rowHeight - rowHeight / 2;
-        if (amCards == 1) return 50 * this.fitContentScale;
-        return this.translateY(amCards, calcRowIndex, realIndex);
+        return isActive
+            ? (rowToCenterShift * rowHeight - rowHeight / 2) * ((this.cardSpacing * this.fitContentScale) / 100) //
+            : this.translateY(index);
     };
 
     /**
@@ -493,7 +489,7 @@ export class CollectionCardView extends CollectionSubView() {
         }
 
         if (questionType === '6') {
-            this.Document.cardSort = 'chat';
+            this.Document.card_sort = 'chat';
         }
 
         listItems.forEach((item, index) => {
@@ -549,7 +545,7 @@ export class CollectionCardView extends CollectionSubView() {
         await this.childPairStringListAndUpdateSortDesc();
     };
 
-    childScreenToLocal = computedFn((doc: Doc, index: number, calcRowIndex: number, isSelected: boolean, amCards: number) => () => {
+    childScreenToLocal = computedFn((doc: Doc, index: number, isSelected: boolean) => () => {
         // need to explicitly trigger an invalidation since we're reading everything from the Dom
         this._forceChildXf;
         this._props.ScreenToLocalTransform();
@@ -560,24 +556,40 @@ export class CollectionCardView extends CollectionSubView() {
 
         return new Transform(-translateX + (dref?.centeringX || 0) * scale, 
                              -translateY + (dref?.centeringY || 0) * scale, 1)
-                  .scale(1 / scale).rotate(!isSelected ? -this.rotate(amCards, calcRowIndex) : 0); // prettier-ignore
+                  .scale(1 / scale).rotate(!isSelected ? -this.rotate(this.centeredIndexOfCardInRow(index)) : 0); // prettier-ignore
     });
 
+    /**
+     * Releases the currently focused Doc by deselecting it and returning it to its location on the arch, and selecting the
+     * cardDeck itself.
+     * This will also force the Doc to recompute its layout transform when the animation completes.
+     * In addition, this sets an animating flag on the Doc so that it will receive no poiner events when animating, such as hover
+     * events that would trigger a flashcard to flip.
+     * @param doc doc that will be animated away from center focus
+     */
+    releaseCurDoc = action(() => {
+        const selDoc = this._curDoc;
+        this._curDoc = undefined;
+        const cardDocView = DocumentView.getDocumentView(selDoc, this.DocumentView?.());
+        if (cardDocView && selDoc) {
+            DocumentView.DeselectView(cardDocView);
+            this._props.select(false);
+            selDoc[Animation] = selDoc; // turns off pointer events & doc decorations while animating - useful for flashcards that reveal back on hover
+            setTimeout(action(() => {
+                selDoc[Animation] = undefined;
+                this._forceChildXf++;
+            }), 350); // prettier-ignore
+        }
+    });
+
+    /**
+     * turns off the _dropped flag at the end of a drag/drop, or releases the focused Doc if a different Doc is clicked
+     */
     cardPointerUp = action((doc: Doc) => {
-        // if a card doc has just moved, or a card is selected and in front, then ignore this event
         if (this._curDoc === doc || this._dropped) {
             this._dropped = false;
         } else {
-            // otherwise, turn off documentDecorations becase we're in a selection transition and want to avoid artifacts.
-            // Turn them back on when the animation has completed and the render and backend structures are in synch
-            SnappingManager.SetHideDecorations(true);
-            setTimeout(
-                action(() => {
-                    SnappingManager.SetHideDecorations(false);
-                    this._forceChildXf++;
-                }),
-                1000
-            );
+            this.releaseCurDoc(); // NOTE: the onClick script for the card will select the new card (ie, 'doc')
         }
     });
 
@@ -585,25 +597,17 @@ export class CollectionCardView extends CollectionSubView() {
      * Actually renders all the cards
      */
     @computed get renderCards() {
-        if (!this.childCards.length) {
-            return null;
-        }
-
+        console.log('CHILDPw = ' + this.childPanelWidth());
         // Map sorted documents to their rendered components
         return this.sortedDocs.map((doc, index) => {
-            const calcRowIndex = this.overflowIndexCalc(index);
-            const amCards = this.overflowAmCardsCalc(index);
+            const cardsInRow = this.cardsInRowThatIncludesCardIndex(index);
+
+            const childScreenToLocal = this.childScreenToLocal(doc, index, doc === this._curDoc);
 
-            const childScreenToLocal = this.childScreenToLocal(doc, index, calcRowIndex, doc === this._curDoc, amCards);
+            const translateToCenterIfActive = () => (doc === this._curDoc ? (cardsInRow / 2 - (index % this._maxRowCount)) * 100 - 50 : 0);
 
-            const translateIfSelected = () => {
-                const indexInRow = index % this._maxRowCount;
-                const rowIndex = Math.trunc(index / this._maxRowCount);
-                const rowCenterIndex = Math.min(this._maxRowCount, this.sortedDocs.length - rowIndex * this._maxRowCount) / 2;
-                return (rowCenterIndex - indexInRow) * 100 - 50;
-            };
             const aspect = NumCast(doc.height) / NumCast(doc.width, 1);
-            const vscale = Math.max(1,Math.min((this._props.PanelHeight() * 0.95 * this.fitContentScale) / (aspect * this.childPanelWidth()), 
+            const vscale = Math.max(1,Math.min((this._props.PanelHeight() * 0.95 * this.fitContentScale * this.nativeScaling) / (aspect * this.childPanelWidth()), 
                                     (this._props.PanelHeight() - 80) / (aspect * (this._props.PanelWidth() / 10)))); // prettier-ignore
             const hscale = Math.min(this.sortedDocs.length, this._maxRowCount) / 2; // bcz: hack - the grid is divided evenly into maxRowCount cells, so the max scaling would be maxRowCount -- but making things that wide is ugly, so cap it off at half the window size
             return (
@@ -614,9 +618,9 @@ export class CollectionCardView extends CollectionSubView() {
                     style={{
                         width: this.childPanelWidth(),
                         height: 'max-content',
-                        transform: `translateY(${this.calculateTranslateY(doc === this._curDoc, index, amCards, calcRowIndex)}px)
-                                    translateX(calc(${doc === this._curDoc ? translateIfSelected() : 0}% + ${this.translateOverflowX(index, amCards)}px))
-                                    rotate(${doc !== this._curDoc ? this.rotate(amCards, calcRowIndex) : 0}deg)
+                        transform: `translateY(${this.adjustCardYtoFitArch(doc === this._curDoc, index)}px)
+                                    translateX(calc(${translateToCenterIfActive()}% + ${this.horizontalAdjustmentForPartialRows(index, cardsInRow)}px))
+                                    rotate(${doc !== this._curDoc ? this.rotate(index) : 0}rad)
                                     scale(${doc === this._curDoc ? `${Math.min(hscale, vscale) * 100}%` : this._hoveredNodeIndex === index ? 1.1 : 1})`,
                     }} // prettier-ignore
                     onPointerEnter={() => this.setHoveredNodeIndex(index)}
@@ -636,26 +640,19 @@ export class CollectionCardView extends CollectionSubView() {
         ScreenToLocalTransform: this.contentScreenToLocalXf,
     });
     answered = action(() => {
-        this._curDoc = this.curDoc ? this.filteredChildDocs()[(this.filteredChildDocs().findIndex(this.curDoc) + 1) % (this.filteredChildDocs().length || 1)] : undefined;
+        this._curDoc = this.curDoc ? this.filteredChildDocs()[(this.filteredChildDocs().findIndex(d => d === this.curDoc()) + 1) % (this.filteredChildDocs().length || 1)] : undefined;
     });
     curDoc = () => this._curDoc;
 
     render() {
-        const isEmpty = this.childCards.length === 0;
+        const fitContentScale = this.childCards.length === 0 ? 1 : this.fitContentScale;
         return (
             <div
                 className="collectionCardView-outer"
                 ref={(ele: HTMLDivElement | null) => this.createDashEventsTarget(ele)}
-                onPointerDown={action(() => {
-                    this._curDoc = undefined;
-                    SnappingManager.SetHideDecorations(true);
-                    setTimeout(
-                        action(() => {
-                            SnappingManager.SetHideDecorations(false);
-                            this._forceChildXf++;
-                        }),
-                        1000
-                    );
+                onPointerDown={action(e => {
+                    if (e.button === 2 || e.ctrlKey) return;
+                    this.releaseCurDoc();
                 })}
                 onPointerLeave={action(() => (this._docDraggedIndex = -1))}
                 onPointerMove={e => this.onPointerMove(...this._props.ScreenToLocalTransform().transformPoint(e.clientX, e.clientY))}
@@ -665,16 +662,31 @@ export class CollectionCardView extends CollectionSubView() {
                     color: this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.Color) as string,
                 }}>
                 <div
-                    className="card-wrapper"
+                    className="collectionCardView-inner"
                     style={{
-                        ...(!isEmpty && { transform: `scale(${1 / this.fitContentScale})` }),
-                        ...{ height: `${100 * (isEmpty ? 1 : this.fitContentScale)}%` },
-                        ...{ width: `${100 * (isEmpty ? 1 : this.fitContentScale)}%` },
-                        gridAutoRows: `${100 / this.numRows}%`,
+                        transform: `scale(${1 / fitContentScale})`,
+                        height: `${100 * fitContentScale}%`,
+                        width: `${100 * fitContentScale}%`,
                     }}>
-                    {this.renderCards}
+                    <div
+                        className="collectionCardView-cardwrapper"
+                        style={{
+                            gridAutoRows: `${100 / this.numRows}%`,
+                            height: `${this.cardSpacing}%`,
+                        }}>
+                        {this.renderCards}
+                    </div>
+                    <div
+                        className="collectionCardView-flashcardUI"
+                        style={{
+                            pointerEvents: this.childCards.length === 0 ? undefined : 'none',
+                            height: `${100 / this.nativeScaling / fitContentScale}%`,
+                            width: `${100 / this.nativeScaling / fitContentScale}%`,
+                            transform: `scale(${this.nativeScaling * fitContentScale})`,
+                        }}>
+                        {this.flashCardUI(this.curDoc, this.docViewProps, this.answered)}
+                    </div>
                 </div>
-                {this.flashCardUI(this.curDoc, this.docViewProps, this.answered)}
             </div>
         );
     }
diff --git a/src/client/views/collections/CollectionCarousel3DView.tsx b/src/client/views/collections/CollectionCarousel3DView.tsx
index e9ace733e..a71cc43ba 100644
--- a/src/client/views/collections/CollectionCarousel3DView.tsx
+++ b/src/client/views/collections/CollectionCarousel3DView.tsx
@@ -205,7 +205,7 @@ export class CollectionCarousel3DView extends CollectionSubView() {
 
     onPassiveWheel = (e: WheelEvent) => e.stopPropagation();
     curDoc = () => this.carouselItems[NumCast(this.layoutDoc._carousel_index)]?.layout;
-    answered = (correct: boolean) => (!correct || !this.curDoc()) && this.changeSlide(1);
+    answered = (correct: boolean) => (!correct || !this.curDoc() || NumCast(this.layoutDoc._carousel_index) === this.carouselItems.length - 1) && this.changeSlide(1);
     docViewProps = () => ({
         ...this._props, //
         isDocumentActive: this._props.childDocumentsActive?.() ? this._props.isDocumentActive : this._props.isContentActive,
diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index ff587b199..1f2bc908f 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -203,7 +203,7 @@ export class CollectionCarouselView extends CollectionSubView() {
         isContentActive: this.isChildContentActive,
         ScreenToLocalTransform: this.contentScreenToLocalXf,
     });
-    answered = () => this.advance();
+    answered = (correct: boolean) => (!correct || !this.curDoc() || NumCast(this.layoutDoc._carousel_index) === this.carouselItems.length - 1) && this.advance();
 
     render() {
         return (
diff --git a/src/client/views/collections/FlashcardPracticeUI.scss b/src/client/views/collections/FlashcardPracticeUI.scss
index 4ed27793d..210c6798f 100644
--- a/src/client/views/collections/FlashcardPracticeUI.scss
+++ b/src/client/views/collections/FlashcardPracticeUI.scss
@@ -1,3 +1,9 @@
+.FlashcardPracticeUI {
+    width: 100%;
+    height: 100%;
+    display: flex;
+    align-items: center;
+}
 .FlashcardPracticeUI-remove,
 .FlashcardPracticeUI-check {
     position: absolute;
diff --git a/src/client/views/collections/FlashcardPracticeUI.tsx b/src/client/views/collections/FlashcardPracticeUI.tsx
index 79eb7f107..ec892ee3d 100644
--- a/src/client/views/collections/FlashcardPracticeUI.tsx
+++ b/src/client/views/collections/FlashcardPracticeUI.tsx
@@ -104,8 +104,8 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
         const setPracticeVal = (e: React.MouseEvent, val: string) => {
             e.stopPropagation();
             const curDoc = this._props.curDoc();
-            curDoc && (curDoc[this.practiceField] = val);
             this._props.advance?.(val === practiceVal.CORRECT);
+            curDoc && (curDoc[this.practiceField] = val);
         };
 
         return this.practiceMode == practiceMode.PRACTICE && this._props.curDoc() ? (
@@ -182,7 +182,7 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
     tryFilterOut = (doc: Doc) => (this.practiceMode && BoolCast(doc?._layout_isFlashcard) && doc[this.practiceField] === practiceVal.CORRECT ? true : false); // show only cards that aren't marked as correct
     render() {
         return (
-            <>
+            <div className="FlashcardPracticeUI">
                 {this.emptyMessage}
                 {this.practiceButtons}
                 {this._props.layoutDoc._chromeHidden ? null : (
@@ -208,7 +208,7 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
                         {this.practiceModesMenu}
                     </div>
                 )}
-            </>
+            </div>
         );
     }
 }
diff --git a/src/client/views/global/globalScripts.ts b/src/client/views/global/globalScripts.ts
index 903e04ad7..954c79f7d 100644
--- a/src/client/views/global/globalScripts.ts
+++ b/src/client/views/global/globalScripts.ts
@@ -189,38 +189,38 @@ ScriptingGlobals.add(function showFreeform(
             setDoc: (doc: Doc, dv: DocumentView) => { Doc.UserDoc().defaultToFlashcards = !Doc.UserDoc().defaultToFlashcards}, // prettier-ignore
         }],
         ['time', {
-            checkResult: (doc: Doc) => StrCast(doc?.cardSort) === "time",
-            setDoc: (doc: Doc, dv: DocumentView) => { doc.cardSort === "time" ? doc.cardSort = '' : doc.cardSort = 'time'}, // prettier-ignore
+            checkResult: (doc: Doc) => StrCast(doc?.card_sort) === "time",
+            setDoc: (doc: Doc, dv: DocumentView) => { doc.card_sort === "time" ? doc.card_sort = '' : doc.card_sort = 'time'}, // prettier-ignore
         }],
         ['docType', {
-            checkResult: (doc: Doc) => StrCast(doc?.cardSort) === "type",
-            setDoc: (doc: Doc, dv: DocumentView) => { doc.cardSort === "type" ? doc.cardSort = '' : doc.cardSort = 'type'}, // prettier-ignore
+            checkResult: (doc: Doc) => StrCast(doc?.card_sort) === "type",
+            setDoc: (doc: Doc, dv: DocumentView) => { doc.card_sort === "type" ? doc.card_sort = '' : doc.card_sort = 'type'}, // prettier-ignore
         }],
         ['color', {
-            checkResult: (doc: Doc) => StrCast(doc?.cardSort) === "color",
-            setDoc: (doc: Doc, dv: DocumentView) => { doc.cardSort === "color" ? doc.cardSort = '' : doc.cardSort = 'color'}, // prettier-ignore
+            checkResult: (doc: Doc) => StrCast(doc?.card_sort) === "color",
+            setDoc: (doc: Doc, dv: DocumentView) => { doc.card_sort === "color" ? doc.card_sort = '' : doc.card_sort = 'color'}, // prettier-ignore
         }],
         ['tag', {
-            checkResult: (doc: Doc) => StrCast(doc?.cardSort) === "tag",
-            setDoc: (doc: Doc, dv: DocumentView) => { doc.cardSort === "tag" ? doc.cardSort = '' : doc.cardSort = 'tag'}, // prettier-ignore
+            checkResult: (doc: Doc) => StrCast(doc?.card_sort) === "tag",
+            setDoc: (doc: Doc, dv: DocumentView) => { doc.card_sort === "tag" ? doc.card_sort = '' : doc.card_sort = 'tag'}, // prettier-ignore
         }],
         ['up', {
-            checkResult: (doc: Doc) => BoolCast(!doc?.cardSort_isDesc),
+            checkResult: (doc: Doc) => BoolCast(!doc?.card_sort_isDesc),
             setDoc: (doc: Doc, dv: DocumentView) => {
-                doc.cardSort_isDesc = false;
+                doc.card_sort_isDesc = false;
             },
         }],
         ['down', {
-            checkResult: (doc: Doc) => BoolCast(doc?.cardSort_isDesc),
+            checkResult: (doc: Doc) => BoolCast(doc?.card_sort_isDesc),
             setDoc: (doc: Doc, dv: DocumentView) => {
-                doc.cardSort_isDesc = true;
+                doc.card_sort_isDesc = true;
             },
         }],
         ['toggle-chat', {
             checkResult: (doc: Doc) => GPTPopup.Instance.visible,
             setDoc: (doc: Doc, dv: DocumentView) => {
                 if (GPTPopup.Instance.visible){
-                    doc.cardSort = ''
+                    doc.card_sort = ''
                     GPTPopup.Instance.setVisible(false);
    
                 } else {
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 38ce5f2f7..3c126ea4a 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -8,7 +8,7 @@ import ReactLoading from 'react-loading';
 import { imageUrlToBase64, returnFalse, returnNone, returnTrue, returnZero, setupMoveUpEvents } from '../../../ClientUtils';
 import { emptyFunction } from '../../../Utils';
 import { Doc, Opt } from '../../../fields/Doc';
-import { DocData } from '../../../fields/DocSymbols';
+import { Animation, DocData } from '../../../fields/DocSymbols';
 import { RichTextField } from '../../../fields/RichTextField';
 import { BoolCast, DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
 import { nullAudio } from '../../../fields/URLField';
@@ -18,7 +18,6 @@ import { DocumentType } from '../../documents/DocumentTypes';
 import { Docs } from '../../documents/Documents';
 import { DragManager } from '../../util/DragManager';
 import { dropActionType } from '../../util/DropActionTypes';
-import { SnappingManager } from '../../util/SnappingManager';
 import { undoable } from '../../util/UndoManager';
 import { ContextMenu } from '../ContextMenu';
 import { ViewBoxAnnotatableComponent } from '../DocComponent';
@@ -235,7 +234,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @computed get uiBtnScaling() { return Math.max(this.maxWidgetSize / this._sideBtnWidth, 1) * Math.min(1, this.viewScaling)* (this._props.NativeDimScaling?.() ?? 1); } // prettier-ignore
 
     @computed get flashcardMenu() {
-        return SnappingManager.HideDecorations ? null : (
+        return (
             <div className="comparisonBox-bottomMenu" style={{ transform: `scale(${this.uiBtnScaling})` }}>
                 {this.revealOpHover || !this._props.isSelected() ? null : this.overlayAlternateIcon}
                 {!this._props.isSelected() || this._renderSide === this.frontKey ? null : (
@@ -666,20 +665,20 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             <>
                 <DocumentView
                     {...this._props}
-                    showTags={undefined}
-                    fitWidth={undefined} // set to returnTrue to make images fill the comparisonBox-- should be a user option
-                    ignoreUsePath={layoutString ? true : undefined}
-                    renderDepth={this.props.renderDepth + 1}
-                    LayoutTemplateString={layoutString}
                     Document={layoutString ? this.Document : targetDoc}
-                    containerViewPath={this._props.docViewPath}
-                    moveDocument={whichSlot === this.frontKey ? this.moveDocFront : this.moveDocBack}
-                    removeDocument={whichSlot === this.frontKey ? this.remDocFront : this.remDocBack}
                     NativeWidth={returnZero}
                     NativeHeight={returnZero}
+                    renderDepth={this.props.renderDepth + 1}
+                    LayoutTemplateString={layoutString}
+                    containerViewPath={this._props.docViewPath}
                     ScreenToLocalTransform={this.contentScreenToLocalXf}
-                    isContentActive={this.childActiveFunc}
                     isDocumentActive={returnFalse}
+                    isContentActive={this.childActiveFunc}
+                    showTags={undefined}
+                    fitWidth={undefined} // set to returnTrue to make images fill the comparisonBox-- should be a user option
+                    ignoreUsePath={layoutString ? true : undefined}
+                    moveDocument={whichSlot === this.frontKey ? this.moveDocFront : this.moveDocBack}
+                    removeDocument={whichSlot === this.frontKey ? this.remDocFront : this.remDocBack}
                     dontSelect={returnTrue}
                     whenChildContentsActiveChanged={this.whenChildContentsActiveChanged}
                     styleProvider={this._childActive ? this._props.styleProvider : this.docStyleProvider}
@@ -795,7 +794,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             [flashcardRevealOp.SLIDE, this.renderAsBeforeAfter]]); // prettier-ignore
         if (this.isQuizMode) this.renderAsQuiz(this.frontText);
         return (
-            <div className="comparisonBox" style={{ pointerEvents: this._props.isContentActive() ? 'unset' : undefined }} onContextMenu={this.flashcardContextMenu}>
+            <div className="comparisonBox" style={{ pointerEvents: this._props.isContentActive() && !this.Document[Animation] ? 'unset' : undefined }} onContextMenu={this.flashcardContextMenu}>
                 {renderMode.get(this.revealOp)?.() ?? null}
                 {this.loading ? (
                     <div className="loading-spinner">
diff --git a/src/client/views/nodes/DocumentContentsView.tsx b/src/client/views/nodes/DocumentContentsView.tsx
index 9aa000ba7..aab8a183a 100644
--- a/src/client/views/nodes/DocumentContentsView.tsx
+++ b/src/client/views/nodes/DocumentContentsView.tsx
@@ -1,4 +1,3 @@
-/* eslint-disable react/require-default-props */
 import { computed, makeObservable } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
-- 
cgit v1.2.3-70-g09d2


From dd93f5175064850c6c0e47f025cd7bbba1f23106 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Thu, 17 Oct 2024 17:19:11 -0400
Subject: fixed quizMode to actually render and to get pointer events.

---
 src/client/views/collections/CollectionCardDeckView.tsx | 14 +++++++++++++-
 src/client/views/nodes/ComparisonBox.scss               |  3 +++
 src/client/views/nodes/ComparisonBox.tsx                |  5 +++--
 3 files changed, 19 insertions(+), 3 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/collections/CollectionCardDeckView.tsx b/src/client/views/collections/CollectionCardDeckView.tsx
index 5faabacf4..b86dad9d7 100644
--- a/src/client/views/collections/CollectionCardDeckView.tsx
+++ b/src/client/views/collections/CollectionCardDeckView.tsx
@@ -4,7 +4,7 @@ import { computedFn } from 'mobx-utils';
 import * as React from 'react';
 import { ClientUtils, DashColor, imageUrlToBase64, returnFalse, returnNever, returnZero } from '../../../ClientUtils';
 import { emptyFunction } from '../../../Utils';
-import { Doc } from '../../../fields/Doc';
+import { Doc, DocListCast, Opt } from '../../../fields/Doc';
 import { Animation, DocData } from '../../../fields/DocSymbols';
 import { Id } from '../../../fields/FieldSymbols';
 import { List } from '../../../fields/List';
@@ -24,6 +24,7 @@ import { DocumentView, DocumentViewProps } from '../nodes/DocumentView';
 import { GPTPopup, GPTPopupMode } from '../pdf/GPTPopup/GPTPopup';
 import './CollectionCardDeckView.scss';
 import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
+import { FocusViewOptions } from '../nodes/FocusViewOptions';
 
 enum cardSortings {
     Time = 'time',
@@ -342,6 +343,7 @@ export class CollectionCardView extends CollectionSubView() {
             fitWidth={returnFalse}
             waitForDoubleClickToClick={returnNever}
             scriptContext={this}
+            focus={this.focus}
             onDoubleClickScript={this.onChildDoubleClick}
             onClickScript={this._curDoc === doc ? undefined : this._clickScript}
             dontCenter="y" // Don't center it vertically, because the grid it's in is already doing that and we don't want to do it twice.
@@ -593,6 +595,16 @@ export class CollectionCardView extends CollectionSubView() {
         }
     });
 
+    focus = action((anchor: Doc, options: FocusViewOptions): Opt<number> => {
+        const docs = DocListCast(this.Document[this.fieldKey ?? Doc.LayoutFieldKey(this.Document)]);
+        if (anchor.type !== DocumentType.CONFIG && !docs.includes(anchor)) return undefined;
+        options.didMove = true;
+        const target = DocCast(anchor.annotationOn) ?? anchor;
+        const index = docs.indexOf(target);
+        index !== -1 && (this._curDoc = target);
+        return undefined;
+    });
+
     /**
      * Actually renders all the cards
      */
diff --git a/src/client/views/nodes/ComparisonBox.scss b/src/client/views/nodes/ComparisonBox.scss
index d1cc48051..d2ba9796b 100644
--- a/src/client/views/nodes/ComparisonBox.scss
+++ b/src/client/views/nodes/ComparisonBox.scss
@@ -236,6 +236,9 @@
         }
     }
 }
+.comparisonBox-interactive {
+    pointer-events: all;
+}
 
 .comparisonBox-explain {
     position: absolute;
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 3c126ea4a..f6c33d6ba 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -792,8 +792,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         const renderMode = new Map<flashcardRevealOp, () => JSX.Element>([
             [flashcardRevealOp.FLIP, this.renderAsFlip],
             [flashcardRevealOp.SLIDE, this.renderAsBeforeAfter]]); // prettier-ignore
-        if (this.isQuizMode) this.renderAsQuiz(this.frontText);
-        return (
+        return this.isQuizMode ? (
+            this.renderAsQuiz(this.frontText)
+        ) : (
             <div className="comparisonBox" style={{ pointerEvents: this._props.isContentActive() && !this.Document[Animation] ? 'unset' : undefined }} onContextMenu={this.flashcardContextMenu}>
                 {renderMode.get(this.revealOp)?.() ?? null}
                 {this.loading ? (
-- 
cgit v1.2.3-70-g09d2


From 4b231bbaf21939144ed8639d35f022834a406e59 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Thu, 17 Oct 2024 22:02:19 -0400
Subject: changed layout_isFlashcard to layout_flashcardType with value of
 'flashcard' to make it easy to search for flashcards. made carousel views
 able to focus() on a Doc.  added ability for carousel and card views to have
 anchors so they can be pinned and linked.  fixed pinning collections to save
 filters

---
 src/client/apis/gpt/GPT.ts                         |  9 +++-
 src/client/documents/Documents.ts                  |  4 +-
 src/client/util/LinkFollower.ts                    |  2 -
 src/client/views/PinFuncs.ts                       | 13 ++++--
 .../views/collections/CollectionCardDeckView.tsx   | 32 +++++++++++++-
 .../views/collections/CollectionCarousel3DView.tsx | 32 +++++++++++++-
 .../views/collections/CollectionCarouselView.tsx   | 51 +++++++++++++++++++++-
 .../collections/CollectionStackedTimeline.tsx      |  5 +--
 .../views/collections/CollectionTimeView.tsx       |  2 -
 .../views/collections/FlashcardPracticeUI.tsx      |  6 +--
 .../collectionFreeForm/CollectionFreeFormView.tsx  |  2 +-
 src/client/views/nodes/ComparisonBox.tsx           | 21 +++++----
 src/client/views/nodes/DataVizBox/DataVizBox.tsx   |  2 +-
 src/client/views/nodes/MapBox/MapBox.tsx           |  2 +-
 .../views/nodes/MapboxMapBox/MapboxContainer.tsx   |  5 +--
 src/client/views/nodes/PDFBox.tsx                  |  2 +-
 .../views/nodes/formattedText/FormattedTextBox.tsx |  2 +-
 17 files changed, 151 insertions(+), 41 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index 8a2c91269..03380e4d6 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -42,7 +42,7 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
         model: 'gpt-4o',
         maxTokens: 2048,
         temp: 0.7,
-        prompt: 'Create a stack of flashcards out of this text with each question and answer labeled as question and answer. For some questions, ask "what is this image of" but tailored to stacks theme and the image and write a keyword that represents the image and label it "keyword". Otherwise, write none. Do not label each flashcard and do not include asterisks.',
+        prompt: 'Create a stack of flashcards out of this text with each question and answer labeled as question and answer. Create a title that represents the question in just a few words and label it "title". For some questions, ask "what is this image of" but tailored to stacks theme and the image and write a keyword that represents the image and label it "keyword". Otherwise, write none. Do not label each flashcard and do not include asterisks.',
     },
 
     completion: { model: 'gpt-4-turbo', maxTokens: 256, temp: 0.5, prompt: "You are a helpful assistant. Answer the user's prompt." },
@@ -65,7 +65,12 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
         prompt: "The user is going to give you a list of descriptions. Each one is separated by `======` on either side. Descriptions will vary in length, so make sure to only separate when you see `======`. Sort them by the user's specifications. Make sure each description is only in the list once. Each item should be separated by `======`. Immediately afterward, surrounded by `------` on BOTH SIDES, provide some insight into your reasoning for the way you sorted (and mention nothing about the formatting details given in this description). It is VERY important that you format it exactly as described, ensuring the proper number of `=` and `-` (6 of each) and NO commas",
     },
     describe: { model: 'gpt-4-vision-preview', maxTokens: 2048, temp: 0, prompt: 'Describe these images in 3-5 words' },
-    flashcard: { model: 'gpt-4-turbo', maxTokens: 512, temp: 0.5, prompt: 'Make flashcards out of this text with each question and answer labeled as question and answer. Do not label each flashcard and do not include asterisks: ' },
+    flashcard: {
+        model: 'gpt-4-turbo',
+        maxTokens: 512,
+        temp: 0.5,
+        prompt: 'Make flashcards out of this text with each question and answer labeled as question and answer. Create a title for each question and asnwer that is labeled as "title".  Do not label each flashcard and do not include asterisks: ',
+    },
     chatcard: { model: 'gpt-4-turbo', maxTokens: 512, temp: 0.5, prompt: 'Answer the following question as a short flashcard response. Do not include a label.' },
     quiz: {
         model: 'gpt-4-turbo',
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index e539e3c65..f2e85cf7a 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -281,7 +281,7 @@ export class DocumentOptions {
     _layout_fitWidth?: BOOLt = new BoolInfo('whether document should scale its contents to fit its rendered width or not (e.g., for PDFviews)');
     _layout_fieldKey?: STRt = new StrInfo('the field key containing the current layout definition', false);
     _layout_enableAltContentUI?: BOOLt = new BoolInfo('whether to show alternate content button');
-    _layout_isFlashcard?: BOOLt = new BoolInfo('whether comparison node should be displayed as a flashcard');
+    _layout_flashcardType?: STRt = new StrInfo('flashcard style to render in ComparisonBox.  currently just "flashcard".');
     _layout_showTitle?: string; // field name to display in header (:hover is an optional suffix)
     _layout_showSidebar?: BOOLt = new BoolInfo('whether an annotationsidebar should be displayed for text docuemnts');
     _layout_showCaption?: string; // which field to display in the caption area.  leave empty to have no caption
@@ -821,7 +821,7 @@ export namespace Docs {
                 data_front: front ?? CenteredTextCreator('question', 'hint: Enter a topic, select this document and click the stack button to have GPT create a deck of cards', { text_placeholder: true, cloneOnCopy: true }, undefined),
                 data_back: back ?? CenteredTextCreator('answer', 'answer here', { text_placeholder: true, cloneOnCopy: true }, undefined),
                 _layout_fitWidth: true,
-                _layout_isFlashcard: true,
+                _layout_flashcardType: 'flashcard',
                 title,
                 ...options,
             });
diff --git a/src/client/util/LinkFollower.ts b/src/client/util/LinkFollower.ts
index 0a3a0ba49..0e67dcfaa 100644
--- a/src/client/util/LinkFollower.ts
+++ b/src/client/util/LinkFollower.ts
@@ -113,12 +113,10 @@ export class LinkFollower {
                 }
                 const moveTo = [NumCast(sourceDoc.x) + NumCast(sourceDoc.followLinkXoffset), NumCast(sourceDoc.y) + NumCast(sourceDoc.followLinkYoffset)];
                 if (srcAnchor.followLinkXoffset !== undefined && moveTo[0] !== target.x) {
-                    // eslint-disable-next-line prefer-destructuring
                     target.x = moveTo[0];
                     movedTarget = true;
                 }
                 if (srcAnchor.followLinkYoffset !== undefined && moveTo[1] !== target.y) {
-                    // eslint-disable-next-line prefer-destructuring
                     target.y = moveTo[1];
                     movedTarget = true;
                 }
diff --git a/src/client/views/PinFuncs.ts b/src/client/views/PinFuncs.ts
index 430455644..5b57cd624 100644
--- a/src/client/views/PinFuncs.ts
+++ b/src/client/views/PinFuncs.ts
@@ -39,9 +39,14 @@ export interface PinProps {
     pinData?: pinDataTypes;
 }
 
-/// copies values from the targetDoc (which is the prototype of the pinDoc) to
-/// reserved fields on the pinDoc so that those values can be restored to the
-/// target doc when navigating to it.
+/**
+ * copies values from the targetDoc (which is the prototype of the pinDoc) to
+ * reserved fields on the pinDoc so that those values can be restored to the
+ * target doc when navigating to it.
+ * @param pinDoc Doc that will store pinned metadata
+ * @param pinProps description of props to pin
+ * @param targetDoc Doc that is being pinned
+ */
 export function PinDocView(pinDocIn: Doc, pinProps: PinProps, targetDoc: Doc) {
     const pinDoc = pinDocIn;
     pinDoc.presentation = true;
@@ -114,7 +119,7 @@ export function PinDocView(pinDocIn: Doc, pinProps: PinProps, targetDoc: Doc) {
                 )
             );
         if (pinProps.pinData.type_collection) pinDoc.config_viewType = targetDoc._type_collection;
-        if (pinProps.pinData.filters) pinDoc.config_docFilters = ObjectField.MakeCopy(targetDoc.childFilters as ObjectField);
+        if (pinProps.pinData.filters) pinDoc.config_docFilters = ObjectField.MakeCopy(targetDoc.childFilters as ObjectField) ?? new List<string>();
         if (pinProps.pinData.pivot) pinDoc.config_pivotField = targetDoc._pivotField;
         if (pinProps.pinData.pannable) {
             pinDoc.config_panX = NumCast(targetDoc._freeform_panX);
diff --git a/src/client/views/collections/CollectionCardDeckView.tsx b/src/client/views/collections/CollectionCardDeckView.tsx
index b86dad9d7..60305244c 100644
--- a/src/client/views/collections/CollectionCardDeckView.tsx
+++ b/src/client/views/collections/CollectionCardDeckView.tsx
@@ -9,7 +9,7 @@ import { Animation, DocData } from '../../../fields/DocSymbols';
 import { Id } from '../../../fields/FieldSymbols';
 import { List } from '../../../fields/List';
 import { ScriptField } from '../../../fields/ScriptField';
-import { BoolCast, DateCast, DocCast, NumCast, RTFCast, ScriptCast, StrCast } from '../../../fields/Types';
+import { BoolCast, DateCast, DocCast, NumCast, RTFCast, ScriptCast, StrCast, toList } from '../../../fields/Types';
 import { URLField } from '../../../fields/URLField';
 import { gptImageLabel } from '../../apis/gpt/GPT';
 import { DocumentType } from '../../documents/DocumentTypes';
@@ -25,6 +25,9 @@ import { GPTPopup, GPTPopupMode } from '../pdf/GPTPopup/GPTPopup';
 import './CollectionCardDeckView.scss';
 import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
 import { FocusViewOptions } from '../nodes/FocusViewOptions';
+import { Docs } from '../../documents/Documents';
+import { PinDocView } from '../PinFuncs';
+import { OpenWhere, OpenWhereMod } from '../nodes/OpenWhere';
 
 enum cardSortings {
     Time = 'time',
@@ -604,6 +607,33 @@ export class CollectionCardView extends CollectionSubView() {
         index !== -1 && (this._curDoc = target);
         return undefined;
     });
+    getAnchor = (addAsAnnotation: boolean) => {
+        const anchor = Docs.Create.ConfigDocument({ annotationOn: this.Document });
+        anchor.config_curDoc = this.curDoc();
+        PinDocView(anchor, { pinData: { type_collection: true, filters: true } }, this.Document);
+        if (addAsAnnotation) {
+            // when added as an annotation, links to anchors can be found as links to the document even if the anchors are not rendered
+            Doc.AddDocToList(this.dataDoc, this._props.fieldKey + '_annotations', anchor);
+        }
+        return anchor;
+    };
+    // pinned / linked anchor doc includes selected rows, graph titles, and graph colors
+    restoreView = (viewData: Doc) => {
+        if (viewData.config_curDoc !== undefined && this.curDoc() !== viewData.config_curDoc) {
+            this._curDoc = DocCast(viewData.config_curDoc);
+            return true;
+        }
+        return false;
+    };
+    addDocTab = (docsIn: Doc | Doc[], location: OpenWhere) => {
+        const doc = toList(docsIn).lastElement();
+        const where = location.split(':')[0];
+        if (where === OpenWhere.lightbox && (this.childDocList?.includes(doc) || this.childLayoutPairs.map(pair => pair.layout)?.includes(doc))) {
+            if (doc.hidden) doc.hidden = false;
+            if (!location.includes(OpenWhereMod.always)) return true;
+        }
+        return this._props.addDocTab(docsIn, location);
+    };
 
     /**
      * Actually renders all the cards
diff --git a/src/client/views/collections/CollectionCarousel3DView.tsx b/src/client/views/collections/CollectionCarousel3DView.tsx
index a71cc43ba..2be3ef48f 100644
--- a/src/client/views/collections/CollectionCarousel3DView.tsx
+++ b/src/client/views/collections/CollectionCarousel3DView.tsx
@@ -6,7 +6,7 @@ import { returnZero } from '../../../ClientUtils';
 import { Utils } from '../../../Utils';
 import { Doc, DocListCast, Opt } from '../../../fields/Doc';
 import { Id } from '../../../fields/FieldSymbols';
-import { BoolCast, DocCast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
+import { BoolCast, DocCast, NumCast, ScriptCast, StrCast, toList } from '../../../fields/Types';
 import { DocumentType } from '../../documents/DocumentTypes';
 import { DragManager } from '../../util/DragManager';
 import { Transform } from '../../util/Transform';
@@ -16,6 +16,9 @@ import { FocusViewOptions } from '../nodes/FocusViewOptions';
 import './CollectionCarousel3DView.scss';
 import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
 import { computedFn } from 'mobx-utils';
+import { Docs } from '../../documents/Documents';
+import { PinDocView } from '../PinFuncs';
+import { OpenWhere, OpenWhereMod } from '../nodes/OpenWhere';
 
 // eslint-disable-next-line @typescript-eslint/no-require-imports
 const { CAROUSEL3D_CENTER_SCALE, CAROUSEL3D_SIDE_SCALE, CAROUSEL3D_TOP } = require('../global/globalCssVariables.module.scss');
@@ -96,6 +99,33 @@ export class CollectionCarousel3DView extends CollectionSubView() {
         index !== -1 && (this.layoutDoc._carousel_index = index);
         return undefined;
     };
+    getAnchor = (addAsAnnotation: boolean) => {
+        const anchor = Docs.Create.ConfigDocument({ annotationOn: this.Document });
+        anchor.config_carousel_index = this.layoutDoc._carousel_index;
+        PinDocView(anchor, { pinData: { type_collection: true, filters: true } }, this.Document);
+        if (addAsAnnotation) {
+            // when added as an annotation, links to anchors can be found as links to the document even if the anchors are not rendered
+            Doc.AddDocToList(this.dataDoc, this._props.fieldKey + '_annotations', anchor);
+        }
+        return anchor;
+    };
+    // pinned / linked anchor doc includes selected rows, graph titles, and graph colors
+    restoreView = (viewData: Doc) => {
+        if (viewData.config_carousel_index !== undefined && this.layoutDoc._carousel_index !== viewData.config_carousel_index) {
+            this.layoutDoc._carousel_index = viewData.config_carousel_index;
+            return true;
+        }
+        return false;
+    };
+    addDocTab = (docsIn: Doc | Doc[], location: OpenWhere) => {
+        const doc = toList(docsIn).lastElement();
+        const where = location.split(':')[0];
+        if (where === OpenWhere.lightbox && (this.childDocList?.includes(doc) || this.childLayoutPairs.map(pair => pair.layout)?.includes(doc))) {
+            if (doc.hidden) doc.hidden = false;
+            if (!location.includes(OpenWhereMod.always)) return true;
+        }
+        return this._props.addDocTab(docsIn, location);
+    };
 
     @computed get content() {
         const currentIndex = NumCast(this.layoutDoc._carousel_index);
diff --git a/src/client/views/collections/CollectionCarouselView.tsx b/src/client/views/collections/CollectionCarouselView.tsx
index 1f2bc908f..b043706fd 100644
--- a/src/client/views/collections/CollectionCarouselView.tsx
+++ b/src/client/views/collections/CollectionCarouselView.tsx
@@ -3,12 +3,17 @@ import { action, computed, makeObservable, observable } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import { StopEvent, returnOne, returnZero } from '../../../ClientUtils';
-import { Doc, Opt } from '../../../fields/Doc';
-import { BoolCast, DocCast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
+import { Doc, DocListCast, Opt } from '../../../fields/Doc';
+import { BoolCast, DocCast, NumCast, ScriptCast, StrCast, toList } from '../../../fields/Types';
+import { DocumentType } from '../../documents/DocumentTypes';
+import { Docs } from '../../documents/Documents';
 import { DragManager } from '../../util/DragManager';
+import { PinDocView } from '../PinFuncs';
 import { StyleProp } from '../StyleProp';
 import { DocumentView } from '../nodes/DocumentView';
 import { FieldViewProps } from '../nodes/FieldView';
+import { FocusViewOptions } from '../nodes/FocusViewOptions';
+import { OpenWhere, OpenWhereMod } from '../nodes/OpenWhere';
 import { FormattedTextBox } from '../nodes/formattedText/FormattedTextBox';
 import './CollectionCarouselView.scss';
 import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
@@ -27,6 +32,9 @@ export class CollectionCarouselView extends CollectionSubView() {
         makeObservable(this);
     }
 
+    componentDidMount(): void {
+        this._props.setContentViewBox?.(this);
+    }
     componentWillUnmount() {
         this._dropDisposer?.();
     }
@@ -67,6 +75,44 @@ export class CollectionCarouselView extends CollectionSubView() {
 
     curDoc = () => this.carouselItems[this.carouselIndex]?.layout;
 
+    focus = (anchor: Doc, options: FocusViewOptions): Opt<number> => {
+        const docs = DocListCast(this.Document[this.fieldKey ?? Doc.LayoutFieldKey(this.Document)]);
+        if (anchor.type !== DocumentType.CONFIG && !docs.includes(anchor)) return undefined;
+        options.didMove = true;
+        const target = DocCast(anchor.annotationOn) ?? anchor;
+        const index = docs.indexOf(target);
+        index !== -1 && (this.layoutDoc._carousel_index = index);
+        return undefined;
+    };
+
+    getAnchor = (addAsAnnotation: boolean) => {
+        const anchor = Docs.Create.ConfigDocument({ annotationOn: this.Document });
+        anchor.config_carousel_index = this.carouselIndex;
+        PinDocView(anchor, { pinData: { type_collection: true, filters: true } }, this.Document);
+        if (addAsAnnotation) {
+            // when added as an annotation, links to anchors can be found as links to the document even if the anchors are not rendered
+            Doc.AddDocToList(this.dataDoc, this._props.fieldKey + '_annotations', anchor);
+        }
+        return anchor;
+    };
+    // pinned / linked anchor doc includes selected rows, graph titles, and graph colors
+    restoreView = (viewData: Doc) => {
+        if (viewData.config_carousel_index !== undefined && this.layoutDoc._carousel_index !== viewData.config_carousel_index) {
+            this.layoutDoc._carousel_index = viewData.config_carousel_index;
+            return true;
+        }
+        return false;
+    };
+    addDocTab = (docsIn: Doc | Doc[], location: OpenWhere) => {
+        const doc = toList(docsIn).lastElement();
+        const where = location.split(':')[0];
+        if (where === OpenWhere.lightbox && (this.childDocList?.includes(doc) || this.childLayoutPairs.map(pair => pair.layout)?.includes(doc))) {
+            if (doc.hidden) doc.hidden = false;
+            if (!location.includes(OpenWhereMod.always)) return true;
+        }
+        return this._props.addDocTab(docsIn, location);
+    };
+
     captionStyleProvider = (doc: Doc | undefined, captionProps: Opt<FieldViewProps>, property: string) => {
         // first look for properties on the document in the carousel, then fallback to properties on the container
         const childValue = doc?.['caption_' + property] ? this._props.styleProvider?.(doc, captionProps, property) : undefined;
@@ -113,6 +159,7 @@ export class CollectionCarouselView extends CollectionSubView() {
                 LayoutTemplateString={this._props.childLayoutString}
                 TemplateDataDocument={DocCast(Doc.Layout(doc).resolvedDataDoc)}
                 childFilters={this.childDocFilters}
+                focus={this.focus}
                 hideDecorations={BoolCast(this.layoutDoc.layout_hideDecorations)}
                 addDocument={this._props.addDocument}
                 ScreenToLocalTransform={this.contentScreenToLocalXf}
diff --git a/src/client/views/collections/CollectionStackedTimeline.tsx b/src/client/views/collections/CollectionStackedTimeline.tsx
index 486c826b6..c3047e5fb 100644
--- a/src/client/views/collections/CollectionStackedTimeline.tsx
+++ b/src/client/views/collections/CollectionStackedTimeline.tsx
@@ -1,4 +1,3 @@
-/* eslint-disable react/jsx-props-no-spreading */
 /* eslint-disable no-use-before-define */
 import { action, computed, IReactionDisposer, makeObservable, observable, reaction, runInAction } from 'mobx';
 import { observer } from 'mobx-react';
@@ -59,7 +58,6 @@ export enum TrimScope {
 
 @observer
 export class CollectionStackedTimeline extends CollectionSubView<CollectionStackedTimelineProps>() {
-    // eslint-disable-next-line no-use-before-define
     public static SelectingRegions: Set<CollectionStackedTimeline> = new Set();
     public static StopSelecting() {
         this.SelectingRegions.forEach(
@@ -171,7 +169,7 @@ export class CollectionStackedTimeline extends CollectionSubView<CollectionStack
 
     makeDocUnfiltered = (doc: Doc) => this.childDocList?.some(item => item === doc);
 
-    getView = async (doc: Doc, options: FocusViewOptions): Promise<Opt<DocumentView>> =>
+    getView = (doc: Doc, options: FocusViewOptions): Promise<Opt<DocumentView>> =>
         new Promise<Opt<DocumentView>>(res => {
             if (doc.hidden) options.didMove = !(doc.hidden = false);
             const findDoc = (finish: (dv: DocumentView) => void) => DocumentView.addViewRenderedCb(doc, dv => finish(dv));
@@ -600,7 +598,6 @@ export class CollectionStackedTimeline extends CollectionSubView<CollectionStack
                                         pointerEvents: 'none',
                                     }}>
                                     <StackedTimelineAnchor
-                                        // eslint-disable-next-line react/jsx-props-no-spreading
                                         {...this._props}
                                         mark={d.anchor}
                                         containerViewPath={this._props.containerViewPath}
diff --git a/src/client/views/collections/CollectionTimeView.tsx b/src/client/views/collections/CollectionTimeView.tsx
index 8a24db330..5738e7ce3 100644
--- a/src/client/views/collections/CollectionTimeView.tsx
+++ b/src/client/views/collections/CollectionTimeView.tsx
@@ -147,7 +147,6 @@ export class CollectionTimeView extends CollectionSubView() {
         return (
             <div className="collectionTimeView-innards" key="timeline" style={{ pointerEvents: this._props.isContentActive() ? undefined : 'none' }} onClick={this.contentsDown}>
                 <CollectionFreeFormView
-                    // eslint-disable-next-line react/jsx-props-no-spreading
                     {...this._props}
                     engineProps={{ pivotField: this.pivotField, childFilters: this.childDocFilters, childFiltersByRanges: this.childDocRangeFilters }}
                     fitContentsToBox={returnTrue}
@@ -257,7 +256,6 @@ ScriptingGlobals.add(function pivotColumnClick(pivotDoc: Doc, bounds: ViewDefBou
             const pivotView = DocumentView.getDocumentView(pivotDoc);
             if (pivotDoc && pivotView?.ComponentView instanceof CollectionTimeView && filterVals.length === 1) {
                 if (pivotView?.ComponentView.childDocs.length && pivotView.ComponentView.childDocs[0][filterVals[0]]) {
-                    // eslint-disable-next-line prefer-destructuring
                     pivotDoc._pivotField = filterVals[0];
                 }
             }
diff --git a/src/client/views/collections/FlashcardPracticeUI.tsx b/src/client/views/collections/FlashcardPracticeUI.tsx
index 9e9318c0a..c298bff22 100644
--- a/src/client/views/collections/FlashcardPracticeUI.tsx
+++ b/src/client/views/collections/FlashcardPracticeUI.tsx
@@ -58,7 +58,7 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
     get practiceField() { return this._props.fieldKey + "_practice"; } // prettier-ignore
 
     @computed get filterDoc() { return DocListCast(Doc.MyContextMenuBtns.data).find(doc => doc.title === 'Filter'); } // prettier-ignore
-    @computed get practiceMode() {  return this._props.allChildDocs().some(doc => doc._layout_isFlashcard) ? StrCast(this._props.layoutDoc.practiceMode) : ''; } // prettier-ignore
+    @computed get practiceMode() {  return this._props.allChildDocs().some(doc => doc._flashcardType) ? StrCast(this._props.layoutDoc.practiceMode) : ''; } // prettier-ignore
 
     btnHeight = () => NumCast(this.filterDoc?.height) * Math.min(1, this._props.ScreenToLocalBoxXf().Scale);
     btnWidth = () => (!this.filterDoc ? 1 : (this.btnHeight() * NumCast(this.filterDoc._width)) / NumCast(this.filterDoc._height));
@@ -127,7 +127,7 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
         const setColor = (mode: practiceMode) => (StrCast(this.practiceMode) === mode ? 'white' : 'lightgray');
         const togglePracticeMode = (mode: practiceMode) => this.setPracticeMode(mode === this.practiceMode ? undefined : mode);
 
-        return !this._props.allChildDocs().some(doc => doc._layout_isFlashcard) ? null : (
+        return !this._props.allChildDocs().some(doc => doc._layout_flashcardType) ? null : (
             <div
                 className="FlashcardPracticeUI-practiceModes"
                 style={{
@@ -179,7 +179,7 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
             </div>
         );
     }
-    tryFilterOut = (doc: Doc) => (this.practiceMode && BoolCast(doc?._layout_isFlashcard) && doc[this.practiceField] === practiceVal.CORRECT ? true : false); // show only cards that aren't marked as correct
+    tryFilterOut = (doc: Doc) => (this.practiceMode && BoolCast(doc?._flashcardType) && doc[this.practiceField] === practiceVal.CORRECT ? true : false); // show only cards that aren't marked as correct
     render() {
         return (
             <div className="FlashcardPracticeUI">
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
index d2bc8f2c2..afd662b22 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
@@ -389,7 +389,7 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
         return undefined;
     };
 
-    getView = async (doc: Doc, options: FocusViewOptions): Promise<Opt<DocumentView>> =>
+    getView = (doc: Doc, options: FocusViewOptions): Promise<Opt<DocumentView>> =>
         new Promise<Opt<DocumentView>>(res => {
             if (doc.hidden && this._lightboxDoc !== doc) options.didMove = !(doc.hidden = false);
             if (doc === this.Document) {
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index f6c33d6ba..672c189ba 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -63,8 +63,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * @param useDoc doc to fill in instead of creating a Doc
      * @returns the resulting flashcard Doc
      */
-    public static createFlashcard(tuple: string, frontKey: string, backKey: string, useDoc?: Doc) {
-        const [ktoken, atoken] = [ComparisonBox.ktoken, ComparisonBox.atoken];
+    public static createFlashcard(tuple3: string, frontKey: string, backKey: string, useDoc?: Doc) {
+        const [qtoken, ktoken, atoken] = [ComparisonBox.qtoken, ComparisonBox.ktoken, ComparisonBox.atoken];
+        const [title, tuple] = tuple3.split(qtoken);
         const question = (tuple.includes(ktoken) ? tuple.split(ktoken)[0] : tuple).split(atoken)[0];
         const rest = tuple.replace(question, '');
         // prettier-ignore
@@ -82,7 +83,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 useDoc[DocData][backKey] = back;
                 return useDoc;
             }
-            return Docs.Create.FlashcardDocument('flashcard', front, back, { _width: 300, _height: 300 });
+            return Docs.Create.FlashcardDocument(title, front, back, { _width: 300, _height: 300 });
         };
         return keyword && keyword.toLowerCase() !== 'none' ? ComparisonBox.fetchImages(keyword).then(img => fillInFlashcard(img)) : fillInFlashcard();
     }
@@ -95,12 +96,13 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     public static createFlashcardDeck(text: string, width: number, height: number, front: string, back: string) {
         return Promise.all(
             text
-                .split(ComparisonBox.qtoken)
+                .toLowerCase()
+                .split(ComparisonBox.ttoken)
                 .filter(t => t)
                 .map(tuple => ComparisonBox.createFlashcard(tuple, front, back))
         ).then(docs => {
             return Docs.Create.CarouselDocument(docs, {
-                title: 'flashcard deck',
+                title: text,
                 _width: width,
                 _height: height,
                 _layout_fitWidth: false,
@@ -112,9 +114,10 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     }
     private SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
 
-    static qtoken = 'Question: ';
-    static ktoken = 'Keyword: ';
-    static atoken = 'Answer: ';
+    static qtoken = 'question: ';
+    static ktoken = 'keyword: ';
+    static atoken = 'answer: ';
+    static ttoken = 'title: ';
     private _slideTiming = 200;
     private _sideBtnWidth = 35;
     private _closeRef = React.createRef<HTMLDivElement>();
@@ -183,7 +186,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
     @computed get containerDoc()  { return this._props.docViewPath().slice(-2)[0]?.Document; } // prettier-ignore
     @computed get isQuizMode()    { return this.containerDoc?.practiceMode === practiceMode.QUIZ; } // prettier-ignore
-    @computed get isFlashcard()   { return BoolCast(this.Document.layout_isFlashcard); } // prettier-ignore
+    @computed get isFlashcard()   { return StrCast(this.Document.layout_flashcardType); } // prettier-ignore
     @computed get frontKey()      { return this._props.fieldKey + '_front'; } // prettier-ignore
     @computed get backKey()       { return this._props.fieldKey + '_back'; } // prettier-ignore
     @computed get frontText()     { return RTFCast(DocCast(this.dataDoc[this.frontKey]).text)?.Text; } // prettier-ignore
diff --git a/src/client/views/nodes/DataVizBox/DataVizBox.tsx b/src/client/views/nodes/DataVizBox/DataVizBox.tsx
index 896048ab3..d79a37181 100644
--- a/src/client/views/nodes/DataVizBox/DataVizBox.tsx
+++ b/src/client/views/nodes/DataVizBox/DataVizBox.tsx
@@ -323,7 +323,7 @@ export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
             () => UndoManager.RunInBatch(this.toggleSidebar, 'toggle sidebar')
         );
     };
-    getView = async (doc: Doc, options: FocusViewOptions) => {
+    getView = (doc: Doc, options: FocusViewOptions) => {
         if (this._sidebarRef?.current?.makeDocUnfiltered(doc) && !this.SidebarShown) {
             options.didMove = true;
             this.toggleSidebar();
diff --git a/src/client/views/nodes/MapBox/MapBox.tsx b/src/client/views/nodes/MapBox/MapBox.tsx
index c66f7c726..4a436319b 100644
--- a/src/client/views/nodes/MapBox/MapBox.tsx
+++ b/src/client/views/nodes/MapBox/MapBox.tsx
@@ -428,7 +428,7 @@ export class MapBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         }
     };
 
-    getView = async (doc: Doc, options: FocusViewOptions) => {
+    getView = (doc: Doc, options: FocusViewOptions) => {
         if (this._sidebarRef?.current?.makeDocUnfiltered(doc) && !this.SidebarShown) {
             this.toggleSidebar();
             options.didMove = true;
diff --git a/src/client/views/nodes/MapboxMapBox/MapboxContainer.tsx b/src/client/views/nodes/MapboxMapBox/MapboxContainer.tsx
index a4557196e..d5d8f8afa 100644
--- a/src/client/views/nodes/MapboxMapBox/MapboxContainer.tsx
+++ b/src/client/views/nodes/MapboxMapBox/MapboxContainer.tsx
@@ -383,7 +383,7 @@ export class MapBoxContainer extends ViewBoxAnnotatableComponent<FieldViewProps>
         }
     };
 
-    getView = async (doc: Doc, options: FocusViewOptions) => {
+    getView = (doc: Doc, options: FocusViewOptions) => {
         if (this._sidebarRef?.current?.makeDocUnfiltered(doc) && !this.SidebarShown) {
             this.toggleSidebar();
             options.didMove = true;
@@ -732,7 +732,6 @@ export class MapBoxContainer extends ViewBoxAnnotatableComponent<FieldViewProps>
                         MapBoxContainer._rerenderDelay = 0;
                     }
                     this._rerenderTimeout = undefined;
-                    // eslint-disable-next-line operator-assignment
                     this.Document[DocCss] = this.Document[DocCss] + 1;
                 }), MapBoxContainer._rerenderDelay);
             return null;
@@ -792,7 +791,6 @@ export class MapBoxContainer extends ViewBoxAnnotatableComponent<FieldViewProps>
                                   .map(pushpin => (
                                       <DocumentView
                                           key={pushpin[Id]}
-                                          // eslint-disable-next-line react/jsx-props-no-spreading
                                           {...this._props}
                                           renderDepth={this._props.renderDepth + 1}
                                           Document={pushpin}
@@ -830,7 +828,6 @@ export class MapBoxContainer extends ViewBoxAnnotatableComponent<FieldViewProps>
                 <div className="mapBox-sidebar" style={{ width: `${this.sidebarWidthPercent}`, backgroundColor: `${this.sidebarColor}` }}>
                     <SidebarAnnos
                         ref={this._sidebarRef}
-                        // eslint-disable-next-line react/jsx-props-no-spreading
                         {...this._props}
                         fieldKey={this.fieldKey}
                         Document={this.Document}
diff --git a/src/client/views/nodes/PDFBox.tsx b/src/client/views/nodes/PDFBox.tsx
index 816d4a3b0..2e4c87d38 100644
--- a/src/client/views/nodes/PDFBox.tsx
+++ b/src/client/views/nodes/PDFBox.tsx
@@ -233,7 +233,7 @@ export class PDFBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         return this._pdfViewer?.scrollFocus(anchor, NumCast(anchor.y, NumCast(anchor.config_scrollTop)), options);
     };
 
-    getView = async (doc: Doc, options: FocusViewOptions) => {
+    getView = (doc: Doc, options: FocusViewOptions) => {
         if (this._sidebarRef?.current?.makeDocUnfiltered(doc) && !this.SidebarShown) {
             options.didMove = true;
             this.toggleSidebar(false);
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 29be8d285..2aee7b6b3 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -1156,7 +1156,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FormattedTextB
         return anchorDoc ?? this.Document;
     }
 
-    getView = async (doc: Doc, options: FocusViewOptions) => {
+    getView = (doc: Doc, options: FocusViewOptions) => {
         if (DocListCast(this.dataDoc[this.sidebarKey]).find(anno => Doc.AreProtosEqual(doc.layout_unrendered ? DocCast(doc.annotationOn) : doc, anno))) {
             if (!this.SidebarShown) {
                 this.toggleSidebar(false);
-- 
cgit v1.2.3-70-g09d2


From 6201fb8595729d049885d91278e990e49588f6f5 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 12 Nov 2024 12:47:15 -0500
Subject: fixed clicking on filled closed strokes to select them.. fixed
 equationBox initial width.  fixed line mode for ink to always create lines. 
 fixed contextMenu to reset selectedIndex after being  hidden.  added reveal
 options for comparisonbox to contexst menu.

---
 src/client/views/ContextMenu.tsx         |  1 +
 src/client/views/GestureOverlay.tsx      |  2 +-
 src/client/views/InkingStroke.tsx        |  4 ++--
 src/client/views/nodes/ComparisonBox.tsx | 39 ++++++++++++++++++++++++--------
 src/client/views/nodes/EquationBox.scss  |  4 +++-
 src/client/views/nodes/EquationBox.tsx   |  1 -
 6 files changed, 36 insertions(+), 15 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/ContextMenu.tsx b/src/client/views/ContextMenu.tsx
index 1931d7c2a..eae45221c 100644
--- a/src/client/views/ContextMenu.tsx
+++ b/src/client/views/ContextMenu.tsx
@@ -142,6 +142,7 @@ export class ContextMenu extends ObservableReactComponent<{ noexpand?: boolean }
         this.clearItems();
         this._display = false;
         this._shouldDisplay = false;
+        this._selectedIndex = -1;
         return wasOpen;
     };
 
diff --git a/src/client/views/GestureOverlay.tsx b/src/client/views/GestureOverlay.tsx
index 2d6cd03e0..b0a750a9a 100644
--- a/src/client/views/GestureOverlay.tsx
+++ b/src/client/views/GestureOverlay.tsx
@@ -256,7 +256,7 @@ export class GestureOverlay extends ObservableReactComponent<React.PropsWithChil
             const actionPerformed = ((name: Gestures) => {
                 switch (name) {
                     case Gestures.Line:
-                        if (cuspArray.length > 2) return undefined;
+                        if (cuspArray.length > 2 && Score < 1) return undefined;
                     // eslint-disable-next-line no-fallthrough
                     case Gestures.Triangle:
                     case Gestures.Rectangle:
diff --git a/src/client/views/InkingStroke.tsx b/src/client/views/InkingStroke.tsx
index f847db6c2..f555808ef 100644
--- a/src/client/views/InkingStroke.tsx
+++ b/src/client/views/InkingStroke.tsx
@@ -315,7 +315,7 @@ export class InkingStroke extends ViewBoxAnnotatableComponent<FieldViewProps>()
     componentUI = (boundsLeft: number, boundsTop: number): null | JSX.Element => {
         const inkDoc = this.Document;
         const { inkData, inkStrokeWidth } = this.inkScaledData();
-        const screenSpaceCenterlineStrokeWidth = Math.min(3, inkStrokeWidth * this.ScreenToLocalBoxXf().inverse().Scale); // the width of the blue line widget that shows the centerline of the ink stroke
+        const screenSpaceCenterlineStrokeWidth = 3; //Math.min(3, inkStrokeWidth * this.ScreenToLocalBoxXf().inverse().Scale); // the width of the blue line widget that shows the centerline of the ink stroke
 
         const screenInkWidth = this.ScreenToLocalBoxXf().inverse().transformDirection(inkStrokeWidth, inkStrokeWidth);
 
@@ -433,7 +433,7 @@ export class InkingStroke extends ViewBoxAnnotatableComponent<FieldViewProps>()
                 StrCast(this.layoutDoc.stroke_lineJoin) as Property.StrokeLinejoin,
                 StrCast(this.layoutDoc.stroke_lineCap) as Property.StrokeLinecap,
                 StrCast(this.layoutDoc.stroke_bezier),
-                'none',
+                closed && fillColor && DashColor(fillColor).alpha() ? fillColor : 'none',
                 startMarker,
                 endMarker,
                 markerScale,
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 672c189ba..e0c360132 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -1,7 +1,7 @@
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { Tooltip } from '@mui/material';
 import axios from 'axios';
-import { IReactionDisposer, action, computed, makeObservable, observable, reaction, runInAction } from 'mobx';
+import { IReactionDisposer, action, computed, makeObservable, observable, reaction, runInAction, trace } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import ReactLoading from 'react-loading';
@@ -30,6 +30,7 @@ import './ComparisonBox.scss';
 import { DocumentView } from './DocumentView';
 import { FieldView, FieldViewProps } from './FieldView';
 import { FormattedTextBox } from './formattedText/FormattedTextBox';
+import { TraceMobx } from '../../../fields/util';
 
 const API_URL = 'https://api.unsplash.com/search/photos';
 
@@ -143,19 +144,28 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         this._reactDisposer.select = reaction(
             () => this._props.isSelected(),
             selected => {
-                if (selected && this.revealOp !== flashcardRevealOp.SLIDE) this.activateContent();
-                !selected && (this._childActive = false);
+                if (selected) {
+                    switch (this.revealOp) {
+                        default:
+                        case flashcardRevealOp.FLIP: this.activateContent(); break;
+                        case flashcardRevealOp.SLIDE: break;
+                    } // prettier-ignore
+                } else {
+                    this._childActive = false;
+                }
             }, // what it should update to
             { fireImmediately: true }
         );
-        this._reactDisposer.hover = reaction(
-            () => this._props.isContentActive(),
-            hover => {
-                if (!hover) {
-                    this.revealOp === flashcardRevealOp.FLIP && this.animateFlipping(this.frontKey);
-                    this.revealOp === flashcardRevealOp.SLIDE && this.animateSliding(this._props.PanelWidth() - 3);
+        this._reactDisposer.inactive = reaction(
+            () => !this._props.isContentActive(),
+            inactive => {
+                if (inactive) {
+                    switch (this.revealOp) {
+                        case flashcardRevealOp.FLIP: this.animateFlipping(this.frontKey); break;
+                        case flashcardRevealOp.SLIDE: this.animateSliding(this._props.PanelWidth() - 3); break;
+                    } // prettier-ignore
                 }
-            }, // what it should update to
+            },
             { fireImmediately: true }
         );
     }
@@ -197,7 +207,9 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     @computed get clipWidth()     { return NumCast(this.layoutDoc[this.clipWidthKey], this.isFlashcard ? 100: 50); } // prettier-ignore
     @computed get clipHeight()    { return NumCast(this.layoutDoc[this.clipHeightKey], 200);  } // prettier-ignore
     @computed get revealOp()      { return StrCast(this.layoutDoc[this.revealOpKey], StrCast(this.containerDoc?.revealOp, this.isFlashcard ? flashcardRevealOp.FLIP : flashcardRevealOp.SLIDE)) as flashcardRevealOp; } // prettier-ignore
+    set revealOp(op:flashcardRevealOp) { this.layoutDoc[this.revealOpKey] =  op; } // prettier-ignore
     @computed get revealOpHover() { return BoolCast(this.layoutDoc[this.revealOpKey+"_hover"], BoolCast(this.containerDoc?.revealOp_hover)); } // prettier-ignore
+    set revealOpHover(on:boolean) { this.layoutDoc[this.revealOpKey+"_hover"] = on; } // prettier-ignore
     @computed get loading()       { return this._loading; } // prettier-ignore
     set loading(value)            { runInAction(() => { this._loading = value; })} // prettier-ignore
 
@@ -616,6 +628,12 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         const appearance = ContextMenu.Instance.findByDescription('Appearance...');
         const appearanceItems = appearance?.subitems ?? [];
         appearanceItems.push({ description: 'Create ChatCard', event: () => this.askGPT(GPTCallType.CHATCARD), icon: 'id-card' });
+        appearanceItems.push({
+            description: 'Reveal by ' + (this.revealOp === flashcardRevealOp.FLIP ? 'Sliding' : 'Flipping'),
+            event: () => (this.revealOp = this.revealOp === flashcardRevealOp.FLIP ? flashcardRevealOp.SLIDE : flashcardRevealOp.FLIP),
+            icon: 'id-card',
+        });
+        appearanceItems.push({ description: (this.revealOpHover ? 'Click ' : 'Hover ') + ' to reveal', event: () => (this.revealOpHover = !this.revealOpHover), icon: 'id-card' });
         !appearance && ContextMenu.Instance.addItem({ description: 'Appearance...', subitems: appearanceItems, icon: 'eye' });
     };
 
@@ -792,6 +810,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
     );
 
     render() {
+        TraceMobx();
         const renderMode = new Map<flashcardRevealOp, () => JSX.Element>([
             [flashcardRevealOp.FLIP, this.renderAsFlip],
             [flashcardRevealOp.SLIDE, this.renderAsBeforeAfter]]); // prettier-ignore
diff --git a/src/client/views/nodes/EquationBox.scss b/src/client/views/nodes/EquationBox.scss
index 5009ec7a7..cbd13d924 100644
--- a/src/client/views/nodes/EquationBox.scss
+++ b/src/client/views/nodes/EquationBox.scss
@@ -3,7 +3,9 @@
 .equationBox-cont {
     transform-origin: center;
     background-color: #e7e7e7;
+    width: fit-content;
+    min-width: 100%;
     > span {
-        width: 100%;
+        width: fit-content;
     }
 }
diff --git a/src/client/views/nodes/EquationBox.tsx b/src/client/views/nodes/EquationBox.tsx
index 290c90d6e..472fa56a0 100644
--- a/src/client/views/nodes/EquationBox.tsx
+++ b/src/client/views/nodes/EquationBox.tsx
@@ -119,7 +119,6 @@ export class EquationBox extends ViewBoxBaseComponent<FieldViewProps>() {
                 onPointerDown={e => !e.ctrlKey && e.stopPropagation()}
                 style={{
                     transform: `scale(${scale})`,
-                    width: 'fit-content', // `${100 / scale}%`,
                     height: `${100 / scale}%`,
                     pointerEvents: !this._props.isSelected() ? 'none' : undefined,
                     fontSize: StrCast(this.Document._text_fontSize),
-- 
cgit v1.2.3-70-g09d2


From a496c583f375fe5e118f786b1244c42bc8a34fec Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 28 Jan 2025 14:20:40 -0500
Subject: fixed flashcard practice mode.  moved doc sorting from cardDeck into
 collectionSubView to apply it to all collections.

---
 .../src/components/Dropdown/Dropdown.tsx           |  30 ++----
 src/client/util/CurrentUserUtils.ts                |  10 +-
 .../views/collections/CollectionCardDeckView.tsx   | 119 ++++-----------------
 src/client/views/collections/CollectionSubView.tsx |  49 ++++++++-
 .../views/collections/FlashcardPracticeUI.tsx      |   4 +-
 src/client/views/global/globalScripts.ts           |  35 +++---
 src/client/views/nodes/ComparisonBox.tsx           |   2 +-
 src/client/views/nodes/imageEditor/ImageEditor.tsx |  69 ++----------
 .../views/nodes/imageEditor/ImageEditorButtons.tsx |   1 +
 9 files changed, 108 insertions(+), 211 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/packages/components/src/components/Dropdown/Dropdown.tsx b/packages/components/src/components/Dropdown/Dropdown.tsx
index 0953f412c..b9b6f01b8 100644
--- a/packages/components/src/components/Dropdown/Dropdown.tsx
+++ b/packages/components/src/components/Dropdown/Dropdown.tsx
@@ -99,22 +99,14 @@ export const Dropdown = (props: IDropdownProps) => {
         background: background ?? color,
     };
 
-    const getCaretDirection = (active: boolean, placement: Placement = 'left'): JSX.Element => {
-        if (iconProvider) return iconProvider(active, placement);
-        switch (placement) {
-            case 'bottom':
-                if (active) return <FaCaretUp />;
-                return <FaCaretDown />;
-            case 'right':
-                if (active) return <FaCaretLeft />;
-                return <FaCaretRight />;
-            case 'top':
-                if (active) return <FaCaretDown />;
-                return <FaCaretUp />;
-            default:
-                if (active) return <FaCaretUp />;
-                return <FaCaretDown />;
-        }
+    const getCaretDirection = (isActive: boolean, caretPlacement: Placement = 'left'): JSX.Element => {
+        if (iconProvider) return iconProvider(isActive, caretPlacement);
+        switch (caretPlacement) {
+            default:      
+            case 'bottom':return isActive ?  <FaCaretUp />: <FaCaretDown />;
+            case 'right': return isActive ? <FaCaretLeft /> : <FaCaretRight />;
+            case 'top':   return isActive ? <FaCaretDown />: <FaCaretUp />;
+        } // prettier-ignore
     };
 
     const getToggle = () => {
@@ -143,9 +135,9 @@ export const Dropdown = (props: IDropdownProps) => {
         }
     };
 
-    const setActiveChanged = (active: boolean) => {
-        setActive(active);
-        props.activeChanged?.(active);
+    const setActiveChanged = (isActive: boolean) => {
+        setActive(isActive);
+        props.activeChanged?.(isActive);
     };
 
     const dropdown: JSX.Element = (
diff --git a/src/client/util/CurrentUserUtils.ts b/src/client/util/CurrentUserUtils.ts
index 7c36a82f2..e806675aa 100644
--- a/src/client/util/CurrentUserUtils.ts
+++ b/src/client/util/CurrentUserUtils.ts
@@ -688,7 +688,7 @@ pie title Minerals in my tap water
             { title: "Center",    icon: "align-center",  toolTip: "Center Align Stack",  btnType: ButtonType.ToggleButton, ignoreClick: true, expertMode: false, toolType:"hcenter",    funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}}, // Only when floating document is selected in freeform
         ]
     }
-    static cardTools(): Button[] {
+    static sortTools(): Button[] {
         return [
             { title: "Time",      icon:"hourglass-half", toolTip:"Sort by most recent document creation",          btnType: ButtonType.ToggleButton, expertMode: false, toolType:"time",       funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}},
             { title: "Type",      icon:"eye",            toolTip:"Sort by document type",                          btnType: ButtonType.ToggleButton, expertMode: false, toolType:"docType",    funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}},
@@ -704,7 +704,7 @@ pie title Minerals in my tap water
          ]
     }
   
-    static tagGroupTools(): Button[] {
+    static filterTools(): Button[] {
         const defaultTagButtonDescs = [
             { title: "Star", isSystem: false,icon: "star",  toolTip:"Click to toggle visibility of Star tagged Docs",  btnType: ButtonType.ToggleButton,  expertMode: false, toolType:"#star", funcs: {}, scripts: { onClick: '{ return setTagFilter(this.toolType, _added_, _readOnly_);}'}},
             { title: "Like", isSystem: false,icon: "heart", toolTip:"Click to toggle visibility of Like tagged Docs",  btnType: ButtonType.ToggleButton,  expertMode: false, toolType:"#like", funcs: {}, scripts: { onClick: '{ return setTagFilter(this.toolType, _added_, _readOnly_);}'}},
@@ -723,7 +723,6 @@ pie title Minerals in my tap water
             { title: "Grid",      icon: "border-all",          toolTip: "Show Grid",           btnType: ButtonType.ToggleButton, ignoreClick: true, expertMode: false, toolType:"grid",       funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}}, // Only when floating document is selected in freeform
             { title: "Fit All",   icon: "object-group",        toolTip: "Fit Docs to View (double click to make sticky)",btnType: ButtonType.ToggleButton, ignoreClick:true, expertMode: false, toolType:"viewAll",    funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}', onDoubleClick: '{ return showFreeform(this.toolType, _readOnly_, true);}'}}, // Only when floating document is selected in freeform
             { title: "Clusters",  icon: "braille",             toolTip: "Show Doc Clusters",   btnType: ButtonType.ToggleButton, ignoreClick: true, expertMode: false, toolType:"clusters",   funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}}, // Only when floating document is selected in freeform
-            { title: "Cards",     icon: "brain",               toolTip: "Flashcards",          btnType: ButtonType.ToggleButton, ignoreClick: true, expertMode: false, toolType:"flashcards", funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}}, // Only when floating document is selected in freeform
         ]
     }
     static textTools():Button[] {
@@ -822,15 +821,14 @@ pie title Minerals in my tap water
             { title: "Num",     icon:"", toolTip: "Frame # (click to toggle edit mode)",btnType: ButtonType.TextButton,          expertMode: true,  toolType:CollectionViewType.Freeform, funcs: {hidden: '!SelectedDocType(this.toolType, this.expertMode)', buttonText: 'selectedDocs()?.lastElement()?.currentFrame?.toString()'}, width: 20, scripts: { onClick: '{ return curKeyFrame(_readOnly_);}'}},
             { title: "Fwd",     icon: "chevron-right", toolTip: "Next Animation Frame", btnType: ButtonType.ClickButton,         expertMode: true,  toolType:CollectionViewType.Freeform, funcs: {hidden: '!SelectedDocType(this.toolType, this.expertMode)'},                  width: 30,  scripts: { onClick: 'nextKeyFrame(_readOnly_)'}},
             
-            { title: "Filter",  icon: "=",      toolTip: "Filter cards by tags", subMenu: CurrentUserUtils.tagGroupTools(),ignoreClick:true, toolType:DocumentType.COL,            funcs: {hidden: '!SelectedDocType(this.toolType, this.expertMode)'}, btnType: ButtonType.MultiToggleButton, width: 30, backgroundColor: doc.userVariantColor as string},
+            { title: "Filter",  icon: "=",      toolTip: "Filter cards by tags", subMenu: CurrentUserUtils.filterTools(), ignoreClick:true,  toolType:DocumentType.COL,            funcs: {hidden: '!SelectedDocType(this.toolType, this.expertMode)'}, btnType: ButtonType.MultiToggleButton, width: 30, backgroundColor: doc.userVariantColor as string},
+            { title: "Sort",    icon: "Sort",   toolTip: "Sort Documents",       subMenu: CurrentUserUtils.sortTools(),   expertMode: false, toolType:DocumentType.COL,            funcs: {hidden: `!SelectedDocType(this.toolType, this.expertMode)`, linearView_IsOpen: `SelectedDocType(this.toolType, this.expertMode)`} }, // Always available
             { title: "Text",    icon: "Text",   toolTip: "Text functions",       subMenu: CurrentUserUtils.textTools(),   expertMode: false, toolType:DocumentType.RTF,            funcs: {                                                                             linearView_IsOpen: `SelectedDocType(this.toolType, this.expertMode)`} }, // Always available
             { title: "Ink",     icon: "Ink",    toolTip: "Ink functions",        subMenu: CurrentUserUtils.inkTools(),    expertMode: false, toolType:DocumentType.INK,            funcs: {hidden: `IsExploreMode()`,                                                   linearView_IsOpen: `SelectedDocType(this.toolType, this.expertMode)`}, scripts: { onClick: 'setInkToolDefaults()'} }, // Always available
             { title: "Doc",     icon: "Doc",    toolTip: "Freeform Doc tools",   subMenu: CurrentUserUtils.freeTools(),   expertMode: false, toolType:CollectionViewType.Freeform, funcs: {hidden: `!SelectedDocType(this.toolType, this.expertMode, true)`, linearView_IsOpen: `SelectedDocType(this.toolType, this.expertMode)`} }, // Always available
             { title: "View",    icon: "View",   toolTip: "View tools",           subMenu: CurrentUserUtils.viewTools(),   expertMode: false, toolType:CollectionViewType.Freeform, funcs: {hidden: `!SelectedDocType(this.toolType, this.expertMode)`, linearView_IsOpen: `SelectedDocType(this.toolType, this.expertMode)`} }, // Always available
             { title: "Stack",   icon: "View",   toolTip: "Stacking tools",       subMenu: CurrentUserUtils.stackTools(),  expertMode: false, toolType:CollectionViewType.Stacking, funcs: {hidden: `!SelectedDocType(this.toolType, this.expertMode)`, linearView_IsOpen: `SelectedDocType(this.toolType, this.expertMode)`} }, // Always available
             
-            { title: "Card",    icon: "Card",   toolTip: "Card View Tools",      subMenu: CurrentUserUtils.cardTools(),   expertMode: false, toolType:CollectionViewType.Card,     funcs: {hidden: `!SelectedDocType(this.toolType, this.expertMode)`, linearView_IsOpen: `SelectedDocType(this.toolType, this.expertMode)`} }, // Always available
-         // { title: "Create",  icon: "Create", toolTip: "Assign card labels",   subMenu: CurrentUserUtils.labelTools(),  expertMode: false, toolType:CollectionViewType.Card,     funcs: {hidden: `!SelectedDocType(this.toolType, this.expertMode)`, linearView_IsOpen: `SelectedDocType(this.toolType, this.expertMode)`} }, // Always available
             { title: "Web",     icon: "Web",    toolTip: "Web functions",        subMenu: CurrentUserUtils.webTools(),    expertMode: false, toolType:DocumentType.WEB,            funcs: {hidden: `!SelectedDocType(this.toolType, this.expertMode)`, linearView_IsOpen: `SelectedDocType(this.toolType, this.expertMode)`} }, // Only when Web is selected
             { title: "Video",   icon: "Video",  toolTip: "Video functions",      subMenu: CurrentUserUtils.videoTools(),  expertMode: false, toolType:DocumentType.VID,            funcs: {hidden: `!SelectedDocType(this.toolType, this.expertMode)`, linearView_IsOpen: `SelectedDocType(this.toolType, this.expertMode)`} }, // Only when video is selected
             { title: "Image",   icon: "Image",  toolTip: "Image functions",      subMenu: CurrentUserUtils.imageTools(),  expertMode: false, toolType:DocumentType.IMG,            funcs: {hidden: `!SelectedDocType(this.toolType, this.expertMode)`, linearView_IsOpen: `SelectedDocType(this.toolType, this.expertMode)`} }, // Only when image is selected
diff --git a/src/client/views/collections/CollectionCardDeckView.tsx b/src/client/views/collections/CollectionCardDeckView.tsx
index 1bca68846..aaf33c3a1 100644
--- a/src/client/views/collections/CollectionCardDeckView.tsx
+++ b/src/client/views/collections/CollectionCardDeckView.tsx
@@ -1,16 +1,16 @@
-import { IReactionDisposer, ObservableMap, action, computed, makeObservable, observable, reaction, runInAction, trace } from 'mobx';
+import { IReactionDisposer, ObservableMap, action, computed, makeObservable, observable, reaction, runInAction } from 'mobx';
 import { observer } from 'mobx-react';
 import { computedFn } from 'mobx-utils';
 import * as React from 'react';
 import * as CSS from 'csstype';
-import { ClientUtils, DashColor, imageUrlToBase64, returnFalse, returnNever, returnZero, setupMoveUpEvents } from '../../../ClientUtils';
+import { ClientUtils, imageUrlToBase64, returnFalse, returnNever, returnZero, setupMoveUpEvents } from '../../../ClientUtils';
 import { emptyFunction } from '../../../Utils';
-import { Doc, DocListCast, Opt, StrListCast } from '../../../fields/Doc';
+import { Doc, DocListCast, Opt } from '../../../fields/Doc';
 import { Animation, DocData } from '../../../fields/DocSymbols';
 import { Id } from '../../../fields/FieldSymbols';
 import { List } from '../../../fields/List';
 import { ScriptField } from '../../../fields/ScriptField';
-import { BoolCast, DateCast, DocCast, NumCast, RTFCast, ScriptCast, StrCast } from '../../../fields/Types';
+import { BoolCast, DocCast, NumCast, RTFCast, ScriptCast, StrCast } from '../../../fields/Types';
 import { URLField } from '../../../fields/URLField';
 import { gptImageLabel } from '../../apis/gpt/GPT';
 import { DocumentType } from '../../documents/DocumentTypes';
@@ -25,21 +25,12 @@ import { StyleProp } from '../StyleProp';
 import { TagItem } from '../TagsView';
 import { DocumentView, DocumentViewProps } from '../nodes/DocumentView';
 import { FocusViewOptions } from '../nodes/FocusViewOptions';
-import { GPTPopup, GPTPopupMode } from '../pdf/GPTPopup/GPTPopup';
+import { GPTPopup } from '../pdf/GPTPopup/GPTPopup';
 import './CollectionCardDeckView.scss';
 import { CollectionSubView, SubCollectionViewProps } from './CollectionSubView';
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { SettingsManager } from '../../util/SettingsManager';
 
-enum cardSortings {
-    Time = 'time',
-    Type = 'type',
-    Color = 'color',
-    Chat = 'chat',
-    Tag = 'tag',
-    None = '',
-}
-
 /**
  * New view type specifically for studying more dynamically. Allows you to reorder docs however you see fit, easily
  * sort and filter using presets, and customize your experience with chat gpt.
@@ -60,7 +51,6 @@ export class CollectionCardView extends CollectionSubView() {
     @observable _forceChildXf = 0;
     @observable _hoveredNodeIndex = -1;
     @observable _docRefs = new ObservableMap<Doc, DocumentView>();
-    @observable _docDraggedIndex: number = -1;
     @observable _cursor: CSS.Property.Cursor = 'ew-resize';
 
     constructor(props: SubCollectionViewProps) {
@@ -102,18 +92,8 @@ export class CollectionCardView extends CollectionSubView() {
 
     componentDidMount() {
         this._props.setContentViewBox?.(this);
-        this._disposers.sort = reaction(
-            () => GPTPopup.Instance.visible,
-            isVis => {
-                if (isVis) {
-                    this.openChatPopup();
-                } else {
-                    this.Document.card_sort = this.cardSort === cardSortings.Chat ? '' : this.Document.card_sort;
-                }
-            }
-        );
         // if card deck moves, then the child doc views are hidden so their screen to local transforms will return empty rectangles
-        // when inquired from the dom (below in childScreenToLocal).  When the doc is actually renders, we need to act like the
+        // when inquired from the dom (below in childScreenToLocal).  When the doc is actually rendered, we need to act like the
         // dash data just changed and trigger a React involidation with the correct data (read from the dom).
         this._disposers.child = reaction(
             () => [this.Document.x, this.Document.y],
@@ -136,14 +116,11 @@ export class CollectionCardView extends CollectionSubView() {
         this._dropDisposer?.();
     }
 
-    @computed get cardSort() {
-        return StrCast(this.Document.card_sort) as cardSortings;
-    }
     /**
      * Number of rows of cards to be rendered
      */
     @computed get numRows() {
-        return Math.ceil(this.sortedDocs.length / this._maxRowCount);
+        return Math.ceil(this.childDocs.length / this._maxRowCount);
     }
     /**
      * Circle arc size, in radians, to layout cards
@@ -211,7 +188,7 @@ export class CollectionCardView extends CollectionSubView() {
      * @returns the card's new index
      */
     findCardDropIndex = (mouseX: number, mouseY: number) => {
-        const cardCount = this.sortedDocs.length;
+        const cardCount = this.childDocs.length;
         let index = 0;
         const cardWidth = cardCount < this._maxRowCount ? this._props.PanelWidth() / cardCount : this._props.PanelWidth() / this._maxRowCount;
 
@@ -245,8 +222,8 @@ export class CollectionCardView extends CollectionSubView() {
      */
     @action
     onPointerMove = (x: number, y: number) => {
-        if (DragManager.docsBeingDragged.some(doc => this.sortedDocs.includes(doc)) || SnappingManager.CanEmbed) {
-            this._docDraggedIndex = this.findCardDropIndex(x, y);
+        if (DragManager.docsBeingDragged.some(doc => this.childDocs.includes(doc)) || SnappingManager.CanEmbed) {
+            this.docDraggedIndex = this.findCardDropIndex(x, y);
         }
     };
 
@@ -259,11 +236,11 @@ export class CollectionCardView extends CollectionSubView() {
     onInternalDrop = undoable(
         action((e: Event, de: DragManager.DropEvent) => {
             if (de.complete.docDragData) {
-                const dragIndex = this._docDraggedIndex;
+                const dragIndex = this.docDraggedIndex;
                 const draggedDoc = DragManager.docsBeingDragged[0];
                 if (dragIndex > -1 && draggedDoc) {
-                    this._docDraggedIndex = -1;
-                    const sorted = this.sortedDocs;
+                    this.docDraggedIndex = -1;
+                    const sorted = this.childDocs;
                     const originalIndex = sorted.findIndex(doc => doc === draggedDoc);
 
                     this.Document.card_sort = '';
@@ -295,50 +272,6 @@ export class CollectionCardView extends CollectionSubView() {
             .map(({ i }) => i)
             .join('.');
 
-    /**
-     * Called in the sortedDocsType method. Compares the cards' value in regards to the desired sort type-- earlier cards are move to the
-     * front, latter cards to the back
-     * @param docs
-     * @param sortType
-     * @param isDesc
-     * @returns
-     */
-    sort = (docsIn: Doc[], sortType: cardSortings, isDesc: boolean, dragIndex: number) => {
-        const docs = docsIn.slice(); // need make new object list since sort() modifies the incoming list which confuses mobx caching
-        sortType &&
-            docs.sort((docA, docB) => {
-                const [typeA, typeB] = (() => {
-                    switch (sortType) {
-                        default:                
-                        case cardSortings.Type: return [StrCast(docA.type),                                   StrCast(docB.type)];
-                        case cardSortings.Chat: return [NumCast(docA.chatIndex, 9999),                        NumCast(docB.chatIndex,9999)];
-                        case cardSortings.Time: return [DateCast(docA.author_date)?.date ?? Date.now(),       DateCast(docB.author_date)?.date ?? Date.now()];
-                        case cardSortings.Color:return [DashColor(StrCast(docA.backgroundColor)).hsv().hue(), DashColor(StrCast(docB.backgroundColor)).hsv().hue()];
-                        case cardSortings.Tag:  return [StrListCast(docA.tags).join(""),                      StrListCast(docB.tags).join("")];
-                    }
-                })(); //prettier-ignore
-                return (typeA < typeB ? -1 : typeA > typeB ? 1 : 0) * (isDesc ? 1 : -1);
-            });
-        if (dragIndex !== -1) {
-            const draggedDoc = DragManager.docsBeingDragged[0];
-            const originalIndex = docs.findIndex(doc => doc === draggedDoc);
-
-            originalIndex !== -1 && docs.splice(originalIndex, 1);
-            draggedDoc && docs.splice(dragIndex, 0, draggedDoc);
-        }
-
-        return docs;
-    };
-
-    @computed get sortedDocs() {
-        return this.sort(
-            this.childCards.map(card => card.layout),
-            this.cardSort,
-            BoolCast(this.Document.card_sort_isDesc),
-            this._docDraggedIndex
-        );
-    }
-
     isChildContentActive = computedFn(
         (doc: Doc) => () =>
             this._props.isContentActive?.() === false
@@ -560,16 +493,6 @@ export class CollectionCardView extends CollectionSubView() {
         });
     }, '');
 
-    /**
-     * Opens up the chat popup and starts the process for smart sorting.
-     */
-    openChatPopup = async () => {
-        GPTPopup.Instance.setVisible(true);
-        GPTPopup.Instance.setMode(GPTPopupMode.CARD);
-        GPTPopup.Instance.setCardsDoneLoading(true); // Set dataDoneLoading to true after data is loaded
-        await this.childPairStringListAndUpdateSortDesc();
-    };
-
     childScreenToLocal = computedFn((doc: Doc, index: number, isSelected: boolean) => () => {
         // need to explicitly trigger an invalidation since we're reading everything from the Dom
         this._forceChildXf;
@@ -615,7 +538,7 @@ export class CollectionCardView extends CollectionSubView() {
         setupMoveUpEvents(
             this,
             e,
-            (e: PointerEvent, down: number[], delta: number[]) => {
+            (emove: PointerEvent, down: number[], delta: number[]) => {
                 this.layoutDoc._cardWidth = Math.max(10, delta[0] < 0 ? Math.floor(this.cardWidth + delta[0]) : Math.ceil(this.cardWidth + delta[0]));
                 return false;
             },
@@ -662,9 +585,9 @@ export class CollectionCardView extends CollectionSubView() {
      * Actually renders all the cards
      */
     @computed get renderCards() {
-        trace();
+        console.log(this.docDraggedIndex, this.childDocs[0].title, this.childDocs[1].title);
         // Map sorted documents to their rendered components
-        return this.sortedDocs.map((doc, index) => {
+        return this.childDocs.map((doc, index) => {
             const cardsInRow = this.cardsInRowThatIncludesCardIndex(index);
 
             const childScreenToLocal = this.childScreenToLocal(doc, index, doc === this.curDoc());
@@ -674,7 +597,7 @@ export class CollectionCardView extends CollectionSubView() {
             const aspect = NumCast(doc.height) / NumCast(doc.width, 1);
             const vscale = Math.max(1,Math.min((this._props.PanelHeight() * 0.95 * this.fitContentScale * this.nativeScaling) / (aspect * this.childPanelWidth()), 
                                     (this._props.PanelHeight() - 80) / (aspect * (this._props.PanelWidth() / 10)))); // prettier-ignore
-            const hscale = Math.min(this.sortedDocs.length, this._maxRowCount) / 2; // bcz: hack - the grid is divided evenly into maxRowCount cells, so the max scaling would be maxRowCount -- but making things that wide is ugly, so cap it off at half the window size
+            const hscale = Math.min(this.childDocs.length, this._maxRowCount) / 2; // bcz: hack - the grid is divided evenly into maxRowCount cells, so the max scaling would be maxRowCount -- but making things that wide is ugly, so cap it off at half the window size
             return (
                 <div
                     key={doc[Id]}
@@ -710,17 +633,13 @@ export class CollectionCardView extends CollectionSubView() {
     curDoc = () => DocCast(this.layoutDoc._card_curDoc);
 
     render() {
-        trace();
         const fitContentScale = this.childCards.length === 0 ? 1 : this.fitContentScale;
         return (
             <div
                 className="collectionCardView-outer"
                 ref={(ele: HTMLDivElement | null) => this.createDashEventsTarget(ele)}
-                onPointerDown={action(e => {
-                    if (e.button === 2 || e.ctrlKey) return;
-                    this.releaseCurDoc();
-                })}
-                onPointerLeave={action(() => (this._docDraggedIndex = -1))}
+                onPointerDown={e => e.button !== 2 && !e.ctrlKey && this.releaseCurDoc()}
+                onPointerLeave={action(() => (this.docDraggedIndex = -1))}
                 onPointerMove={e => this.onPointerMove(...this._props.ScreenToLocalTransform().transformPoint(e.clientX, e.clientY))}
                 onDrop={this.onExternalDrop.bind(this)}
                 style={{
diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx
index 0c059f729..5e99bec39 100644
--- a/src/client/views/collections/CollectionSubView.tsx
+++ b/src/client/views/collections/CollectionSubView.tsx
@@ -1,7 +1,7 @@
 import { action, computed, makeObservable, observable } from 'mobx';
 import * as React from 'react';
 import * as rp from 'request-promise';
-import { ClientUtils, returnFalse } from '../../../ClientUtils';
+import { ClientUtils, DashColor, returnFalse } from '../../../ClientUtils';
 import CursorField from '../../../fields/CursorField';
 import { Doc, DocListCast, GetDocFromUrl, GetHrefFromHTML, Opt, RTFIsFragment, StrListCast } from '../../../fields/Doc';
 import { AclPrivate, DocData } from '../../../fields/DocSymbols';
@@ -9,7 +9,7 @@ import { Id } from '../../../fields/FieldSymbols';
 import { List } from '../../../fields/List';
 import { listSpec } from '../../../fields/Schema';
 import { ScriptField } from '../../../fields/ScriptField';
-import { BoolCast, Cast, NumCast, ScriptCast, StrCast, toList } from '../../../fields/Types';
+import { BoolCast, Cast, DateCast, NumCast, ScriptCast, StrCast, toList } from '../../../fields/Types';
 import { WebField } from '../../../fields/URLField';
 import { GetEffectiveAcl, TraceMobx } from '../../../fields/util';
 import { GestureUtils } from '../../../pen-gestures/GestureUtils';
@@ -29,6 +29,14 @@ import { DocumentView, DocumentViewProps } from '../nodes/DocumentView';
 import { FlashcardPracticeUI } from './FlashcardPracticeUI';
 import { OpenWhere, OpenWhereMod } from '../nodes/OpenWhere';
 
+export enum docSortings {
+    Time = 'time',
+    Type = 'type',
+    Color = 'color',
+    Chat = 'chat',
+    Tag = 'tag',
+    None = '',
+}
 export interface CollectionViewProps extends React.PropsWithChildren<FieldViewProps> {
     isAnnotationOverlay?: boolean; // is the collection an annotation overlay (eg an overlay on an image/video/etc)
     isAnnotationOverlayScrollable?: boolean; // whether the annotation overlay can be vertically scrolled (just for tree views, currently)
@@ -150,6 +158,8 @@ export function CollectionSubView<X>() {
         unrecursiveDocFilters = () => [...(this._props.childFilters?.().filter(f => !ClientUtils.IsRecursiveFilter(f)) || [])];
         childDocRangeFilters = () => [...(this._props.childFiltersByRanges?.() || []), ...this.collectionRangeDocFilters()];
         searchFilterDocs = () => this._props.searchFilterDocs?.() ?? DocListCast(this.Document._searchFilterDocs);
+
+        @observable docDraggedIndex = -1;
         @computed.struct get childDocs() {
             TraceMobx();
             let rawdocs: (Doc | Promise<Doc>)[] = [];
@@ -166,8 +176,10 @@ export function CollectionSubView<X>() {
                 const templateRoot = this._props.TemplateDataDocument;
                 rawdocs = templateRoot && !this._props.isAnnotationOverlay ? [Doc.GetProto(templateRoot)] : [];
             }
-
-            const childDocs = rawdocs.filter(d => !(d instanceof Promise) && GetEffectiveAcl(Doc.GetProto(d)) !== AclPrivate && (this._props.ignoreUnrendered || !d.layout_unrendered)).map(d => d as Doc);
+            const childDocs = this.childSortedDocs(
+                rawdocs.filter(d => !(d instanceof Promise) && GetEffectiveAcl(Doc.GetProto(d)) !== AclPrivate && (this._props.ignoreUnrendered || !d.layout_unrendered)).map(d => d as Doc),
+                this.docDraggedIndex
+            );
 
             const childDocFilters = this.childDocFilters();
             const childFiltersByRanges = this.childDocRangeFilters();
@@ -214,6 +226,35 @@ export function CollectionSubView<X>() {
             return docsforFilter;
         }
 
+        childSortedDocs = (docsIn: Doc[], dragIndex: number) => {
+            const sortType = StrCast(this.Document[this._props.fieldKey + '_sort']) as docSortings;
+            const isDesc = BoolCast(this.Document[this._props.fieldKey + '_sort_desc']);
+            const docs = docsIn.slice();
+            if (sortType) {
+                docs.sort((docA, docB) => {
+                    const [typeA, typeB] = (() => {
+                        switch (sortType) {
+                            default:                
+                            case docSortings.Type: return [StrCast(docA.type),                                   StrCast(docB.type)];
+                            case docSortings.Chat: return [NumCast(docA.chatIndex, 9999),                        NumCast(docB.chatIndex,9999)];
+                            case docSortings.Time: return [DateCast(docA.author_date)?.date ?? Date.now(),       DateCast(docB.author_date)?.date ?? Date.now()];
+                            case docSortings.Color:return [DashColor(StrCast(docA.backgroundColor)).hsv().hue(), DashColor(StrCast(docB.backgroundColor)).hsv().hue()];
+                            case docSortings.Tag:  return [StrListCast(docA.tags).join(""),                      StrListCast(docB.tags).join("")];
+                        }
+                    })(); //prettier-ignore
+                    return (typeA < typeB ? -1 : typeA > typeB ? 1 : 0) * (isDesc ? 1 : -1);
+                });
+            }
+            if (dragIndex !== -1) {
+                const draggedDoc = DragManager.docsBeingDragged[0];
+                const originalIndex = docs.findIndex(doc => doc === draggedDoc);
+
+                originalIndex !== -1 && docs.splice(originalIndex, 1);
+                draggedDoc && docs.splice(dragIndex, 0, draggedDoc);
+            }
+            return docs;
+        };
+
         @action
         protected async setCursorPosition(position: [number, number]) {
             let ind;
diff --git a/src/client/views/collections/FlashcardPracticeUI.tsx b/src/client/views/collections/FlashcardPracticeUI.tsx
index 77f1db9ad..c071c5fb8 100644
--- a/src/client/views/collections/FlashcardPracticeUI.tsx
+++ b/src/client/views/collections/FlashcardPracticeUI.tsx
@@ -58,7 +58,7 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
     get practiceField() { return this._props.fieldKey + "_practice"; } // prettier-ignore
 
     @computed get filterDoc() { return DocListCast(Doc.MyContextMenuBtns.data).find(doc => doc.title === 'Filter'); } // prettier-ignore
-    @computed get practiceMode() {  return this._props.allChildDocs().some(doc => doc._flashcardType) ? StrCast(this._props.layoutDoc.practiceMode) : ''; } // prettier-ignore
+    @computed get practiceMode() {  return this._props.allChildDocs().some(doc => doc._layout_flashcardType) ? StrCast(this._props.layoutDoc.practiceMode) : ''; } // prettier-ignore
 
     btnHeight = () => NumCast(this.filterDoc?.height) * Math.min(1, this._props.ScreenToLocalBoxXf().Scale);
     btnWidth = () => (!this.filterDoc ? 1 : (this.btnHeight() * NumCast(this.filterDoc._width)) / NumCast(this.filterDoc._height));
@@ -179,7 +179,7 @@ export class FlashcardPracticeUI extends ObservableReactComponent<PracticeUIProp
             </div>
         );
     }
-    tryFilterOut = (doc: Doc) => (this.practiceMode && BoolCast(doc?._flashcardType) && doc[this.practiceField] === practiceVal.CORRECT ? true : false); // show only cards that aren't marked as correct
+    tryFilterOut = (doc: Doc) => (this.practiceMode && doc?._layout_flashcardType && doc[this.practiceField] === practiceVal.CORRECT ? true : false); // show only cards that aren't marked as correct
     render() {
         return (
             <div className="FlashcardPracticeUI">
diff --git a/src/client/views/global/globalScripts.ts b/src/client/views/global/globalScripts.ts
index 542417531..b02eabab0 100644
--- a/src/client/views/global/globalScripts.ts
+++ b/src/client/views/global/globalScripts.ts
@@ -40,6 +40,7 @@ import { WebBox } from '../nodes/WebBox';
 import { RichTextMenu } from '../nodes/formattedText/RichTextMenu';
 import { GPTPopup, GPTPopupMode } from '../pdf/GPTPopup/GPTPopup';
 import { OpenWhere } from '../nodes/OpenWhere';
+import { docSortings } from '../collections/CollectionSubView';
 
 // eslint-disable-next-line prefer-arrow-callback
 ScriptingGlobals.add(function IsNoneSelected() {
@@ -197,43 +198,35 @@ ScriptingGlobals.add(function showFreeform(
             checkResult: (doc: Doc) => BoolCast(doc?._freeform_useClusters, false),
             setDoc: (doc: Doc) => { doc._freeform_useClusters = !doc._freeform_useClusters; },
         }],
-        ['flashcards', {
-            checkResult: (doc: Doc) => BoolCast(Doc.UserDoc().defaultToFlashcards, false),
-            setDoc: (doc: Doc, dv: DocumentView) => { Doc.UserDoc().defaultToFlashcards = !Doc.UserDoc().defaultToFlashcards}, // prettier-ignore
-        }],
         ['time', {
-            checkResult: (doc: Doc) => StrCast(doc?.card_sort) === "time",
-            setDoc: (doc: Doc, dv: DocumentView) => { doc.card_sort === "time" ? doc.card_sort = '' : doc.card_sort = 'time'}, // prettier-ignore
+            checkResult: (doc: Doc) => StrCast(doc?.[Doc.LayoutFieldKey(doc)+"_sort"]) === "time",
+            setDoc: (doc: Doc, dv: DocumentView) => { doc[Doc.LayoutFieldKey(doc)+"_sort"] === "time" ? doc[Doc.LayoutFieldKey(doc)+"_sort"] = '' : doc[Doc.LayoutFieldKey(doc)+"_sort"] = docSortings.Time}, // prettier-ignore
         }],
         ['docType', {
-            checkResult: (doc: Doc) => StrCast(doc?.card_sort) === "type",
-            setDoc: (doc: Doc, dv: DocumentView) => { doc.card_sort === "type" ? doc.card_sort = '' : doc.card_sort = 'type'}, // prettier-ignore
+            checkResult: (doc: Doc) => StrCast(doc?.[Doc.LayoutFieldKey(doc)+"_sort"]) === "type",
+            setDoc: (doc: Doc, dv: DocumentView) => { doc[Doc.LayoutFieldKey(doc)+"_sort"] === "type" ? doc[Doc.LayoutFieldKey(doc)+"_sort"] = '' : doc[Doc.LayoutFieldKey(doc)+"_sort"] = docSortings.Type}, // prettier-ignore
         }],
         ['color', {
-            checkResult: (doc: Doc) => StrCast(doc?.card_sort) === "color",
-            setDoc: (doc: Doc, dv: DocumentView) => { doc.card_sort === "color" ? doc.card_sort = '' : doc.card_sort = 'color'}, // prettier-ignore
+            checkResult: (doc: Doc) => StrCast(doc?.[Doc.LayoutFieldKey(doc)+"_sort"]) === "color",
+            setDoc: (doc: Doc, dv: DocumentView) => { doc?.[Doc.LayoutFieldKey(doc)+"_sort"] === "color" ? doc[Doc.LayoutFieldKey(doc)+"_sort"] = '' : doc[Doc.LayoutFieldKey(doc)+"_sort"] = docSortings.Color}, // prettier-ignore
         }],
         ['tag', {
-            checkResult: (doc: Doc) => StrCast(doc?.card_sort) === "tag",
-            setDoc: (doc: Doc, dv: DocumentView) => { doc.card_sort === "tag" ? doc.card_sort = '' : doc.card_sort = 'tag'}, // prettier-ignore
+            checkResult: (doc: Doc) => StrCast(doc?.[Doc.LayoutFieldKey(doc)+"_sort"]) === "tag",
+            setDoc: (doc: Doc, dv: DocumentView) => { doc[Doc.LayoutFieldKey(doc)+"_sort"] === "tag" ? doc[Doc.LayoutFieldKey(doc)+"_sort"] = '' : doc[Doc.LayoutFieldKey(doc)+"_sort"] = docSortings.Tag}, // prettier-ignore
         }],
         ['up', {
-            checkResult: (doc: Doc) => BoolCast(!doc?.card_sort_isDesc),
-            setDoc: (doc: Doc, dv: DocumentView) => {
-                doc.card_sort_isDesc = false;
-            },
+            checkResult: (doc: Doc) => BoolCast(!doc?.[Doc.LayoutFieldKey(doc)+"_sort_desc"]),
+            setDoc: (doc: Doc, dv: DocumentView) => { doc[Doc.LayoutFieldKey(doc)+"_sort_desc"] = undefined; },
         }],
         ['down', {
-            checkResult: (doc: Doc) => BoolCast(doc?.card_sort_isDesc),
-            setDoc: (doc: Doc, dv: DocumentView) => {
-                doc.card_sort_isDesc = true;
-            },
+            checkResult: (doc: Doc) => BoolCast(doc?.[Doc.LayoutFieldKey(doc)+"_sort_desc"]),
+            setDoc: (doc: Doc, dv: DocumentView) => { doc[Doc.LayoutFieldKey(doc)+"_sort_desc"] = true; },
         }],
         ['toggle-chat', {
             checkResult: (doc: Doc) => GPTPopup.Instance.visible,
             setDoc: (doc: Doc, dv: DocumentView) => {
                 if (GPTPopup.Instance.visible){
-                    doc.card_sort = ''
+                    doc[Doc.LayoutFieldKey(doc)+"_sort"] = '';
                     GPTPopup.Instance.setVisible(false);
    
                 } else {
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index e0c360132..f5291a4c1 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -1,7 +1,7 @@
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { Tooltip } from '@mui/material';
 import axios from 'axios';
-import { IReactionDisposer, action, computed, makeObservable, observable, reaction, runInAction, trace } from 'mobx';
+import { IReactionDisposer, action, computed, makeObservable, observable, reaction, runInAction } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import ReactLoading from 'react-loading';
diff --git a/src/client/views/nodes/imageEditor/ImageEditor.tsx b/src/client/views/nodes/imageEditor/ImageEditor.tsx
index 2ae6ee1dd..6b1d05031 100644
--- a/src/client/views/nodes/imageEditor/ImageEditor.tsx
+++ b/src/client/views/nodes/imageEditor/ImageEditor.tsx
@@ -551,8 +551,7 @@ const ImageEditor = ({ imageEditorOpen, imageEditorSource, imageRootDoc, addDoc
         img.src = src;
         if (!currImg.current || !originalImg.current || !imageRootDoc) return undefined;
         try {
-            const res = await createNewImgDoc(img, false);
-            return res;
+            return await createNewImgDoc(img, false);
         } catch (err) {
             console.log(err);
         }
@@ -589,9 +588,7 @@ const ImageEditor = ({ imageEditorOpen, imageEditorSource, imageRootDoc, addDoc
                                 // disable once edited has been clicked (doesn't make sense to change after first edit)
                                 disabled={edited}
                                 checked={isNewCollection}
-                                onChange={() => {
-                                    setIsNewCollection(prev => !prev);
-                                }}
+                                onChange={() => setIsNewCollection(prev => !prev)}
                             />
                         }
                         label="Create New Collection"
@@ -610,49 +607,13 @@ const ImageEditor = ({ imageEditorOpen, imageEditorSource, imageRootDoc, addDoc
         return (
             <div className="sideControlsContainer" style={{ backgroundColor: bgColor }}>
                 <div className="sideControls">
-                    <div className="imageToolsContainer">
-                        {imageEditTools.map(tool => {
-                            return ImageToolButton(tool, tool.type === currTool.type, changeTool);
-                        })}
-                    </div>
+                    <div className="imageToolsContainer">{imageEditTools.map(tool => ImageToolButton(tool, tool.type === currTool.type, changeTool))}</div>
                     {currTool.type == ImageToolType.Cut && (
                         <div className="cutToolsContainer">
-                            <Button
-                                style={{ width: '100%' }}
-                                text="Keep in"
-                                type={Type.TERT}
-                                color={cutType == CutMode.IN ? SettingsManager.userColor : bgColor}
-                                onClick={() => {
-                                    setCutType(CutMode.IN);
-                                }}
-                            />
-                            <Button
-                                style={{ width: '100%' }}
-                                text="Keep out"
-                                type={Type.TERT}
-                                color={cutType == CutMode.OUT ? SettingsManager.userColor : bgColor}
-                                onClick={() => {
-                                    setCutType(CutMode.OUT);
-                                }}
-                            />
-                            <Button
-                                style={{ width: '100%' }}
-                                text="Draw in"
-                                type={Type.TERT}
-                                color={cutType == CutMode.DRAW_IN ? SettingsManager.userColor : bgColor}
-                                onClick={() => {
-                                    setCutType(CutMode.DRAW_IN);
-                                }}
-                            />
-                            <Button
-                                style={{ width: '100%' }}
-                                text="Erase"
-                                type={Type.TERT}
-                                color={cutType == CutMode.ERASE ? SettingsManager.userColor : bgColor}
-                                onClick={() => {
-                                    setCutType(CutMode.ERASE);
-                                }}
-                            />
+                            <Button style={{ width: '100%' }} text="Keep in" type={Type.TERT} color={cutType == CutMode.IN ? SettingsManager.userColor : bgColor} onClick={() => setCutType(CutMode.IN)} />
+                            <Button style={{ width: '100%' }} text="Keep out" type={Type.TERT} color={cutType == CutMode.OUT ? SettingsManager.userColor : bgColor} onClick={() => setCutType(CutMode.OUT)} />
+                            <Button style={{ width: '100%' }} text="Draw in" type={Type.TERT} color={cutType == CutMode.DRAW_IN ? SettingsManager.userColor : bgColor} onClick={() => setCutType(CutMode.DRAW_IN)} />
+                            <Button style={{ width: '100%' }} text="Erase" type={Type.TERT} color={cutType == CutMode.ERASE ? SettingsManager.userColor : bgColor} onClick={() => setCutType(CutMode.ERASE)} />
                         </div>
                     )}
                     <div className="sliderContainer" onPointerDown={e => e.stopPropagation()}>
@@ -669,9 +630,7 @@ const ImageEditor = ({ imageEditorOpen, imageEditorSource, imageRootDoc, addDoc
                                 defaultValue={genFillTool.sliderDefault}
                                 size="small"
                                 valueLabelDisplay="auto"
-                                onChange={(e, val) => {
-                                    setCursorData(prev => ({ ...prev, width: val as number }));
-                                }}
+                                onChange={(e, val) => setCursorData(prev => ({ ...prev, width: val as number }))}
                             />
                         )}
                         {currTool.type === ImageToolType.Cut && (
@@ -687,9 +646,7 @@ const ImageEditor = ({ imageEditorOpen, imageEditorSource, imageRootDoc, addDoc
                                 defaultValue={cutTool.sliderDefault}
                                 size="small"
                                 valueLabelDisplay="auto"
-                                onChange={(e, val) => {
-                                    setCursorData(prev => ({ ...prev, width: val as number }));
-                                }}
+                                onChange={(e, val) => setCursorData(prev => ({ ...prev, width: val as number }))}
                             />
                         )}
                     </div>
@@ -701,9 +658,7 @@ const ImageEditor = ({ imageEditorOpen, imageEditorSource, imageRootDoc, addDoc
                                 e.stopPropagation();
                                 handleUndo();
                             }}
-                            onPointerUp={e => {
-                                e.stopPropagation();
-                            }}
+                            onPointerUp={e => e.stopPropagation()}
                             color={activeColor}
                             tooltip="Undo"
                             icon={<IoMdUndo />}
@@ -714,9 +669,7 @@ const ImageEditor = ({ imageEditorOpen, imageEditorSource, imageRootDoc, addDoc
                                 e.stopPropagation();
                                 handleRedo();
                             }}
-                            onPointerUp={e => {
-                                e.stopPropagation();
-                            }}
+                            onPointerUp={e => e.stopPropagation()}
                             color={activeColor}
                             tooltip="Redo"
                             icon={<IoMdRedo />}
diff --git a/src/client/views/nodes/imageEditor/ImageEditorButtons.tsx b/src/client/views/nodes/imageEditor/ImageEditorButtons.tsx
index de2116253..e810881a5 100644
--- a/src/client/views/nodes/imageEditor/ImageEditorButtons.tsx
+++ b/src/client/views/nodes/imageEditor/ImageEditorButtons.tsx
@@ -55,6 +55,7 @@ export function ImageToolButton(tool: ImageEditTool, isActive: boolean, selectTo
     return (
         <div className="imageEditorButtonContainer">
             <Button
+                key={tool.name}
                 style={{ width: '100%' }}
                 text={tool.name}
                 type={Type.TERT}
-- 
cgit v1.2.3-70-g09d2


From 1e673454f8cabf894e8dfec36734d2cb41caa7b1 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Mon, 3 Feb 2025 10:23:56 -0500
Subject: changed filter 'check' to be exact match and 'match' to be substring.
  fixed GPTpopup filtering to use a #chat tag instead of a chatFilter field.

---
 src/client/apis/gpt/GPT.ts                         |  2 +-
 src/client/documents/DocUtils.ts                   |  4 +-
 src/client/util/CurrentUserUtils.ts                |  3 +-
 src/client/views/TagsView.scss                     |  4 +-
 src/client/views/TagsView.tsx                      |  2 +-
 .../views/collections/CollectionCardDeckView.tsx   | 11 +++--
 src/client/views/global/globalScripts.ts           |  4 +-
 src/client/views/nodes/ComparisonBox.tsx           |  2 +-
 src/client/views/nodes/IconTagBox.scss             |  2 -
 src/client/views/pdf/GPTPopup/GPTPopup.tsx         | 57 ++++++++++------------
 10 files changed, 44 insertions(+), 47 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index 269a4284a..1894bb4df 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -42,7 +42,7 @@ const callTypeMap: { [type: string]: GPTCallOpts } = {
         model: 'gpt-4o',
         maxTokens: 2048,
         temp: 0.7,
-        prompt: 'Create a stack of flashcards out of this text with each question and answer labeled as question and answer. Create a title that represents the question in just a few words and label it "title". For some questions, ask "what is this image of" but tailored to stacks theme and the image and write a keyword that represents the image and label it "keyword". Otherwise, write none. Do not label each flashcard and do not include asterisks.',
+        prompt: 'Create a stack of at least 10 flashcards out of this text with each question and answer labeled as question and answer. Each flashcard should have a title that represents the question in just a few words and label it "title". For some questions, ask "what is this image of" but tailored to stacks theme and the image and write a keyword that represents the image and label it "keyword". Otherwise, write none. Do not label each flashcard and do not include asterisks.',
     },
 
     completion: { model: 'gpt-4-turbo', maxTokens: 256, temp: 0.5, prompt: "You are a helpful assistant. Answer the user's prompt." },
diff --git a/src/client/documents/DocUtils.ts b/src/client/documents/DocUtils.ts
index d11a3e235..23032b62e 100644
--- a/src/client/documents/DocUtils.ts
+++ b/src/client/documents/DocUtils.ts
@@ -72,9 +72,9 @@ export namespace DocUtils {
         }
         const vals = StrListCast(fieldVal); // list typing is very imperfect.  casting to a string list doesn't mean that the entries will actually be strings
         if (vals.length) {
-            return vals.some(v => typeof v === 'string' && v.includes(value as string)); // bcz: arghh: Todo: comparison should be parameterized as exact, or substring
+            return vals.some(v => typeof v === 'string' && v === (value as string)); // bcz: arghh: Todo: comparison should be parameterized as exact, or substring
         }
-        return Field.toString(fieldVal as FieldType).includes(value as string); // bcz: arghh: Todo: comparison should be parameterized as exact, or substring
+        return Field.toString(fieldVal as FieldType) === (value as string); // bcz: arghh: Todo: comparison should be parameterized as exact, or substring
     }
     /**
      * @param docs
diff --git a/src/client/util/CurrentUserUtils.ts b/src/client/util/CurrentUserUtils.ts
index b75961575..0fd09b479 100644
--- a/src/client/util/CurrentUserUtils.ts
+++ b/src/client/util/CurrentUserUtils.ts
@@ -728,7 +728,8 @@ pie title Minerals in my tap water
             this.filterBtnDesc("Star", "star"),
             this.filterBtnDesc("Like", "heart"),
             this.filterBtnDesc("Todo", "bolt"),
-            this.filterBtnDesc("Idea", "cloud")
+            this.filterBtnDesc("Idea", "cloud"),
+            this.filterBtnDesc("Chat", "robot")
         ];
         return [
             { title:"Options",isSystem: true,icon: "gear",  toolTip:"Click to customize list of filter buttons", btnType: ButtonType.ClickButton, expertMode: false, toolType:"-opts-",funcs: {}, scripts: { onClick: '{ return setTagFilter(this.toolType, false,_readOnly_);}'}},
diff --git a/src/client/views/TagsView.scss b/src/client/views/TagsView.scss
index 303a08e1e..b21d303fb 100644
--- a/src/client/views/TagsView.scss
+++ b/src/client/views/TagsView.scss
@@ -12,7 +12,7 @@
         .tagsView-list {
             display: flex;
             flex-wrap: wrap;
-            height: inherit;
+            height: 1;
             .iconButton-container {
                 min-height: unset !important;
             }
@@ -58,7 +58,7 @@
 }
 
 .tagsView-editing-box {
-    margin-top: 8px;
+    margin-top: 20px;
 }
 
 .tagsView-input-box {
diff --git a/src/client/views/TagsView.tsx b/src/client/views/TagsView.tsx
index 9e936ea54..b70e21918 100644
--- a/src/client/views/TagsView.tsx
+++ b/src/client/views/TagsView.tsx
@@ -146,7 +146,7 @@ export class TagItem extends ObservableReactComponent<TagItemProps> {
                 }
             }
         }
-        doc[DocData].tags = new List<string>((doc[DocData].tags as List<string>).filter(label => label !== tag));
+        doc[DocData].tags = new List<string>(StrListCast(doc[DocData].tags).filter(label => label !== tag));
     };
 
     private _ref: React.RefObject<HTMLDivElement>;
diff --git a/src/client/views/collections/CollectionCardDeckView.tsx b/src/client/views/collections/CollectionCardDeckView.tsx
index f24673c39..43464e50c 100644
--- a/src/client/views/collections/CollectionCardDeckView.tsx
+++ b/src/client/views/collections/CollectionCardDeckView.tsx
@@ -85,6 +85,10 @@ export class CollectionCardView extends CollectionSubView() {
         });
 
     componentDidMount() {
+        this._disposers.chatVis = reaction(
+            () => GPTPopup.Instance.Visible,
+            vis => !vis && this.onGptHide()
+        );
         GPTPopup.Instance.setRegenerateCallback(this.Document, this.childPairStringListAndUpdateSortDesc);
         this._props.setContentViewBox?.(this);
         // if card deck moves, then the child doc views are hidden so their screen to local transforms will return empty rectangles
@@ -106,6 +110,7 @@ export class CollectionCardView extends CollectionSubView() {
         );
     }
 
+    onGptHide = () => Doc.setDocFilter(this.Document, 'tags', '#chat', 'remove');
     componentWillUnmount() {
         GPTPopup.Instance.setSortDesc('');
         GPTPopup.Instance.onSortComplete = undefined;
@@ -445,7 +450,7 @@ export class CollectionCardView extends CollectionSubView() {
 
             if (questionType === '2' || questionType === '4') {
                 this.childDocs.forEach(d => {
-                    d.chatFilter = false;
+                    TagItem.removeTagFromDoc(d, '#chat');
                 });
             }
 
@@ -471,8 +476,8 @@ export class CollectionCardView extends CollectionSubView() {
                             break;
                         case '2':
                         case '4':
-                            doc.chatFilter = true;
-                            Doc.setDocFilter(DocCast(this.Document), 'chatFilter', true, 'check');
+                            TagItem.addTagToDoc(doc, '#chat');
+                            Doc.setDocFilter(this.Document, 'tags', '#chat', 'check');
                             break;
                     }
                 } else {
diff --git a/src/client/views/global/globalScripts.ts b/src/client/views/global/globalScripts.ts
index b02eabab0..b44292164 100644
--- a/src/client/views/global/globalScripts.ts
+++ b/src/client/views/global/globalScripts.ts
@@ -223,9 +223,9 @@ ScriptingGlobals.add(function showFreeform(
             setDoc: (doc: Doc, dv: DocumentView) => { doc[Doc.LayoutFieldKey(doc)+"_sort_desc"] = true; },
         }],
         ['toggle-chat', {
-            checkResult: (doc: Doc) => GPTPopup.Instance.visible,
+            checkResult: (doc: Doc) => GPTPopup.Instance.Visible,
             setDoc: (doc: Doc, dv: DocumentView) => {
-                if (GPTPopup.Instance.visible){
+                if (GPTPopup.Instance.Visible){
                     doc[Doc.LayoutFieldKey(doc)+"_sort"] = '';
                     GPTPopup.Instance.setVisible(false);
    
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index f5291a4c1..53fbd11c5 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -510,7 +510,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      * Calls GPT for each flashcard type.
      */
     askGPT = async (callType: GPTCallType) => {
-        const questionText = 'Question: ' + this.frontText;
+        const questionText = this.frontText;
         const queryText = questionText + (callType == GPTCallType.QUIZ ? ' UserAnswer: ' + this._inputValue + '. ' + ' Rubric: ' + this.backText : '');
 
         this.loading = true;
diff --git a/src/client/views/nodes/IconTagBox.scss b/src/client/views/nodes/IconTagBox.scss
index 90cc06092..c79d662f4 100644
--- a/src/client/views/nodes/IconTagBox.scss
+++ b/src/client/views/nodes/IconTagBox.scss
@@ -10,8 +10,6 @@
     gap: 5px;
     padding-left: 5px;
     padding-right: 5px;
-    padding-top: 2px;
-    padding-bottom: 2px;
 
     button {
         pointer-events: auto;
diff --git a/src/client/views/pdf/GPTPopup/GPTPopup.tsx b/src/client/views/pdf/GPTPopup/GPTPopup.tsx
index da0cbea7a..f5a9f9e6a 100644
--- a/src/client/views/pdf/GPTPopup/GPTPopup.tsx
+++ b/src/client/views/pdf/GPTPopup/GPTPopup.tsx
@@ -46,9 +46,9 @@ export class GPTPopup extends ObservableReactComponent<object> {
     @observable private chatMode: boolean = false;
     private correlatedColumns: string[] = [];
 
-    @observable public visible: boolean = false;
+    @observable public Visible: boolean = false;
     @action public setVisible = (vis: boolean) => {
-        this.visible = vis;
+        this.Visible = vis;
     };
     @observable public loading: boolean = false;
     @action public setLoading = (loading: boolean) => {
@@ -114,8 +114,8 @@ export class GPTPopup extends ObservableReactComponent<object> {
         this.sortDesc = t;
     };
 
-    @observable onSortComplete?: (sortResult: string, questionType: string, tag?: string) => void;
-    @observable onQuizRandom?: () => void;
+    onSortComplete?: (sortResult: string, questionType: string, tag?: string) => void;
+    onQuizRandom?: () => void;
     @observable cardsDoneLoading = false;
 
     @observable collectionDoc: Doc | undefined = undefined;
@@ -154,30 +154,27 @@ export class GPTPopup extends ObservableReactComponent<object> {
     generateQuiz = async () => {
         this.setLoading(true);
 
-        const selected = DocumentView.SelectedDocs().lastElement();
+        await this.regenerateCallback?.();
 
-        const questionText = 'Question: ' + StrCast(selected.gptInputText);
-        const rubricText = 'Rubric: ' + StrCast(selected.gptRubric);
-        const queryText = questionText + ' UserAnswer: ' + this.quizAnswer + '. ' + rubricText;
+        const selected = DocumentView.SelectedDocs().lastElement();
+        if (!StrCast(selected.gptRubric)) {
+            await this.generateRubric(StrCast(selected.gptInputText), selected);
+        }
 
         try {
-            const res = await gptAPICall(queryText, GPTCallType.QUIZ);
-            if (!res) {
-                console.error('GPT call failed');
-                return;
-            }
-            console.log(res);
-            this.setQuizResp(res);
-            this.conversationArray.push(res);
+            const res = await gptAPICall('Question: ' + StrCast(selected.gptInputText) + ' UserAnswer: ' + this.quizAnswer + '.  Rubric: ' + StrCast(selected.gptRubric), GPTCallType.QUIZ);
+            if (res) {
+                this.setQuizResp(res);
+                this.conversationArray.push(res);
 
-            this.setLoading(false);
+                this.setLoading(false);
+                this.onQuizRandom?.();
+            } else {
+                console.error('GPT provided no response');
+            }
         } catch (err) {
             console.error('GPT call failed', err);
         }
-
-        if (this.onQuizRandom) {
-            this.onQuizRandom();
-        }
     };
 
     /**
@@ -223,9 +220,7 @@ export class GPTPopup extends ObservableReactComponent<object> {
     generateCard = async () => {
         this.setLoading(true);
 
-        if (this.regenerateCallback) {
-            await this.regenerateCallback();
-        }
+        await this.regenerateCallback?.();
 
         try {
             const questionType = await gptAPICall(this.chatSortPrompt, GPTCallType.TYPE);
@@ -442,9 +437,7 @@ export class GPTPopup extends ObservableReactComponent<object> {
                 onClick={() => {
                     this.conversationArray = ['Define the selected card!'];
                     this.setMode(GPTPopupMode.QUIZ);
-                    if (this.onQuizRandom) {
-                        this.onQuizRandom();
-                    }
+                    this.onQuizRandom?.();
                 }}
                 color={StrCast(Doc.UserDoc().userVariantColor)}
                 type={Type.TERT}
@@ -694,13 +687,13 @@ export class GPTPopup extends ObservableReactComponent<object> {
                         <IconButton color={StrCast(SettingsManager.userVariantColor)} tooltip="back" icon={<CgCornerUpLeft size="16px" />} onClick={() => (this.mode = GPTPopupMode.CARD)} style={{ right: '50px', position: 'absolute' }} />
                     )}
                     <Toggle
-                        tooltip="clear filters"
+                        tooltip="Clear Chat filter"
                         toggleType={ToggleType.BUTTON}
                         type={Type.PRIM}
-                        toggleStatus={this.collectionDoc?.childFilters ? true : false}
-                        text={this.collectionDoc?.childFilters ? 'filtered' : ''}
+                        toggleStatus={Doc.hasDocFilter(this.collectionDoc, 'tags', '#chat')}
+                        text={Doc.hasDocFilter(this.collectionDoc, 'tags', '#chat') ? 'filtered' : ''}
                         color="red"
-                        onClick={() => this.collectionDoc && (this.collectionDoc.childFilters = undefined)}
+                        onClick={() => this.collectionDoc && Doc.setDocFilter(this.collectionDoc, 'tags', '#chat', 'remove')}
                     />
                     <IconButton
                         color={StrCast(SettingsManager.userVariantColor)}
@@ -738,7 +731,7 @@ export class GPTPopup extends ObservableReactComponent<object> {
         }
 
         return (
-            <div className="summary-box" style={{ display: this.visible ? 'flex' : 'none' }}>
+            <div className="summary-box" style={{ display: this.Visible ? 'flex' : 'none' }}>
                 {content}
                 <div className="resize-handle" />
             </div>
-- 
cgit v1.2.3-70-g09d2


From 132fb0c203f426c508eeb23dd33b508e0608d19f Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Mon, 10 Feb 2025 09:38:32 -0500
Subject: code cleanup in createDocumentTool. added childLayoutFitWidth to
 comparisonBox so flashcards can fill window.

---
 src/ClientUtils.ts                                 |  9 ++++++
 .../views/collections/CollectionNoteTakingView.tsx |  2 +-
 src/client/views/nodes/ComparisonBox.tsx           |  6 ++--
 src/client/views/nodes/MapBox/MapBoxInfoWindow.tsx |  2 --
 .../views/nodes/chatbot/agentsystem/Agent.ts       |  2 +-
 .../nodes/chatbot/tools/CreateDocumentTool.ts      | 25 ++++-----------
 src/client/views/nodes/trails/PresBox.tsx          |  1 -
 src/server/ApiManagers/AssistantManager.ts         | 37 ++++++++++++----------
 8 files changed, 43 insertions(+), 41 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/ClientUtils.ts b/src/ClientUtils.ts
index e5dbb81db..8c9dd0a32 100644
--- a/src/ClientUtils.ts
+++ b/src/ClientUtils.ts
@@ -365,6 +365,15 @@ export namespace ClientUtils {
     }
 }
 
+/**
+ * Removes specified keys from an object and returns the result in the 'omit' field of the return value.
+ * The keys that were removed ared retuned in the 'extract' field of the return value.
+ * @param obj  - object to remove keys from
+ * @param keys - list of key field names to remove
+ * @param pattern - optional pattern to specify keys to removed
+ * @param addKeyFunc - optional function to call with object after keys have been removed
+ * @returns a tuple object containint 'omit' (oject after keys have been removed) and 'extact' (object containing omitted fields)
+ */
 export function OmitKeys(obj: object, keys: string[], pattern?: string, addKeyFunc?: (dup: object) => void): { omit: { [key: string]: unknown }; extract: { [key: string]: unknown } } {
     const omit: { [key: string]: unknown } = { ...obj };
     const extract: { [key: string]: unknown } = {};
diff --git a/src/client/views/collections/CollectionNoteTakingView.tsx b/src/client/views/collections/CollectionNoteTakingView.tsx
index 323a679cc..4c23d4c48 100644
--- a/src/client/views/collections/CollectionNoteTakingView.tsx
+++ b/src/client/views/collections/CollectionNoteTakingView.tsx
@@ -2,7 +2,7 @@ import { action, computed, IReactionDisposer, makeObservable, observable, reacti
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import { ClientUtils, DivHeight, lightOrDark, returnZero, smoothScroll } from '../../../ClientUtils';
-import { Doc, Field, FieldType, Opt, StrListCast } from '../../../fields/Doc';
+import { Doc, Opt, StrListCast } from '../../../fields/Doc';
 import { DocData } from '../../../fields/DocSymbols';
 import { Copy, Id } from '../../../fields/FieldSymbols';
 import { List } from '../../../fields/List';
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 53fbd11c5..cb0831d3c 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -10,7 +10,7 @@ import { emptyFunction } from '../../../Utils';
 import { Doc, Opt } from '../../../fields/Doc';
 import { Animation, DocData } from '../../../fields/DocSymbols';
 import { RichTextField } from '../../../fields/RichTextField';
-import { BoolCast, DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
+import { BoolCast, Cast, DocCast, NumCast, RTFCast, StrCast, toList } from '../../../fields/Types';
 import { nullAudio } from '../../../fields/URLField';
 import { GPTCallType, gptAPICall, gptImageLabel } from '../../apis/gpt/GPT';
 import { DocUtils, FollowLinkScript } from '../../documents/DocUtils';
@@ -677,6 +677,8 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             </div>
         </Tooltip>
     );
+    childFitWidth = () => Cast(this.Document.childLayoutFitWidth, 'boolean') ?? Cast(this.Document.childLayoutFitWidth, 'boolean');
+
     displayDoc = (whichSlot: string) => {
         const whichDoc = DocCast(this.dataDoc[whichSlot]);
         const targetDoc = DocCast(whichDoc?.annotationOn, whichDoc);
@@ -696,7 +698,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                     isDocumentActive={returnFalse}
                     isContentActive={this.childActiveFunc}
                     showTags={undefined}
-                    fitWidth={undefined} // set to returnTrue to make images fill the comparisonBox-- should be a user option
+                    fitWidth={this.childFitWidth} // set to returnTrue to make images fill the comparisonBox-- should be a user option
                     ignoreUsePath={layoutString ? true : undefined}
                     moveDocument={whichSlot === this.frontKey ? this.moveDocFront : this.moveDocBack}
                     removeDocument={whichSlot === this.frontKey ? this.remDocFront : this.remDocBack}
diff --git a/src/client/views/nodes/MapBox/MapBoxInfoWindow.tsx b/src/client/views/nodes/MapBox/MapBoxInfoWindow.tsx
index c69cd8e89..eb0431b85 100644
--- a/src/client/views/nodes/MapBox/MapBoxInfoWindow.tsx
+++ b/src/client/views/nodes/MapBox/MapBoxInfoWindow.tsx
@@ -41,7 +41,6 @@
 //     };
 
 //     _stack: CollectionStackingView | CollectionNoteTakingView | null | undefined;
-//     childLayoutFitWidth = (doc: Doc) => doc.type === DocumentType.RTF;
 //     addDoc = (doc: Doc | Doc[]) => (doc instanceof Doc ? [doc] : doc).reduce((p, d) => p && Doc.AddDocToList(this.props.place, 'data', d), true as boolean);
 //     removeDoc = (doc: Doc | Doc[]) => (doc instanceof Doc ? [doc] : doc).reduce((p, d) => p && Doc.RemoveDocFromList(this.props.place, 'data', d), true as boolean);
 //     render() {
@@ -69,7 +68,6 @@
 //                             chromeHidden={true}
 //                             childHideResizeHandles={true}
 //                             childHideDecorationTitle={true}
-//                             childLayoutFitWidth={this.childLayoutFitWidth}
 //                             // childDocumentsActive={returnFalse}
 //                             removeDocument={this.removeDoc}
 //                             addDocument={this.addDoc}
diff --git a/src/client/views/nodes/chatbot/agentsystem/Agent.ts b/src/client/views/nodes/chatbot/agentsystem/Agent.ts
index 25e471ce8..13fdac7f5 100644
--- a/src/client/views/nodes/chatbot/agentsystem/Agent.ts
+++ b/src/client/views/nodes/chatbot/agentsystem/Agent.ts
@@ -54,7 +54,7 @@ export class Agent {
         history: () => string,
         csvData: () => { filename: string; id: string; text: string }[],
         addLinkedUrlDoc: (url: string, id: string) => void,
-        addLinkedDoc: (doc_type: supportedDocumentTypes, data: unknown, options: DocumentOptions, id: string) => void,
+        addLinkedDoc: (doc_type: supportedDocumentTypes, data: unknown, options: DocumentOptions, id?: string) => void,
         // eslint-disable-next-line @typescript-eslint/no-unused-vars
         createCSVInDash: (url: string, title: string, id: string, data: string) => void
     ) {
diff --git a/src/client/views/nodes/chatbot/tools/CreateDocumentTool.ts b/src/client/views/nodes/chatbot/tools/CreateDocumentTool.ts
index b919b242c..07b515fea 100644
--- a/src/client/views/nodes/chatbot/tools/CreateDocumentTool.ts
+++ b/src/client/views/nodes/chatbot/tools/CreateDocumentTool.ts
@@ -1,8 +1,8 @@
-import { v4 as uuidv4 } from 'uuid';
 import { BaseTool } from './BaseTool';
 import { Observation } from '../types/types';
 import { ParametersType } from '../types/tool_types';
 import { DocumentOptions } from '../../../../documents/Documents';
+import { OmitKeys } from '../../../../../ClientUtils';
 
 export enum supportedDocumentTypes {
     flashcard = 'flashcard',
@@ -360,9 +360,9 @@ type CreateListDocToolParamsType = typeof createListDocToolParams;
 
 // Tool class for creating documents
 export class CreateDocTool extends BaseTool<CreateListDocToolParamsType> {
-    private _addLinkedDoc: (doc_type: supportedDocumentTypes, data: unknown, options: DocumentOptions, id: string) => void;
+    private _addLinkedDoc: (doc_type: supportedDocumentTypes, data: unknown, options: DocumentOptions) => void;
 
-    constructor(addLinkedDoc: (doc_type: supportedDocumentTypes, data: unknown, options: DocumentOptions, id: string) => void) {
+    constructor(addLinkedDoc: (doc_type: supportedDocumentTypes, data: unknown, options: DocumentOptions) => void) {
         super(
             'createDoc',
             `Creates one or more documents that best fit the user’s request. 
@@ -395,24 +395,13 @@ export class CreateDocTool extends BaseTool<CreateListDocToolParamsType> {
     async execute(args: ParametersType<CreateListDocToolParamsType>): Promise<Observation[]> {
         try {
             const parsedDoc = JSON.parse(args.docs) as ({ doc_type: supportedDocumentTypes; data: unknown } & DocumentOptions)[];
-            parsedDoc.forEach(doc =>
+            parsedDoc.forEach(
+                doc =>
                 this._addLinkedDoc(
                     doc.doc_type,
                     doc.data,
-                    {
-                        title: doc.title,
-                        backgroundColor: doc.backgroundColor,
-                        text_fontColor: doc.text_fontColor,
-                        _width: doc._width,
-                        _height: doc._height,
-                        type_collection: doc.type_collection,
-                        _layout_fitWidth: false,
-                        _layout_autoHeight: true,
-                        x: doc.x,
-                        y: doc.y,
-                    },
-                    uuidv4()
-                )
+                    {...OmitKeys(doc, ["data", "doc_type"]).omit, _layout_fitWidth: false, _layout_autoHeight: true}
+                ) // prettier-ignore
             );
             return [{ type: 'text', text: 'Created document.' }];
         } catch (error) {
diff --git a/src/client/views/nodes/trails/PresBox.tsx b/src/client/views/nodes/trails/PresBox.tsx
index 7c23ca8e1..3ce4dc6cb 100644
--- a/src/client/views/nodes/trails/PresBox.tsx
+++ b/src/client/views/nodes/trails/PresBox.tsx
@@ -2989,7 +2989,6 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
                                 ignoreUnrendered
                                 childDragAction={dropActionType.move}
                                 setContentViewBox={emptyFunction}
-                                // childLayoutFitWidth={returnTrue}
                                 childOpacity={returnOne}
                                 childClickScript={PresBox.navigateToDocScript}
                                 childLayoutTemplate={this.childLayoutTemplate}
diff --git a/src/server/ApiManagers/AssistantManager.ts b/src/server/ApiManagers/AssistantManager.ts
index b53581aa2..86af756a4 100644
--- a/src/server/ApiManagers/AssistantManager.ts
+++ b/src/server/ApiManagers/AssistantManager.ts
@@ -9,7 +9,7 @@
  */
 
 import { Readability } from '@mozilla/readability';
-import axios, { AxiosResponse } from 'axios';
+import axios from 'axios';
 import { spawn } from 'child_process';
 import * as fs from 'fs';
 import { writeFile } from 'fs';
@@ -122,8 +122,6 @@ export default class AssistantManager extends ApiManager {
                 const { query, max_results } = req.body;
                 const MIN_VALID_RESULTS_RATIO = 0.75; // 3/4 threshold
                 let startIndex = 1; // Start at the first result initially
-                let validResults: any[] = [];
-
                 const fetchSearchResults = async (start: number) => {
                     return customsearch.cse.list({
                         q: query,
@@ -135,20 +133,27 @@ export default class AssistantManager extends ApiManager {
                     });
                 };
 
-                const filterResultsByXFrameOptions = async (results: any[]) => {
+                const filterResultsByXFrameOptions = async (
+                    results: {
+                        url: string | null | undefined;
+                        snippet: string | null | undefined;
+                    }[]
+                ) => {
                     const filteredResults = await Promise.all(
-                        results.map(async result => {
-                            try {
-                                const urlResponse: AxiosResponse = await axios.head(result.url, { timeout: 5000 });
-                                const xFrameOptions = urlResponse.headers['x-frame-options'];
-                                if (xFrameOptions && xFrameOptions.toUpperCase() === 'SAMEORIGIN') {
-                                    return result;
+                        results
+                            .filter(result => result.url)
+                            .map(async result => {
+                                try {
+                                    const urlResponse = await axios.head(result.url!, { timeout: 5000 });
+                                    const xFrameOptions = urlResponse.headers['x-frame-options'];
+                                    if (xFrameOptions && xFrameOptions.toUpperCase() === 'SAMEORIGIN') {
+                                        return result;
+                                    }
+                                } catch (error) {
+                                    console.error(`Error checking x-frame-options for URL: ${result.url}`, error);
                                 }
-                            } catch (error) {
-                                console.error(`Error checking x-frame-options for URL: ${result.url}`, error);
-                            }
-                            return null; // Exclude the result if it doesn't match
-                        })
+                                return null; // Exclude the result if it doesn't match
+                            })
                     );
                     return filteredResults.filter(result => result !== null); // Remove null results
                 };
@@ -163,7 +168,7 @@ export default class AssistantManager extends ApiManager {
                         })) || [];
 
                     // Filter the initial results
-                    validResults = await filterResultsByXFrameOptions(initialResults);
+                    let validResults = await filterResultsByXFrameOptions(initialResults);
 
                     // If valid results are less than 3/4 of max_results, fetch more results
                     while (validResults.length < max_results * MIN_VALID_RESULTS_RATIO) {
-- 
cgit v1.2.3-70-g09d2


From f6581aebd603dcdd84e033acffe46352ce5a4485 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Wed, 19 Feb 2025 15:05:47 -0500
Subject: more gptpopup cleanup.

---
 src/client/apis/gpt/GPT.ts                         | 59 +++++++-------
 src/client/util/CurrentUserUtils.ts                |  6 +-
 src/client/util/Import & Export/ImageUtils.ts      | 12 +--
 src/client/views/StyleProviderQuiz.tsx             |  2 +-
 src/client/views/collections/CollectionSubView.tsx | 33 ++++----
 src/client/views/global/globalScripts.ts           | 14 ++--
 src/client/views/nodes/ComparisonBox.tsx           |  6 +-
 .../views/nodes/chatbot/agentsystem/Agent.ts       |  3 +-
 .../nodes/chatbot/chatboxcomponents/ChatBox.tsx    |  3 +-
 .../views/nodes/chatbot/tools/ImageCreationTool.ts | 36 ++++----
 src/client/views/pdf/GPTPopup/GPTPopup.tsx         | 95 ++++++++++------------
 src/fields/Doc.ts                                  |  2 +-
 12 files changed, 126 insertions(+), 145 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index e1ae99d97..6d9bc1d06 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -1,12 +1,11 @@
 import { ChatCompletionMessageParam, Image } from 'openai/resources';
 import { openai } from './setup';
 
-export enum GPTTypeStyle {
+export enum GPTDocCommand {
     AssignTags = 1,
     Filter = 2,
-    DocInfo = 3,
-    GeneralInfo = 4,
-    SortDocs = 5,
+    GetInfo = 3,
+    Sort = 4,
 }
 
 export const DescriptionSeperator = '======';
@@ -18,8 +17,6 @@ enum GPTCallType {
     EDIT = 'edit',
     CHATCARD = 'chatcard', // a single flashcard style response to a question
     FLASHCARD = 'flashcard', // a set of flashcard qustion/answer responses to a topic
-    QUIZ = 'quiz',
-    SORT = 'sort',
     DESCRIBE = 'describe',
     MERMAID = 'mermaid',
     DATA = 'data',
@@ -27,15 +24,17 @@ enum GPTCallType {
     PRONUNCIATION = 'pronunciation',
     DRAW = 'draw',
     COLOR = 'color',
-    RUBRIC = 'rubric', // needs to be filled in below
-    TYPE = 'type', // needs to be filled in below
-    SUBSET = 'subset', // needs to be filled in below
-    INFO = 'info', // needs to be filled in below
     TEMPLATE = 'template',
     VIZSUM = 'vizsum',
     VIZSUM2 = 'vizsum2',
     FILL = 'fill',
     COMPLETEPROMPT = 'completeprompt',
+    QUIZDOC = 'quiz_doc',
+    MAKERUBRIC = 'make_rubric', // create a definition rubric for a document to be used when quizzing the user
+    COMMANDTYPE = 'command_type', // Determine the type of command being made (GPTQueryType - eg., AssignTags, Sort, Filter, DocInfo, GenInfo) and possibly some parameters (eg, Tag type for Tags)
+    SUBSETDOCS = 'subset_docs', // select a subset of documents based on their descriptions
+    DOCINFO = 'doc_info', // provide information about a document
+    SORTDOCS = 'sort_docs',
 }
 
 type GPTCallOpts = {
@@ -69,7 +68,7 @@ const callTypeMap: { [type in GPTCallType]: GPTCallOpts } = {
         temp: 0.5,
         prompt: "You are a helpful resarch assistant. Analyze the user's data to find meaningful patterns and/or correlation. Please only return a JSON with a correlation column 1 propert, a correlation column 2 property, and an analysis property. ",
     },
-    sort: {
+    sort_docs: {
         model: 'gpt-4o',
         maxTokens: 2048,
         temp: 0.25,
@@ -89,7 +88,7 @@ const callTypeMap: { [type in GPTCallType]: GPTCallOpts } = {
         prompt: 'Make flashcards out of this text with each question and answer labeled as question and answer. Create a title for each question and asnwer that is labeled as "title".  Do not label each flashcard and do not include asterisks: ',
     },
     chatcard: { model: 'gpt-4-turbo', maxTokens: 512, temp: 0.5, prompt: 'Answer the following question as a short flashcard response. Do not include a label.' },
-    quiz: {
+    quiz_doc: {
         model: 'gpt-4-turbo',
         maxTokens: 1024,
         temp: 0,
@@ -138,20 +137,20 @@ const callTypeMap: { [type in GPTCallType]: GPTCallOpts } = {
         temp: 0.5,
         prompt: 'You will be coloring drawings. You will be given what the drawing is, then a list of descriptions for parts of the drawing. Based on each description, respond with the stroke and fill color that it should be. Follow the rules: 1. Avoid using black for stroke color 2. Make the stroke color 1-3 shades darker than the fill color 3. Use the same colors when possible. Format as {#abcdef #abcdef}, making sure theres a color for each description, and do not include any additional text.',
     },
-    type: {
+    command_type: {
         model: 'gpt-4-turbo',
         maxTokens: 1024,
         temp: 0,
         prompt: `I'm going to provide you with a question. 
                  Based on the question, is the user asking you to 
-                     ${GPTTypeStyle.AssignTags}. Assigns docs with tags(like star / heart etc)/labels, 
-                     ${GPTTypeStyle.DocInfo}. Provide information about a specific doc 
-                     ${GPTTypeStyle.Filter}. Filter docs based on a question/information 
-                     ${GPTTypeStyle.GeneralInfo}. Provide general information 
-                     ${GPTTypeStyle.SortDocs}. Put cards in a specific order. 
-                Answer with only the number for 2-5. For number one, provide the number (1) and the appropriate tag`,
+                     ${GPTDocCommand.AssignTags}. Assigns docs with tags(like star / heart etc)/labels.
+                     ${GPTDocCommand.GetInfo}. Provide information about a specific doc.
+                     ${GPTDocCommand.Filter}. Filter docs based on a question/information.
+                     ${GPTDocCommand.Sort}. Put docs in a specific order. 
+                Answer with only the number for ${GPTDocCommand.GetInfo}-${GPTDocCommand.Sort}. 
+                For number one, provide the number (${GPTDocCommand.AssignTags}) and the appropriate tag`,
     },
-    subset: {
+    subset_docs: {
         model: 'gpt-4-turbo',
         maxTokens: 1024,
         temp: 0,
@@ -164,14 +163,14 @@ const callTypeMap: { [type in GPTCallType]: GPTCallOpts } = {
                 It is VERY important that you format it exactly as described, ensuring the proper number of '${DescriptionSeperator[0]}' and '${DocSeperator[0]}' (${DescriptionSeperator.length} of each) and NO commas`,
     },
 
-    info: {
+    doc_info: {
         model: 'gpt-4-turbo',
         maxTokens: 1024,
         temp: 0,
         prompt: `Answer the user's question with a short (<100 word) response. 
                  If a particular document is selected I will provide that information (which may help with your response)`,
     },
-    rubric: {
+    make_rubric: {
         model: 'gpt-4-turbo',
         maxTokens: 1024,
         temp: 0,
@@ -188,17 +187,15 @@ let lastResp = '';
  * @returns AI Output
  */
 const gptAPICall = async (inputTextIn: string, callType: GPTCallType, prompt?: string, dontCache?: boolean) => {
-    const inputText = inputTextIn + ([GPTCallType.SUMMARY, GPTCallType.FLASHCARD, GPTCallType.QUIZ, GPTCallType.STACK].includes(callType) ? '.' : '');
+    const inputText = inputTextIn + ([GPTCallType.SUMMARY, GPTCallType.FLASHCARD, GPTCallType.QUIZDOC, GPTCallType.STACK].includes(callType) ? '.' : '');
     const opts = callTypeMap[callType];
     if (!opts) {
         console.log('The query type:' + callType + ' requires a configuration.');
         return 'Error connecting with API.';
     }
-    if (lastCall === inputText && dontCache !== true) return lastResp;
+    if (lastCall === inputText && dontCache !== true && lastResp) return lastResp;
     try {
-        lastCall = inputText;
-
-        const usePrompt = prompt ? prompt + opts.prompt : opts.prompt;
+        const usePrompt = prompt ? prompt + '.' + opts.prompt : opts.prompt;
         const messages: ChatCompletionMessageParam[] = [
             { role: 'system', content: usePrompt },
             { role: 'user', content: inputText },
@@ -210,8 +207,12 @@ const gptAPICall = async (inputTextIn: string, callType: GPTCallType, prompt?: s
             temperature: opts.temp,
             max_tokens: opts.maxTokens,
         });
-        lastResp = response.choices[0].message.content ?? '';
-        return lastResp;
+        const result = response.choices[0].message.content ?? '';
+        if (!dontCache) {
+            lastResp = result;
+            lastCall = inputText;
+        }
+        return result;
     } catch (err) {
         console.log(err);
         return 'Error connecting with API.';
diff --git a/src/client/util/CurrentUserUtils.ts b/src/client/util/CurrentUserUtils.ts
index 6ca181d92..fb349abd9 100644
--- a/src/client/util/CurrentUserUtils.ts
+++ b/src/client/util/CurrentUserUtils.ts
@@ -710,11 +710,7 @@ pie title Minerals in my tap water
             { title: "Type",      icon:"eye",            toolTip:"Sort by document type",                          btnType: ButtonType.ToggleButton, expertMode: false, toolType:"docType",    funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}},
             { title: "Color",     icon:"palette",        toolTip:"Sort by document color",                         btnType: ButtonType.ToggleButton, expertMode: false, toolType:"color",      funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}},
             { title: "Tags",      icon:"bolt",           toolTip:"Sort by document's tags",                        btnType: ButtonType.ToggleButton, expertMode: false, toolType:"tag",        funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}},
-            { title: "Sort",      icon: "sort" ,         toolTip: "Manage sort order / lock status",               btnType: ButtonType.MultiToggleButton,               toolType:"alignment", ignoreClick: true,
-              subMenu: [
-                { title: "Ascending", toolTip: "Sort the cards in ascending order", btnType: ButtonType.ToggleButton, icon: "sort-up",  toolType:"up",  ignoreClick: true,  scripts: {onClick: '{ return showFreeform(this.toolType, _readOnly_);}'} },
-                { title: "Descending",toolTip: "Sort the cards in descending order",btnType: ButtonType.ToggleButton, icon: "sort-down",toolType:"down",ignoreClick: true,  scripts: {onClick: '{ return showFreeform(this.toolType, _readOnly_);}'} },
-            ]},
+            { title: "Reverse",   icon: "sort-up",       toolTip: "Sort the cards in reverse order",               btnType: ButtonType.ToggleButton, expertMode: false, toolType:"reverse",    funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'} },
          ]
     }
 
diff --git a/src/client/util/Import & Export/ImageUtils.ts b/src/client/util/Import & Export/ImageUtils.ts
index 8d4eefa7e..f73149fdc 100644
--- a/src/client/util/Import & Export/ImageUtils.ts	
+++ b/src/client/util/Import & Export/ImageUtils.ts	
@@ -4,22 +4,16 @@ import { DocData } from '../../../fields/DocSymbols';
 import { Id } from '../../../fields/FieldSymbols';
 import { Cast, NumCast, StrCast } from '../../../fields/Types';
 import { ImageField } from '../../../fields/URLField';
+import { Upload } from '../../../server/SharedMediaTypes';
 import { Networking } from '../../Network';
 
 export namespace ImageUtils {
-    export type imgInfo = {
-        contentSize: number;
-        nativeWidth: number;
-        nativeHeight: number;
-        source: string;
-        exifData: { error: string | undefined; data: string };
-    };
-    export const ExtractImgInfo = async (document: Doc): Promise<imgInfo | undefined> => {
+    export const ExtractImgInfo = async (document: Doc): Promise<Upload.InspectionResults | undefined> => {
         const field = Cast(document.data, ImageField);
         return field ? Networking.PostToServer('/inspectImage', { source: field.url.href }) : undefined;
     };
 
-    export const AssignImgInfo = (document: Doc, data?: imgInfo) => {
+    export const AssignImgInfo = (document: Doc, data?: Upload.InspectionResults) => {
         if (data) {
             data.nativeWidth && (document._height = (NumCast(document._width) * data.nativeHeight) / data.nativeWidth);
             const proto = document[DocData];
diff --git a/src/client/views/StyleProviderQuiz.tsx b/src/client/views/StyleProviderQuiz.tsx
index b3fb8c930..d8eeb3490 100644
--- a/src/client/views/StyleProviderQuiz.tsx
+++ b/src/client/views/StyleProviderQuiz.tsx
@@ -265,7 +265,7 @@ export namespace styleProviderQuiz {
                     '. ' +
                     rubricText +
                     '. One sentence and evaluate based on meaning, not wording. Provide a hex color at the beginning with a period after it on a scale of green (minor details missed) to red (big error) for how correct the answer is. Example: "#FFFFFF. Pasta is delicious."';
-                const response = await gptAPICall(queryText, GPTCallType.QUIZ);
+                const response = await gptAPICall(queryText, GPTCallType.QUIZDOC);
                 const hexSent = extractHexAndSentences(response);
                 doc.quiz = hexSent.sentences?.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
                 doc.backgroundColor = '#' + hexSent.hexNumber;
diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx
index 954f9aa4c..b40cd2761 100644
--- a/src/client/views/collections/CollectionSubView.tsx
+++ b/src/client/views/collections/CollectionSubView.tsx
@@ -37,6 +37,9 @@ export enum docSortings {
     Tag = 'tag',
     None = '',
 }
+
+export const ChatSortField = 'chat_sortIndex';
+
 export interface CollectionViewProps extends React.PropsWithChildren<FieldViewProps> {
     isAnnotationOverlay?: boolean; // is the collection an annotation overlay (eg an overlay on an image/video/etc)
     isAnnotationOverlayScrollable?: boolean; // whether the annotation overlay can be vertically scrolled (just for tree views, currently)
@@ -229,23 +232,21 @@ export function CollectionSubView<X>() {
 
         childSortedDocs = (docsIn: Doc[], dragIndex: number) => {
             const sortType = StrCast(this.Document[this._props.fieldKey + '_sort']) as docSortings;
-            const isDesc = BoolCast(this.Document[this._props.fieldKey + '_sort_desc']);
+            const isDesc = BoolCast(this.Document[this._props.fieldKey + '_sort_reverse']);
             const docs = docsIn.slice();
-            if (sortType) {
-                docs.sort((docA, docB) => {
-                    const [typeA, typeB] = (() => {
-                        switch (sortType) {
-                            default:                
-                            case docSortings.Type: return [StrCast(docA.type),                                   StrCast(docB.type)];
-                            case docSortings.Chat: return [NumCast(docA.chatIndex, 9999),                        NumCast(docB.chatIndex,9999)];
-                            case docSortings.Time: return [DateCast(docA.author_date)?.date ?? Date.now(),       DateCast(docB.author_date)?.date ?? Date.now()];
-                            case docSortings.Color:return [DashColor(StrCast(docA.backgroundColor)).hsv().hue(), DashColor(StrCast(docB.backgroundColor)).hsv().hue()];
-                            case docSortings.Tag:  return [StrListCast(docA.tags).join(""),                      StrListCast(docB.tags).join("")];
-                        }
-                    })(); //prettier-ignore
-                    return (typeA < typeB ? -1 : typeA > typeB ? 1 : 0) * (isDesc ? 1 : -1);
-                });
-            }
+            sortType && docs.sort((docA, docB) => {
+                const [typeA, typeB] = (() => {
+                    switch (sortType) {
+                        default:                
+                        case docSortings.Type: return [StrCast(docA.type),                                   StrCast(docB.type)];
+                        case docSortings.Chat: return [NumCast(docA[ChatSortField], 9999),                   NumCast(docB[ChatSortField], 9999)];
+                        case docSortings.Time: return [DateCast(docA.author_date)?.date ?? Date.now(),       DateCast(docB.author_date)?.date ?? Date.now()];
+                        case docSortings.Color:return [DashColor(StrCast(docA.backgroundColor)).hsv().hue(), DashColor(StrCast(docB.backgroundColor)).hsv().hue()];
+                        case docSortings.Tag:  return [StrListCast(docA.tags).join(""),                      StrListCast(docB.tags).join("")];
+                    }
+                })(); 
+                return (typeA < typeB ? -1 : typeA > typeB ? 1 : 0) * (isDesc ? -1 : 1);
+            }); //prettier-ignore
             if (dragIndex !== -1) {
                 const draggedDoc = DragManager.docsBeingDragged[0];
                 const originalIndex = docs.findIndex(doc => doc === draggedDoc);
diff --git a/src/client/views/global/globalScripts.ts b/src/client/views/global/globalScripts.ts
index 2bc0e3338..79873ed8f 100644
--- a/src/client/views/global/globalScripts.ts
+++ b/src/client/views/global/globalScripts.ts
@@ -152,7 +152,7 @@ ScriptingGlobals.add(function toggleOverlay(checkResult?: boolean) {
 
 // eslint-disable-next-line prefer-arrow-callback
 ScriptingGlobals.add(function showFreeform(
-    attr: 'flashcards' | 'hcenter' | 'vcenter' | 'grid' | 'snaplines' | 'clusters' | 'viewAll' | 'fitOnce' | 'time' | 'docType' | 'color' | 'chat' | 'up' | 'down' | 'toggle-chat' | 'toggle-tags' | 'tag',
+    attr: 'flashcards' | 'hcenter' | 'vcenter' | 'grid' | 'snaplines' | 'clusters' | 'viewAll' | 'fitOnce' | 'time' | 'docType' | 'color' | 'chat' | 'reverse' | 'toggle-chat' | 'toggle-tags' | 'tag',
     checkResult?: boolean,
     persist?: boolean
 ) {
@@ -163,7 +163,7 @@ ScriptingGlobals.add(function showFreeform(
     }
 
     // prettier-ignore
-    const map: Map<'flashcards' | 'hcenter' | 'vcenter' | 'grid' | 'snaplines' | 'clusters' | 'viewAll' | 'fitOnce' | 'time' | 'docType' | 'color' | 'chat' | 'up' | 'down'| 'toggle-chat' | 'toggle-tags' | 'tag', 
+    const map: Map<'flashcards' | 'hcenter' | 'vcenter' | 'grid' | 'snaplines' | 'clusters' | 'viewAll' | 'fitOnce' | 'time' | 'docType' | 'color' | 'chat' | 'reverse'| 'toggle-chat' | 'toggle-tags' | 'tag', 
     { 
         waitForRender?: boolean; 
         checkResult: (doc: Doc) => boolean; 
@@ -214,13 +214,9 @@ ScriptingGlobals.add(function showFreeform(
             checkResult: (doc: Doc) => StrCast(doc?.[Doc.LayoutFieldKey(doc)+"_sort"]) === "tag",
             setDoc: (doc: Doc, dv: DocumentView) => { doc[Doc.LayoutFieldKey(doc)+"_sort"] === "tag" ? doc[Doc.LayoutFieldKey(doc)+"_sort"] = '' : doc[Doc.LayoutFieldKey(doc)+"_sort"] = docSortings.Tag}, // prettier-ignore
         }],
-        ['up', {
-            checkResult: (doc: Doc) => BoolCast(!doc?.[Doc.LayoutFieldKey(doc)+"_sort_desc"]),
-            setDoc: (doc: Doc, dv: DocumentView) => { doc[Doc.LayoutFieldKey(doc)+"_sort_desc"] = undefined; },
-        }],
-        ['down', {
-            checkResult: (doc: Doc) => BoolCast(doc?.[Doc.LayoutFieldKey(doc)+"_sort_desc"]),
-            setDoc: (doc: Doc, dv: DocumentView) => { doc[Doc.LayoutFieldKey(doc)+"_sort_desc"] = true; },
+        ['reverse', {
+            checkResult: (doc: Doc) => BoolCast(doc?.[Doc.LayoutFieldKey(doc)+"_sort_reverse"]),
+            setDoc: (doc: Doc, dv: DocumentView) => { doc[Doc.LayoutFieldKey(doc)+"_sort_reverse"] = !doc[Doc.LayoutFieldKey(doc)+"_sort_reverse"]; },
         }],
         ['toggle-chat', {
             checkResult: (doc: Doc) => SnappingManager.ChatVisible,
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index cb0831d3c..5315612e1 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -291,7 +291,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             this.askGPTPhonemes(this._inputValue);
             this._renderSide = this.backKey;
             this._outputValue = '';
-        } else if (this._inputValue) this.askGPT(GPTCallType.QUIZ);
+        } else if (this._inputValue) this.askGPT(GPTCallType.QUIZDOC);
     };
 
     onPointerMove = ({ movementX }: PointerEvent) => {
@@ -511,7 +511,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
      */
     askGPT = async (callType: GPTCallType) => {
         const questionText = this.frontText;
-        const queryText = questionText + (callType == GPTCallType.QUIZ ? ' UserAnswer: ' + this._inputValue + '. ' + ' Rubric: ' + this.backText : '');
+        const queryText = questionText + (callType == GPTCallType.QUIZDOC ? ' UserAnswer: ' + this._inputValue + '. ' + ' Rubric: ' + this.backText : '');
 
         this.loading = true;
         const res = !this.frontText
@@ -522,7 +522,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                           case GPTCallType.CHATCARD:
                               DocCast(this.dataDoc[this.backKey])[DocData].text = resp;
                               break;
-                          case GPTCallType.QUIZ:
+                          case GPTCallType.QUIZDOC:
                               this._renderSide = this.backKey;
                               this._outputValue = resp.replace(/UserAnswer/g, "user's answer").replace(/Rubric/g, 'rubric');
                               break;
diff --git a/src/client/views/nodes/chatbot/agentsystem/Agent.ts b/src/client/views/nodes/chatbot/agentsystem/Agent.ts
index b2b0c9aea..2ed808622 100644
--- a/src/client/views/nodes/chatbot/agentsystem/Agent.ts
+++ b/src/client/views/nodes/chatbot/agentsystem/Agent.ts
@@ -22,6 +22,7 @@ import { ChatCompletionMessageParam } from 'openai/resources';
 import { Doc } from '../../../../../fields/Doc';
 import { parsedDoc } from '../chatboxcomponents/ChatBox';
 import { WebsiteInfoScraperTool } from '../tools/WebsiteInfoScraperTool';
+import { Upload } from '../../../../../server/SharedMediaTypes';
 //import { CreateTextDocTool } from '../tools/CreateTextDocumentTool';
 
 dotenv.config();
@@ -61,7 +62,7 @@ export class Agent {
         history: () => string,
         csvData: () => { filename: string; id: string; text: string }[],
         addLinkedUrlDoc: (url: string, id: string) => void,
-        createImage: (result: any, options: DocumentOptions) => void,
+        createImage: (result: Upload.FileInformation & Upload.InspectionResults, options: DocumentOptions) => void,
         addLinkedDoc: (doc: parsedDoc) => Doc | undefined,
         // eslint-disable-next-line @typescript-eslint/no-unused-vars
         createCSVInDash: (url: string, title: string, id: string, data: string) => void
diff --git a/src/client/views/nodes/chatbot/chatboxcomponents/ChatBox.tsx b/src/client/views/nodes/chatbot/chatboxcomponents/ChatBox.tsx
index 16da360fc..6e9307d37 100644
--- a/src/client/views/nodes/chatbot/chatboxcomponents/ChatBox.tsx
+++ b/src/client/views/nodes/chatbot/chatboxcomponents/ChatBox.tsx
@@ -42,6 +42,7 @@ import './ChatBox.scss';
 import MessageComponentBox from './MessageComponent';
 import { ProgressBar } from './ProgressBar';
 import { OpenWhere } from '../../OpenWhere';
+import { Upload } from '../../../../../server/SharedMediaTypes';
 
 dotenv.config();
 
@@ -412,7 +413,7 @@ export class ChatBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
         });
 
     @action
-    createImageInDash = async (result: any, options: DocumentOptions) => {
+    createImageInDash = async (result: Upload.FileInformation & Upload.InspectionResults, options: DocumentOptions) => {
         const newImgSrc =
             result.accessPaths.agnostic.client.indexOf('dashblobstore') === -1 //
                 ? ClientUtils.prepend(result.accessPaths.agnostic.client)
diff --git a/src/client/views/nodes/chatbot/tools/ImageCreationTool.ts b/src/client/views/nodes/chatbot/tools/ImageCreationTool.ts
index 177552c5c..dc6140871 100644
--- a/src/client/views/nodes/chatbot/tools/ImageCreationTool.ts
+++ b/src/client/views/nodes/chatbot/tools/ImageCreationTool.ts
@@ -1,10 +1,10 @@
-import { v4 as uuidv4 } from 'uuid';
 import { RTFCast } from '../../../../../fields/Types';
 import { DocumentOptions } from '../../../../documents/Documents';
 import { Networking } from '../../../../Network';
 import { ParametersType, ToolInfo } from '../types/tool_types';
 import { Observation } from '../types/types';
 import { BaseTool } from './BaseTool';
+import { Upload } from '../../../../../server/SharedMediaTypes';
 
 const imageCreationToolParams = [
     {
@@ -25,8 +25,8 @@ const imageCreationToolInfo: ToolInfo<ImageCreationToolParamsType> = {
 };
 
 export class ImageCreationTool extends BaseTool<ImageCreationToolParamsType> {
-    private _createImage: (result: any, options: DocumentOptions) => void;
-    constructor(createImage: (result: any, options: DocumentOptions) => void) {
+    private _createImage: (result: Upload.FileInformation & Upload.InspectionResults, options: DocumentOptions) => void;
+    constructor(createImage: (result: Upload.FileInformation & Upload.InspectionResults, options: DocumentOptions) => void) {
         super(imageCreationToolInfo);
         this._createImage = createImage;
     }
@@ -42,23 +42,19 @@ export class ImageCreationTool extends BaseTool<ImageCreationToolParamsType> {
             });
             console.log('Image generation result:', result);
             this._createImage(result, { text: RTFCast(image_prompt) });
-            if (url) {
-                const id = uuidv4();
-
-                return [
-                    {
-                        type: 'image_url',
-                        image_url: { url },
-                    },
-                ];
-            } else {
-                return [
-                    {
-                        type: 'text',
-                        text: `An error occurred while generating image.`,
-                    },
-                ];
-            }
+            return url
+                ? [
+                      {
+                          type: 'image_url',
+                          image_url: { url },
+                      },
+                  ]
+                : [
+                      {
+                          type: 'text',
+                          text: `An error occurred while generating image.`,
+                      },
+                  ];
         } catch (error) {
             console.log(error);
             return [
diff --git a/src/client/views/pdf/GPTPopup/GPTPopup.tsx b/src/client/views/pdf/GPTPopup/GPTPopup.tsx
index 72381cfad..cb3e9b2d7 100644
--- a/src/client/views/pdf/GPTPopup/GPTPopup.tsx
+++ b/src/client/views/pdf/GPTPopup/GPTPopup.tsx
@@ -10,7 +10,7 @@ import { ClientUtils } from '../../../../ClientUtils';
 import { Doc } from '../../../../fields/Doc';
 import { NumCast, StrCast } from '../../../../fields/Types';
 import { Networking } from '../../../Network';
-import { DescriptionSeperator, DocSeperator, GPTCallType, GPTTypeStyle, gptAPICall, gptImageCall } from '../../../apis/gpt/GPT';
+import { DescriptionSeperator, DocSeperator, GPTCallType, GPTDocCommand, gptAPICall, gptImageCall } from '../../../apis/gpt/GPT';
 import { DocUtils } from '../../../documents/DocUtils';
 import { Docs } from '../../../documents/Documents';
 import { SettingsManager } from '../../../util/SettingsManager';
@@ -18,7 +18,7 @@ import { SnappingManager } from '../../../util/SnappingManager';
 import { undoable } from '../../../util/UndoManager';
 import { ObservableReactComponent } from '../../ObservableReactComponent';
 import { TagItem } from '../../TagsView';
-import { docSortings } from '../../collections/CollectionSubView';
+import { ChatSortField, docSortings } from '../../collections/CollectionSubView';
 import { DocumentView } from '../../nodes/DocumentView';
 import { AnchorMenu } from '../AnchorMenu';
 import './GPTPopup.scss';
@@ -36,6 +36,7 @@ export enum GPTPopupMode {
 export class GPTPopup extends ObservableReactComponent<object> {
     // eslint-disable-next-line no-use-before-define
     static Instance: GPTPopup;
+    static ChatTag = '#chat'; // tag used by GPT popup to filter docs
     private _messagesEndRef: React.RefObject<HTMLDivElement>;
     private _correlatedColumns: string[] = [];
     private _dataChatPrompt: string | undefined = undefined;
@@ -77,10 +78,10 @@ export class GPTPopup extends ObservableReactComponent<object> {
                 if (hasChildDocs) {
                     this._textToDocMap.clear();
                     this.setCollectionContext(selDoc.Document);
-                    this.onGptResponse = (sortResult: string, questionType: GPTTypeStyle, tag?: string) => this.processGptResponse(selDoc, this._textToDocMap, sortResult, questionType, tag);
+                    this.onGptResponse = (sortResult: string, questionType: GPTDocCommand, args?: string) => this.processGptResponse(selDoc, this._textToDocMap, sortResult, questionType, args);
                     this.onQuizRandom = () => this.randomlyChooseDoc(selDoc.Document, hasChildDocs());
                     this._documentDescriptions = Promise.all(hasChildDocs().map(doc =>
-                            Doc.getDescription(doc).then(text => this._textToDocMap.set(text, doc) && `${DescriptionSeperator}${text}${DescriptionSeperator}`)
+                            Doc.getDescription(doc).then(text => this._textToDocMap.set(text.trim(), doc) && `${DescriptionSeperator}${text}${DescriptionSeperator}`)
                         )).then(docDescriptions => docDescriptions.join()); // prettier-ignore
                 }
             },
@@ -110,8 +111,8 @@ export class GPTPopup extends ObservableReactComponent<object> {
     @action public setMode = (mode: GPTPopupMode) => (this._mode = mode);
 
     onQuizRandom?: () => void;
-    onGptResponse?: (sortResult: string, questionType: GPTTypeStyle, tag?: string) => void;
-    questionTypeNumberToStyle = (questionType: string) => +questionType.split(' ')[0][0];
+    onGptResponse?: (sortResult: string, questionType: GPTDocCommand, args?: string) => void;
+    NumberToCommandType = (questionType: string) => +questionType.split(' ')[0][0];
 
     /**
      * Processes gpt's output depending on the type of question the user asked. Converts gpt's string output to
@@ -120,44 +121,38 @@ export class GPTPopup extends ObservableReactComponent<object> {
      * @param questionType
      * @param tag
      */
-    processGptResponse = (docView: DocumentView, textToDocMap: Map<string, Doc>, gptOutput: string, questionType: GPTTypeStyle, tag?: string) =>
+    processGptResponse = (docView: DocumentView, textToDocMap: Map<string, Doc>, gptOutput: string, questionType: GPTDocCommand, args?: string) =>
         undoable(() => {
-            // Split the string into individual list items
-            const listItems = gptOutput.split('======').filter(item => item.trim() !== '');
-
-            if (questionType === GPTTypeStyle.Filter) {
-                docView.ComponentView?.hasChildDocs?.().forEach(d => TagItem.removeTagFromDoc(d, '#chat'));
-            }
-
-            if (questionType === GPTTypeStyle.SortDocs) {
-                docView.Document[docView.ComponentView?.fieldKey + '_sort'] = docSortings.Chat;
-            }
-
-            listItems.forEach((item, index) => {
-                const normalizedItem = item.replace(/\n/g, ' ').trim();
-                // find the corresponding Doc in the textToDoc map
-                const doc = textToDocMap.get(normalizedItem);
-                if (doc) {
+            switch (questionType) { // reset collection based on question typefc
+                case GPTDocCommand.Sort:
+                    docView.Document[docView.ComponentView?.fieldKey + '_sort'] = docSortings.Chat;
+                    break;
+                case GPTDocCommand.Filter:
+                    docView.ComponentView?.hasChildDocs?.().forEach(d => TagItem.removeTagFromDoc(d, GPTPopup.ChatTag));
+                    break;
+            } // prettier-ignore
+
+            gptOutput.split('======').filter(item => item.trim() !== '')  // Split output into individual document contents
+                .map(docContentRaw => textToDocMap.get(docContentRaw.replace(/\n/g, ' ').trim())) // the find the corresponding Doc using textToDoc map
+                .filter(doc => doc).map(doc => doc!) // filter out undefined values
+                .forEach((doc, index) => {
                     switch (questionType) {
-                        case GPTTypeStyle.SortDocs:
-                            doc.chatIndex = index;
+                        case GPTDocCommand.Sort:
+                            doc[ChatSortField] = index;
                             break;
-                        case GPTTypeStyle.AssignTags:
-                            if (tag) {
-                                const hashTag = tag.startsWith('#') ? tag : '#' + tag[0].toLowerCase() + tag.slice(1);
-                                const filterTag = Doc.MyFilterHotKeys.map(key => StrCast(key.toolType)).find(key => key.includes(tag)) ?? hashTag;
+                        case GPTDocCommand.AssignTags:
+                            if (args) {
+                                const hashTag = args.startsWith('#') ? args : '#' + args[0].toLowerCase() + args.slice(1);
+                                const filterTag = Doc.MyFilterHotKeys.map(key => StrCast(key.toolType)).find(key => key.includes(args)) ?? hashTag;
                                 TagItem.addTagToDoc(doc, filterTag);
                             }
                             break;
-                        case GPTTypeStyle.Filter:
-                            TagItem.addTagToDoc(doc, '#chat');
-                            Doc.setDocFilter(docView.Document, 'tags', '#chat', 'check');
+                        case GPTDocCommand.Filter:
+                            TagItem.addTagToDoc(doc, GPTPopup.ChatTag);
+                            Doc.setDocFilter(docView.Document, 'tags', GPTPopup.ChatTag, 'check');
                             break;
                     }
-                } else {
-                    console.warn(`No matching document found for item: ${normalizedItem}`);
-                }
-            });
+                }); // prettier-ignore
         }, '')();
 
     /**
@@ -173,7 +168,7 @@ export class GPTPopup extends ObservableReactComponent<object> {
         StrCast(doc.gptRubric)
             ? Promise.resolve(StrCast(doc.gptRubric))
             : Doc.getDescription(doc).then(desc =>
-                  gptAPICall(desc, GPTCallType.RUBRIC)
+                  gptAPICall(desc, GPTCallType.MAKERUBRIC)
                       .then(res => (doc.gptRubric = res))
                       .catch(err => console.error('GPT call failed', err))
               );
@@ -191,7 +186,7 @@ export class GPTPopup extends ObservableReactComponent<object> {
                     `Question: ${desc}; 
                     UserAnswer: ${quizAnswer};
                     Rubric: ${StrCast(doc.gptRubric)}`,
-                    GPTCallType.QUIZ
+                    GPTCallType.QUIZDOC
                 ).then(res => {
                     this._conversationArray.push(res || 'GPT provided no answer');
                     this.onQuizRandom?.();
@@ -205,20 +200,20 @@ export class GPTPopup extends ObservableReactComponent<object> {
      * @param userPrompt the user's input that chat will respond to
      */
     generateUserPromptResponse = (userPrompt: string) =>
-        gptAPICall(userPrompt, GPTCallType.TYPE).then(questionType =>
+        gptAPICall(userPrompt, GPTCallType.COMMANDTYPE, undefined, true).then((commandType, args = commandType.split(' ').slice(1).join(' ')) =>
             (async () => {
-                switch (this.questionTypeNumberToStyle(questionType)) {
-                    case GPTTypeStyle.AssignTags:
-                    case GPTTypeStyle.Filter:    return this._documentDescriptions?.then(descs => gptAPICall(descs, GPTCallType.SUBSET, userPrompt)) ?? "";
-                    case GPTTypeStyle.SortDocs:  return this._documentDescriptions?.then(descs => gptAPICall(descs, GPTCallType.SORT, userPrompt)) ?? "";
-                    default:                     return Doc.getDescription(DocumentView.SelectedDocs().lastElement()).then(desc => gptAPICall(desc, GPTCallType.INFO, userPrompt));
+                switch (this.NumberToCommandType(commandType)) {
+                    case GPTDocCommand.AssignTags:
+                    case GPTDocCommand.Filter:    return this._documentDescriptions?.then(descs => gptAPICall(userPrompt, GPTCallType.SUBSETDOCS, descs)) ?? "";
+                    case GPTDocCommand.Sort:      return this._documentDescriptions?.then(descs => gptAPICall(userPrompt, GPTCallType.SORTDOCS, descs)) ?? "";
+                    default:                      return Doc.getDescription(DocumentView.SelectedDocs().lastElement()).then(desc => gptAPICall(userPrompt, GPTCallType.DOCINFO, desc));
                 } // prettier-ignore
             })().then(
                 action(res => {
                     // Trigger the callback with the result
-                    this.onGptResponse?.(res || 'Something went wrong :(', this.questionTypeNumberToStyle(questionType), questionType.split(' ').slice(1).join(' '));
+                    this.onGptResponse?.(res || 'Something went wrong :(', this.NumberToCommandType(commandType), args);
                     this._conversationArray.push(
-                        [GPTTypeStyle.GeneralInfo, GPTTypeStyle.DocInfo].includes(this.questionTypeNumberToStyle(questionType)) ? res:
+                        this.NumberToCommandType(commandType) === GPTDocCommand.GetInfo ? res:
                         // Extract explanation surrounded by the DocSeperator string (defined in GPT.ts) at the top or both at the top and bottom
                         (res.match(new RegExp(`${DocSeperator}\\s*([\\s\\S]*?)\\s*(?:${DocSeperator}|$)`)) ?? [])[1]?.trim() ?? 'No explanation found'
                     );
@@ -583,10 +578,10 @@ export class GPTPopup extends ObservableReactComponent<object> {
                         tooltip="Clear Chat filter"
                         toggleType={ToggleType.BUTTON}
                         type={Type.PRIM}
-                        toggleStatus={Doc.hasDocFilter(this._collectionContext, 'tags', '#chat')}
-                        text={Doc.hasDocFilter(this._collectionContext, 'tags', '#chat') ? 'filtered' : ''}
-                        color={Doc.hasDocFilter(this._collectionContext, 'tags', '#chat') ? 'red' : 'transparent'}
-                        onClick={() => this._collectionContext && Doc.setDocFilter(this._collectionContext, 'tags', '#chat', 'remove')}
+                        toggleStatus={Doc.hasDocFilter(this._collectionContext, 'tags', GPTPopup.ChatTag)}
+                        text={Doc.hasDocFilter(this._collectionContext, 'tags', GPTPopup.ChatTag) ? 'filtered' : ''}
+                        color={Doc.hasDocFilter(this._collectionContext, 'tags', GPTPopup.ChatTag) ? 'red' : 'transparent'}
+                        onClick={() => this._collectionContext && Doc.setDocFilter(this._collectionContext, 'tags', GPTPopup.ChatTag, 'remove')}
                     />
                     {(this._mode === GPTPopupMode.USER_PROMPT || this._mode === GPTPopupMode.QUIZ_RESPONSE) && (
                         <IconButton color={StrCast(SettingsManager.userVariantColor)} tooltip="back" icon={<CgCornerUpLeft size="16px" />} onClick={() => (this._mode = GPTPopupMode.GPT_MENU)} />
diff --git a/src/fields/Doc.ts b/src/fields/Doc.ts
index 950d9047c..bdd41b0bb 100644
--- a/src/fields/Doc.ts
+++ b/src/fields/Doc.ts
@@ -1482,7 +1482,7 @@ export namespace Doc {
                 case DocumentType.IMG: return curDescription || imageUrlToBase64(ImageCastWithSuffix(Doc.LayoutField(tdoc), '_o') ?? '')
                                                 .then(hrefBase64 => gptImageLabel(hrefBase64, 'Give three to five labels to describe this image.'));
                 case DocumentType.RTF: return RTFCast(tdoc[Doc.LayoutFieldKey(tdoc)]).Text;
-                default:               return StrCast(tdoc.title);
+                default:               return StrCast(tdoc.title).startsWith("Untitled") ? "" : StrCast(tdoc.title);
         }}); // prettier-ignore
         return docText(doc).then(text => (doc[DocData][Doc.LayoutFieldKey(doc) + '_description'] = text));
     }
-- 
cgit v1.2.3-70-g09d2

